1

我正在使用以下代码来模拟按下 PrintScreen 按钮以捕获 Internet Explorer 窗口的图像。我已将 Printscreen 指定为 Greenshot 工具中的热键,以一次性捕获整页的图像,而无需滚动。

Extern.Declare micLong, "PostMessage", "user32.dll", "PostMessageA", micHwnd, micLong, micLong, micLong

Const WM_KEYDOWN = 273
Const VK_SNAPSHOT = 44

iResult = Extern.PostMessage( Hwnd, WM_KEYDOWN, VK_SNAPSHOT, 0)

但不知何故,值iResult始终为 1。Hwnd是传递给Postmessage函数的 Internet Explorer 窗口的实际窗口句柄。我之所以使用这种方法是因为截图捕获过程需要完全自动化,并且应该在系统锁定时运行。SendKeys系统锁定时不起作用,因此我不得不移至Post Message.

有人可以帮我解决这个问题。

4

1 回答 1

0

如果控制台被锁定,则整个WinStation用户会话都没有连接,因此桌面的行为方式与解锁状态不同。它不会重绘,等等。我认为不可能忽略这一点。如果控制台被锁定,屏幕截图将永远不会显示任何内容。

暂时忽略这个事实,我看到你只发送WM_KEYDOWN消息。如果用户按下某个键,Windows 会为此发送一个WM_KEYDOWN,WM_KEYUP消息,反映该键的按下和释放。可能是目标应用程序轮询WM_KEYUP消息以触发屏幕截图。WM_KEYDOWN此外,应用程序忽略消息并仅做出反应是很常见的WM_KEYUP,因为只有在 上WM_KEYUP,您可以查询键盘的 Shift 状态,从而可以区分“A”和“Shift-A”,例如例子。

服务器桌面会话的捕获屏幕中,有人解决了类似的问题。

于 2014-07-30T11:08:49.130 回答