向没有焦点的程序发送信号 比如键盘信号,宿主程序启动了多个程序,如何同时向这多个程序发送不同的键盘信号? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 EnumWindow枚举窗口 然后分别向它们发送键盘消息... 2L说的很对呀,指要获取窗体句柄了,就可以SendMessage了焦点只是对鼠标键盘输入而言的 远程控制, 同步操作?WM_CHAR消息, 或者 WM_KEYDOWN消息就是你想要的东西. SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用 SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用如果那个程序中没有对这类的消息作特殊处理. 那么可以判定你发消息的窗口句柄有问题.你可以这样验证窗口句柄是否有问题:使用此窗口句柄读取其类名, GetClassName.使用此窗口句柄读取控件中已经存在的文字 GetWindowText使用此窗口句柄 ShowWindow如果确实窗口句柄没错, 那你还可以尝试使用SetWindowText直接改变其文本.如果这也没有用, 那就是那个控件中对这些消息有特殊处理了. SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用如果那个程序中没有对这类的消息作特殊处理. 那么可以判定你发消息的窗口句柄有问题.你可以这样验证窗口句柄是否有问题:使用此窗口句柄读取其类名, GetClassName.使用此窗口句柄读取控件中已经存在的文字 GetWindowText使用此窗口句柄 ShowWindow如果确实窗口句柄没错, 那你还可以尝试使用SetWindowText直接改变其文本.如果这也没有用, 那就是那个控件中对这些消息有特殊处理了.http://bbs.csdn.net/topics/390634988?page=1#post-395991804 可以发送关闭窗口改变标题等操作,但是发送按键不可以,我在另外一个帖子里面想log详细描述,你可以看下,貌似是其他的问题 消息有两种, 一种是会进消息循环的, 一种是直接调用Proc的. 你可以再试试PostMessage. 试了,不论是用程序还是用spy4win,都不行,我要发送的目标程序是FC的模拟器叫virtuanes097cn,rom随便找个就行, http://down.tgbus.com/soft/26036.shtml 模拟器下载http://www.lt163.com/soft/mobile/qdcx/200902/1510.html rom 我想向FC的模拟器发送键盘信息,但是调用sendmessage,FC模拟器没反应 我用的c++我用spy4win工具发现如果手动用键盘发送的信号是这样的256 WM_KEYDOWN 00000031 00020001 00000000 SYSMSGFILTER 258 WM_CHAR 00000031 00020001 00000000 SYSMSGFILTER 273 WM_COMMAND 00008121 00000000 00000000 SYSMSGFILTER 257 WM_KEYUP 00000031 C0020001 00000000 SYSMSGFILTER 我按得是1如果我用程序来发送上述信号,监控所得为256 WM_KEYDOWN 00000031 00020001 00000000 CALLWNDPROCRET 256 WM_KEYDOWN 00000031 00020001 00000000 GETMESSAGE 258 WM_CHAR 00000031 00020001 00000000 CALLWNDPROCRET 258 WM_CHAR 00000031 00020001 00000000 GETMESSAGE 273 WM_COMMAND 00008121 00000000 00000000 CALLWNDPROCRET 273 WM_COMMAND 00008121 00000000 00000000 GETMESSAGE 257 WM_KEYUP 00000031 C0020001 00000000 CALLWNDPROCRET 257 WM_KEYUP 00000031 C0020001 00000000 GETMESSAGE 这是我的代码 printf( "WM_KEYDOWN result=%d\n", SendMessage(tar,WM_KEYDOWN,49,0x20001)); printf( "WM_CHAR result=%d\n", SendMessage(tar,WM_CHAR,49,0x20001)); printf( "WM_COMMAND result=%d\n", SendMessage(tar,WM_COMMAND,0x8121,0)); printf( "WM_KEYUP result=%d\n", SendMessage(tar,WM_KEYUP,49,0xc0020001)); SetWindowTextA(tar,"asdf");tar为句柄,更改标题是可以的我不明白的是1为什么我发了一个信号,spy截获到2条2手打得和程序发送,为什么截获的消息类型不一样, 手打得是 SYSMSGFILTER 程序发的是CALLWNDPROCRET 和GETMESSAGE http://down.tgbus.com/soft/26036.shtml 模拟器下载http://www.lt163.com/soft/mobile/qdcx/200902/1510.html rom我的环境为win7 64位 vs2012 你这个就是我说的那个情况了, 模拟器内部已经做了消息处理, 它不接收从消息队列里面的消息.你看前面都是SYSMSGFILTER 是系统消息后面手动的都是GETMESSAGE 这是发送到消息队列中的消息, 是不同的东西. 那我如何能模拟SYSMSGFILTER的消息? SYSMSGFILTER 并不是一个消息, spy只是告诉你它是从哪个HOOK得到的此消息,WH_SYSMSGFILTER 这个hook得到的.我想应该只有从驱动层才能模拟这个消息了吧.因为你说了, 不能激窗口, 不然可以试试 键盘事件模拟 keybd_event(), 但这个是没有窗口句柄的, 只能对激有输入焦点的窗口.希望高手来解答. 弹出框口合并方法 类型转换 用MFC如何开发资源管理器的缩略图的功能? 如何判断一个USB设备的驱动是否可用? 请教如何用VC加载DWG,DXF图形? DLL 急求!实在是搞不懂? 同一台机器上,用winpcap连续两次取得的网卡列表不同 怎样才能中断select? 最近开一软件开发公司.想起一合适名字.希望大家帮忙.多出点子多想名字.分不够继续加.. ExecuteSQL(_T("RENAME TABLE table1 TO table2"))出现异常? 奇葩的问题呀 关于WM_MOUSEACTIVATE
焦点只是对鼠标键盘输入而言的
SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用
SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用如果那个程序中没有对这类的消息作特殊处理. 那么可以判定你发消息的窗口句柄有问题.
你可以这样验证窗口句柄是否有问题:
使用此窗口句柄读取其类名, GetClassName.
使用此窗口句柄读取控件中已经存在的文字 GetWindowText
使用此窗口句柄 ShowWindow如果确实窗口句柄没错, 那你还可以尝试使用SetWindowText直接改变其文本.
如果这也没有用, 那就是那个控件中对这些消息有特殊处理了.
SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用如果那个程序中没有对这类的消息作特殊处理. 那么可以判定你发消息的窗口句柄有问题.
你可以这样验证窗口句柄是否有问题:
使用此窗口句柄读取其类名, GetClassName.
使用此窗口句柄读取控件中已经存在的文字 GetWindowText
使用此窗口句柄 ShowWindow如果确实窗口句柄没错, 那你还可以尝试使用SetWindowText直接改变其文本.
如果这也没有用, 那就是那个控件中对这些消息有特殊处理了.http://bbs.csdn.net/topics/390634988?page=1#post-395991804 可以发送关闭窗口改变标题等操作,但是发送按键不可以,我在另外一个帖子里面想log详细描述,你可以看下,貌似是其他的问题
256 WM_KEYDOWN 00000031 00020001 00000000 SYSMSGFILTER
258 WM_CHAR 00000031 00020001 00000000 SYSMSGFILTER
273 WM_COMMAND 00008121 00000000 00000000 SYSMSGFILTER
257 WM_KEYUP 00000031 C0020001 00000000 SYSMSGFILTER
我按得是1
如果我用程序来发送上述信号,监控所得为
256 WM_KEYDOWN 00000031 00020001 00000000 CALLWNDPROCRET
256 WM_KEYDOWN 00000031 00020001 00000000 GETMESSAGE
258 WM_CHAR 00000031 00020001 00000000 CALLWNDPROCRET
258 WM_CHAR 00000031 00020001 00000000 GETMESSAGE
273 WM_COMMAND 00008121 00000000 00000000 CALLWNDPROCRET
273 WM_COMMAND 00008121 00000000 00000000 GETMESSAGE
257 WM_KEYUP 00000031 C0020001 00000000 CALLWNDPROCRET
257 WM_KEYUP 00000031 C0020001 00000000 GETMESSAGE 这是我的代码
printf( "WM_KEYDOWN result=%d\n", SendMessage(tar,WM_KEYDOWN,49,0x20001));
printf( "WM_CHAR result=%d\n", SendMessage(tar,WM_CHAR,49,0x20001));
printf( "WM_COMMAND result=%d\n", SendMessage(tar,WM_COMMAND,0x8121,0));
printf( "WM_KEYUP result=%d\n", SendMessage(tar,WM_KEYUP,49,0xc0020001));
SetWindowTextA(tar,"asdf");
tar为句柄,更改标题是可以的
我不明白的是
1为什么我发了一个信号,spy截获到2条
2手打得和程序发送,为什么截获的消息类型不一样, 手打得是 SYSMSGFILTER 程序发的是CALLWNDPROCRET 和GETMESSAGE
http://down.tgbus.com/soft/26036.shtml 模拟器下载
http://www.lt163.com/soft/mobile/qdcx/200902/1510.html rom
我的环境为win7 64位 vs2012
那我如何能模拟SYSMSGFILTER的消息?
WH_SYSMSGFILTER 这个hook得到的.我想应该只有从驱动层才能模拟这个消息了吧.因为你说了, 不能激窗口, 不然可以试试 键盘事件模拟 keybd_event(), 但这个是没有窗口句柄的, 只能对激有输入焦点的窗口.希望高手来解答.