模拟按下的快捷方式

时间:2012-05-11 16:14:03

标签: c++ python qt winapi keyboard-shortcuts

很抱歉,我必须以这种迂回的方式描述功能,但我不知道如何最好地实现所需的功能*

我有一个简单的程序,在按下全局热键时将一些数据放入剪贴板。然后,用户的通常用例是将该文本直接粘贴到Photoshop中的文本字段中。即 - 假设ctrl-x调用全局热键 - 他们一直在ctrl-x ctrl-v。显然这是糟糕的设计。

那么什么是基本模拟ctrl-v事件的最简单方法,以便Photoshop直接粘贴文本而无需额外的按键?

由于winapi标签暗示我不关心Macs。必须在Win 7下工作,与XP / Vista的兼容性将是一个明确的优势。其余的脚本是使用PyQt4在Python3中编写的,但是如果需要的话我也可以编写一些c扩展名。

PS:每个对标题都有更好想法的人都非常欢迎改进它。

*我想避免实现问题的简单一半,然后要求一些不可能的东西。

1 个答案:

答案 0 :(得分:4)

使用SendInput()。我没有对此进行测试,但它应该有效:

INPUT ctrlV [4];
ZeroMemory(ctrlv, sizeof ctrlV);

ctrlV [0].type = INPUT_KEYBOARD;
ctrlV [0].ki.wVk = VK_LCONTROL;

ctrlV [1].type = INPUT_KEYBOARD;
ctrlV [1].ki.wVk = 'V'; //assuming ASCII

ctrlV [2].type = INPUT_KEYBOARD;
ctrlV [2].ki.wVk = 'V'; //assuming ASCII
ctrlV [2].ki.dwFlags = KEYEVENTF_KEYUP;

ctrlV [3].type = INPUT_KEYBOARD;
ctrlV [3].ki.wVk = VK_LCONTROL;
ctrlV [3].ki.dwFlags = KEYEVENTF_KEYUP;

SendInput (4, ctrlV, sizeof (INPUT));