Windows系统,有一个软件需要实时刷新才能收到信息,如果没有刷新,收不到信息。所以我需要一个能实现能隔2分钟刷新一下,如果有新信息来就截图自动保存下来的软件。有没有推荐的,谢谢了
17条回答 默认 最新
胸毛男 2021-10-08 11:31关注思路:MFC程序。。。。。1、获得屏幕HWND 2、获得屏幕HDC 3、创建HDC句柄 4、取得屏幕矩形 5、创建匹配的bitmap 6、设置实体 7‘bitblt函数画一下 记得要删除临时的HDC 还有Bitmap 确实是用SetTimer定时截取。这是部分程序 你改吧改吧应该可用
void CServerMyFaTuDlg::CapSreen()
{
HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND.
HDC hScreenDC = ::GetDC(hWnd); //获得屏幕的HDC.
HDC MemDC = ::CreateCompatibleDC(hScreenDC);
RECT rect;
::GetWindowRect(hWnd, &rect);
SIZE screensize;
screensize.cx = rect.right - rect.left;
screensize.cy = rect.bottom - rect.top;
hBitmap = ::CreateCompatibleBitmap(hScreenDC, screensize.cx, screensize.cy);
HGDIOBJ hOldBMP = ::SelectObject(MemDC, hBitmap);
::BitBlt(MemDC, 0, 0, screensize.cx, screensize.cy, hScreenDC, rect.left, rect.top, SRCCOPY);
::SelectObject(MemDC, hOldBMP);
::DeleteObject(hOldBMP);
::ReleaseDC(hWnd, MemDC);
::DeleteObject(MemDC);
::DeleteDC(MemDC);
::ReleaseDC(hWnd, hScreenDC);
::DeleteDC(hScreenDC);}
我做了个带界面的exe 需要vs2013的环境
运行起来是这样

每N秒次按照“桌面截图+年月日时分秒.bmp”格式存图。
是这样吗?我又添加了些程序:把鼠标移动到屏幕右上角 点击鼠标左键 按F5刷新桌面 这是整个线程的程序
```c++ DWORD WINAPI CServerMyFaTuDlg::Thread_CapScreenSave(LPVOID pthread) { CServerMyFaTuDlg* dlg = (CServerMyFaTuDlg*)pthread; int iIng = dlg->GetDlgItemInt(IDC_EDIT3); dlg->SetTimer(0, iIng * 1000, NULL); CString strFilePath; dlg->GetDlgItemTextW(IDC_EDIT4, strFilePath); dlg->GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE); // 记录时间 CTime tm = CTime::GetCurrentTime(); CString strDateTime; CString strFinnal; while (dlg->abstate.load(std::memory_order_acquire)==TRUE) { tm = CTime::GetCurrentTime(); strDateTime = tm.Format(L"%Y%m%d%H%M%S"); HDC hdc = ::GetDC(NULL); int iWidth = GetSystemMetrics(SM_CXSCREEN); //获取屏幕水平分辨率 int iHeight = GetSystemMetrics(SM_CYSCREEN); //获取屏幕垂直分辨率 SetCursorPos(iWidth, 0);//设置鼠标位置 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//左键按下 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//左键弹起 Sleep(10); //通过F5,刷新桌面 HWND hWndProgram = ::FindWindow(_T("Progman"), NULL); HWND hWndDefView = ::FindWindowEx(hWndProgram, NULL, _T("SHELLDLL_DefView"), NULL); HWND hWndListView = ::FindWindowEx(hWndDefView, NULL, _T("SysListView32"), NULL); ::PostMessage(hWndListView, WM_KEYDOWN, VK_F5, 0); ::PostMessage(hWndListView, WM_KEYUP, VK_F5, 0); // 截图 dlg->CapSreen(); strFinnal = strFilePath + L"\\桌面截图" + strDateTime + L".bmp"; if (!dlg->SaveBitmapToFile(dlg->hBitmap, strFinnal)) { dlg->PostMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON1, BN_CLICKED), NULL); } WaitForSingleObject(dlg->hEvent, INFINITE); } return 0; }```
你要保证电脑没有开游戏,浏览器什么的,右上角要留出来可以点击鼠标的位置哦。这是这个工程的源码链接,只能这样了 ┑(~▽ ~)┍
https://download.csdn.net/download/weixin_41376117/29638132评论 打赏 举报解决 10无用 4