Я делаю программу, которая будет нажимать клавишу на экране печати на клавиатуре. Я использую следующий код:
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
по какой-то причине код не работает так, как раньше. Если я пойду рисовать и попытаюсь вычеркнуть из буфера обмена, он пропустит только то, что я сделал до того, как использовал свою программу. Также моей клавиатуре не нужно, чтобы я нажимал «alt» на экране печати, чтобы она работала.
Я пытался включить нажатие клавиши Alt, прежде чем нажатие клавиши экрана печати, а также разблокирование клавиши Alt afffftterr после отпускания клавиши экрана печати, и разница в том, что когда я пытался вставить ее на рисовать, я показываю какой-то полный черный экран … Это был всего лишь тест, который я провел, чтобы увидеть, если это что-то меняет, но моя настоящая клавиатура делает снимки экрана только при нажатии кнопки экрана печати.
Есть идеи, что я делаю не так, ребята?
Отредактировано:
просто чтобы вы знали, программа на самом деле компилируется. Я также добавил другой код, который сохраняет файл буфера обмена в каталог, и я сохраняю файл правильно, если вручную нажимаю кнопку экрана печати … но если я продолжаю зацикливать этот код с сохранением в каталоге, то же изображение из скриншота, полученного вручную, появляется … так что я точно знаю, что есть проблема с нажатием кнопки printscreen.
На платформе 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 Presskeybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0); //PrntScrn Release
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); //Alt Release
return 0;
}