我正在实施不同的屏幕抓取器来比较它们。其中之一应该使用“printscreen”键和剪贴板。
我用 keybd_事件发送击键:
[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:运行程序后,我可以将正确的图像粘贴到paint或gimp中。