0

我对人工智能越来越感兴趣,但我仍在学习 Windows API 的基础知识。我目前的目标是创建一个c++调用SendInput模拟 PrtSc 被按下的进程(打印屏幕按钮)。这是我目前能想到的让程序能够像人类一样看到屏幕的一帧的唯一方法。

举个简单的例子,假设出于某种原因,我希望我的程序能够“自行查看”,Windows 7 上的时钟显示的时间。因此,为了让计算机和我自己轻松完成任务,假设我们知道工具栏位于屏幕底部。我们已经知道要检查的矩形位图的确切屏幕坐标。因此,我们调用SendInput模拟按下PrtSc并将屏幕显示复制到剪贴板,然后我们在这些坐标处检查剪贴板并进行一些特征检测以查看有哪些数字,其余的从那里开始下坡。

那么我的问题是,这是实现这样一个程序的合理方式吗?还是我让这变得比需要的更困难?

4

1 回答 1

3

您根本不需要模拟 PrtSc 按钮来抓取屏幕截图。您可以直接从屏幕上截取屏幕截图并将其复制到内存位图中,例如:

int iScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int iScreenHeight = GetSystemMetrics(SM_CYSCREEN);

HDC hScreenDC = GetDC(0);
HDC hMemDC = CreateCompatibleDC(hScreenDC);
HBITMAP hScreenBmp = CreateCompatibleBitmap(hMemDC, iScreenWidth, iScreenHeight);
HBITMAP hOldBmp = SelectObject(hMemDC, hScreenBmp);
BitBlt(hMemDC, 0, 0, iScreenWidth, iScreenHeight, hScreenDC, 0, 0, SRCCOPY);
ReleaseDC(0, hScreenDC);

// use hScreenBmp as needed...

SelectObject(hMemDC, hOldBmp);
DeleteObject(hScreenBmp);

为了具体获取时钟值,为什么还要费心截图呢?只需使用该GetLocalTime()功能即可。

于 2013-03-14T21:00:35.010 回答