我正在制作一个程序,它将点击键盘的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键,释放打印屏幕键,我得到的差异是当我试图通过它时油漆,我是一个完整的黑色屏幕...这只是我做的一个测试,看看它是否有所作为,但我的实际键盘仅截取打印屏幕按钮的截图.
关于我做错了什么人的任何想法?
编辑:只是为了让你们知道,该程序确实编译.我还添加了其他代码,将剪贴板文件保存到目录中,如果我手动点击打印屏幕按钮,我会正确保存文件...但是如果我继续循环这段代码并保存到目录,则相同的图片手动获取的屏幕截图显示...这就是我如何确定打印屏幕按钮的打击有问题.
当我单击主窗口上的按钮时,我试图创建一个弹出窗口,而我正在使用CreateWindowEX函数。但是,CreateWindowEx函数将HINSTANCE类型变量作为倒数第二个参数。假设单击按钮时我是从WndProcedure内部创建此新窗口的,所以WinMain函数中的HINSTANCE变量对我来说将不可用,因为它不是全局变量。
从WndProcedure回调函数获得以下代码:
case IDC_BUTTON PRESSED:
{
const char g_szClassName2[] = "POPWIND";
const char WndName2[] = "POPUP WINDOW";
HWND invisWindowHandle = CreateWindowEx(0,
g_szClassName2,
WndName2,
WS_OVERLAPPEDWINDOW,
200,
200,
800,
500,
NULL,
NULL,
hInstance,//THIS IS THE VARIABLE I AM HAVING TROUBLE GETTING
NULL);
ShowWindow(invisWindowHandle, 3);// SW_SHOWNORMAL);
UpdateWindow(invisWindowHandle);
}
Run Code Online (Sandbox Code Playgroud)
我该如何获取所需的hInstance变量,以便CreateWindowEx函数从WndProcedure回调函数内部运行?
注意:我考虑过将hInstance变量设置为全局变量,但是我不确定我的应用程序创建的每个窗口是否都必须使用相同的hInstance。