c ++ программа для снятия скриншота

Я делаю программу, которая будет нажимать клавишу на экране печати на клавиатуре. Я использую следующий код:

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.

5

Решение

На платформе 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;
}
1

Другие решения


По вопросам рекламы [email protected]