如何在C ++中使用keybd_event()模拟Ctrl + V

问题描述 投票:-3回答:1

我想将文本从剪贴板粘贴到某个程序的文本框中。所以我尝试使用keybd_event。

keybd_event(VK_CONTROL,0x1D, 0, 0);
keybd_event('V', 0x2F, 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_KEYUP, 0);

但是不会执行。所以我尝试了不同的方式

keybd_event(VK_CONTROL,0x1D,  KEYEVENTF_EXTENDEDKEY, 0);
keybd_event('V', 0x2F, 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_KEYUP, 0);

因此效果很好。但是,此后,所有键盘输入都已按下ctrl键输入。也许我认为键入消息不起作用

如何解决此问题?

c++ windows winapi keyboard-events
1个回答
0
投票

但是,从那时起,所有键盘输入都已使用按下Ctrl键。也许我认为键入消息不起作用

您模拟右CONTROL WM_KEYDOWN,但是左CONTROL WM_KEYUP因此未释放右侧的CTRL键。

以下代码将起作用:

keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_EXTENDEDKEY | 0, 0);
keybd_event('V', 0x2F, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0x1D, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

扩展键标志(KEYEVENTF_EXTENDEDKEY

指示键是否为扩展键,例如右手出现在增强的101键或102键键盘上的ALT和CTRL键。如果是扩展键,则值为1;否则为0。否则为0。

参考WM_KEYUP message

keybd_event函数已被取代。请改用WM_KEYUP

© www.soinside.com 2019 - 2024. All rights reserved.