Я использую другой захват экрана, чтобы сравнить их. Один из них должен использовать клавишу «printscreen» и буфер обмена.
Я отправляю нажатие клавиши с помощью keybd_event:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void keybd_event(byte vVK, byte bScan, int dwFlags,int dwExtraInfo);
public const int KEYEVENTF_EXTENDEDKEY=0x0001; //key down
public const int KEYEVENTF_KEYUP=0x0002; //key up
public const int VK_SNAPSHOT=0x2C; //VirtualKey code for print key
public static void PrintScreen(){
keybd_event(VK_SNAPSHOT,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_SNAPSHOT,0,KEYEVENTF_KEYUP,0);
}
В моем IEnumerable я вызываю этот метод и потом пытаюсь захватить изображение:
...
InputController.PrintScreen();
var img=Clipboard.GetImage();
...
Возвращаемое изображение всегда равно null, а Clipboards.ContainsImage() всегда имеет значение false. Я пытался подождать некоторое время после отправки ключей, но это тоже не работает. Я пропустил какую-то настройку или есть фундаментальная ошибка?
PS: я могу вставить правильное изображение в краску или гимп после запуска программы.