henbo 发表于 2010-7-30 02:35:43

如何使用_WinAPI_PostMessage发送组合键?

如何使用_WinAPI_PostMessage发送组合键?例如我需要Ctrl+A或Ctrl+C

求解~~~

lynfr8 发表于 2010-7-30 02:59:01

http://www.autoitx.com/thread-7169-1-1.html
难题一个

henbo 发表于 2010-7-30 09:46:50

本帖最后由 henbo 于 2010-7-30 09:50 编辑

找到一些资料,感觉是可以通过第四个参数来设置的。

如下:
-------------------------------------------------------------------------
postmessage(handle, WM_CHAR, aChar, aKeyData)
aChar = "c"
aKeyData = 32位
    1-15位表示发送几遍,
    16-23表示ALT、CTRL、NUM、CAPS等(具体何值忘了),
    24位表示是左ALT、CTRL还是右ALT、CTRL(通常为0),
    25-28位保留
    30位表示上一个键的状态KEY DOWN OR UP,1为发送前的DWON状态,0为UP
    31位表示:0表示键开始按下,1为开始释放。
从要求看:aKeyData为: 0000 0000 xxxx xxxx 0000 0000
其中xxxx xxxx放CTRL的扫描码,具体忘了,请自己查一下。
----------------------------------------------------------------------------
搞不懂上边说的24位,30位是指什么。。。。谁能举几个例子不?

henbo 发表于 2010-7-30 09:52:29


_WinAPI_PostMessage($hWnd, 0x0100,17, 0);按住ctrl
_WinAPI_PostMessage($hWnd, 0x0100,65, 0);点击A
_WinAPI_PostMessage($hWnd, 0x0101,65, 0);释放A
_WinAPI_PostMessage($hWnd, 0x0100,67, 0);点击C
我一箱情愿的以为这样子是行的,实质是不行的。不知道是不是我想错了?

foboy 发表于 2010-7-30 11:39:13

这个问题我最后放弃了,希望楼主能搞定。

henbo 发表于 2010-8-2 11:33:38

没人出来给个好的解决方法吗?

xyold1 发表于 2010-8-2 13:12:19

4楼应该可以吧
不过post间加上延时更好

xyold1 发表于 2010-8-2 13:21:43

keybd_event VK_Ctrl, 0, 0, 0   '按下Ctrl键

keybd_event VK_C, 0, 0, 0      '按下C键

Sleep 500            '延时500毫秒

keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0   '释放C键

keybd_event VK_Ctrl, 0, KEYEVENTF_KEYUP, 0   '释放Ctrl键


这是VB中一个keybd_event的例子,和postmessage大同小异

henbo 发表于 2010-8-2 20:04:37

改天再研究下。
页: [1]
查看完整版本: 如何使用_WinAPI_PostMessage发送组合键?