c ++程序截取屏幕截图

rst*_*t12 6 c++ screenshot printscreen

我正在制作一个程序,它将点击键盘的printscreen键.我使用的代码如下:

INPUT myInput;

myInput.type = INPUT_KEYBOARD;

KEYBDINPUT keyboardInput;
keyboardInput.wScan = 0;
keyboardInput.dwFlags = 0;
keyboardInput.time = 0;
keyboardInput.dwExtraInfo = 0;
keyboardInput.wVk = VK_SNAPSHOT; 
myInput.ki = keyboardInput;

SendInput(1, &myInput, sizeof(INPUT));//pressing the printscreen key

keyboardInput.dwFlags = KEYEVENTF_KEYUP;
myInput.ki = keyboardInput;

SendInput(1, &myInput, sizeof(INPUT));//releasing the printscreen key
Run Code Online (Sandbox Code Playgroud)

由于某种原因,代码不能正常工作.如果我去绘画并试图从剪贴板中进行paist,那么它只会通过我在使用我的程序之前所做的任何打印屏幕.另外我的键盘不需要我用打印屏幕按"alt"以使其工作..

我曾尝试按下Alt键,按下打印屏幕键,以及释放Alt键,释放打印屏幕键,我得到的差异是当我试图通过它时油漆,我是一个完整的黑色屏幕...这只是我做的一个测试,看看它是否有所作为,但我的实际键盘仅截取打印屏幕按钮的截图.

关于我做错了什么人的任何想法?

编辑:只是为了让你们知道,该程序确实编译.我还添加了其他代码,将剪贴板文件保存到目录中,如果我手动点击打印屏幕按钮,我会正确保存文件...但是如果我继续循环这段代码并保存到目录,则相同的图片手动获取的屏幕截图显示...这就是我如何确定打印屏幕按钮的打击有问题.

Sof*_*ner 4

在 Windows 平台上:您必须遵循一定的模拟按键顺序。

下面的代码是模拟keybd_event()键盘事件并将捕获的屏幕放入剪贴板。

#include <iostream>
#include <windows.h>
using namespace std;



int main()
{
    keybd_event(VK_MENU, 0, 0, 0); //Alt Press
    keybd_event(VK_SNAPSHOT, 0, 0, 0); //PrntScrn Press


    keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0); //PrntScrn Release
    keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); //Alt Release

return 0;
}
Run Code Online (Sandbox Code Playgroud)