真的希望第3 第4个问题得到解答,已经困扰我好久了 真难受~~
谢谢The WM_KEYDOWN message is posted to the window………
The WM_CREATE message is sent when ………
1.post/send 这是不是Windows 默认 处理它们的形式?
2.是否注释为post 的 消息就不能用 send,注释为send的就不能用post ?
如果怎样用 岂不是和windows的原理 相矛盾?
3.一直想用SendMessage 发送 WM_KEYDOWN消息,但是一直不成功,这是为什么?
如果你们有 成功的例子能否给我发一份^_^
4.我怎么知道消息被成功执行?所谓的PreTranslateMessage 和HOOK都是在消息执行前
拦截,我需要的是在消息成功执行后,得到成功执行的状态,再执行下一条语句~附代码 :我要在 模拟执行按键后 再执行SendMessage~~但以下代码不能实现
期待高人解答
code:
我需要的是先模拟按键成功执行之后,再执行SendMessage中的COPYDATA里的命令
adsw_acadMainWnd()得到为 CAD 的主窗口
但以下段代码产生的结果是 先执行的SendMessage 再模拟按键。
::keybd_event( VK_ESCAPE, 0, 0, 0);
::keybd_event( VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);//用POSTMESSAGE产生一样的效果
COPYDATASTRUCT cmdMsg;
.........
::SendMessage(adsw_acadMainWnd(),
WM_COPYDATA,
(WPARAM)adsw_acadMainWnd(),
(LPARAM)&cmdMsg);
而以下段代码产生的结果是 不响应模拟按键。
::SendMessage(adsw_acadMainWnd(),
WM_KEYDOWN,
VK_ESCAPE,
0x001c0001);
::SendMessage(adsw_acadMainWnd(),
WM_KEYUP,
VK_ESCAPE,
0xc01c0001);
COPYDATASTRUCT cmdMsg;
....
::SendMessage(adsw_acadMainWnd(),
WM_COPYDATA,
(WPARAM)adsw_acadMainWnd(),
(LPARAM)&cmdMsg);
高手救命
谢谢The WM_KEYDOWN message is posted to the window………
The WM_CREATE message is sent when ………
1.post/send 这是不是Windows 默认 处理它们的形式?
2.是否注释为post 的 消息就不能用 send,注释为send的就不能用post ?
如果怎样用 岂不是和windows的原理 相矛盾?
3.一直想用SendMessage 发送 WM_KEYDOWN消息,但是一直不成功,这是为什么?
如果你们有 成功的例子能否给我发一份^_^
4.我怎么知道消息被成功执行?所谓的PreTranslateMessage 和HOOK都是在消息执行前
拦截,我需要的是在消息成功执行后,得到成功执行的状态,再执行下一条语句~附代码 :我要在 模拟执行按键后 再执行SendMessage~~但以下代码不能实现
期待高人解答
code:
我需要的是先模拟按键成功执行之后,再执行SendMessage中的COPYDATA里的命令
adsw_acadMainWnd()得到为 CAD 的主窗口
但以下段代码产生的结果是 先执行的SendMessage 再模拟按键。
::keybd_event( VK_ESCAPE, 0, 0, 0);
::keybd_event( VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);//用POSTMESSAGE产生一样的效果
COPYDATASTRUCT cmdMsg;
.........
::SendMessage(adsw_acadMainWnd(),
WM_COPYDATA,
(WPARAM)adsw_acadMainWnd(),
(LPARAM)&cmdMsg);
而以下段代码产生的结果是 不响应模拟按键。
::SendMessage(adsw_acadMainWnd(),
WM_KEYDOWN,
VK_ESCAPE,
0x001c0001);
::SendMessage(adsw_acadMainWnd(),
WM_KEYUP,
VK_ESCAPE,
0xc01c0001);
COPYDATASTRUCT cmdMsg;
....
::SendMessage(adsw_acadMainWnd(),
WM_COPYDATA,
(WPARAM)adsw_acadMainWnd(),
(LPARAM)&cmdMsg);
高手救命
SendMessage就是消息被执行了才返回的。
根据值来判断执行成功与否
因为WM_KEYDOWN并没有被Translate,所以你看不到效果
4.不同的具体消息具体处理,一般是根据返回值判断
因为WM_KEYDOWN并没有被Translate,所以你看不到效果
-----------------------------------------------------------
那WM_KEYDOWN该怎样被Translate 呢?谢谢
不过对于一般的字符输入界面应该是可以的。
不过lParam 的取值 和我机器上的不一样, 恕我偷懒,不去验证了, 只把我Spy到的lParam给你参考一下。
WM_KEYDOWN: 0X00010001
WM_KEYUP: 0XC0010001用Spy可以看到在这两个消息之间,翻译了一个 WM_CHAR消息:
WM_CHAR: 0X00010001你可以用Spy验证一下你的SendMessage是否成功。
------------------------------------------WaitForInputIdle该怎么用啊 ~好象WaitForInputIdle也不能解决问题
还是 还是先执行sendmessage的内容,再模拟安键啊
这样可以不?