比如键盘信号,宿主程序启动了多个程序,如何同时向这多个程序发送不同的键盘信号?

解决方案 »

  1.   

    EnumWindow枚举窗口 然后分别向它们发送键盘消息...
      

  2.   

    2L说的很对呀,指要获取窗体句柄了,就可以SendMessage了
    焦点只是对鼠标键盘输入而言的
      

  3.   

    远程控制, 同步操作?WM_CHAR消息, 或者 WM_KEYDOWN消息就是你想要的东西.
      

  4.   


    SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用
      

  5.   


    SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用如果那个程序中没有对这类的消息作特殊处理. 那么可以判定你发消息的窗口句柄有问题.
    你可以这样验证窗口句柄是否有问题:
    使用此窗口句柄读取其类名, GetClassName.
    使用此窗口句柄读取控件中已经存在的文字 GetWindowText
    使用此窗口句柄 ShowWindow如果确实窗口句柄没错, 那你还可以尝试使用SetWindowText直接改变其文本.
    如果这也没有用, 那就是那个控件中对这些消息有特殊处理了.
      

  6.   


    SendMessage(tar,WM_KEYDOWN,49,0);这个无效,wm_char也不管用如果那个程序中没有对这类的消息作特殊处理. 那么可以判定你发消息的窗口句柄有问题.
    你可以这样验证窗口句柄是否有问题:
    使用此窗口句柄读取其类名, GetClassName.
    使用此窗口句柄读取控件中已经存在的文字 GetWindowText
    使用此窗口句柄 ShowWindow如果确实窗口句柄没错, 那你还可以尝试使用SetWindowText直接改变其文本.
    如果这也没有用, 那就是那个控件中对这些消息有特殊处理了.http://bbs.csdn.net/topics/390634988?page=1#post-395991804     可以发送关闭窗口改变标题等操作,但是发送按键不可以,我在另外一个帖子里面想log详细描述,你可以看下,貌似是其他的问题
      

  7.   

    消息有两种, 一种是会进消息循环的, 一种是直接调用Proc的. 你可以再试试PostMessage.
      

  8.   

    试了,不论是用程序还是用spy4win,都不行,我要发送的目标程序是FC的模拟器叫virtuanes097cn,rom随便找个就行,
      

  9.   

    http://down.tgbus.com/soft/26036.shtml        模拟器下载http://www.lt163.com/soft/mobile/qdcx/200902/1510.html       rom
      

  10.   

    我想向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
      

  11.   

    你这个就是我说的那个情况了, 模拟器内部已经做了消息处理, 它不接收从消息队列里面的消息.你看前面都是SYSMSGFILTER  是系统消息后面手动的都是GETMESSAGE 这是发送到消息队列中的消息, 是不同的东西.
      

  12.   


    那我如何能模拟SYSMSGFILTER的消息?
      

  13.   

    SYSMSGFILTER  并不是一个消息, spy只是告诉你它是从哪个HOOK得到的此消息,
    WH_SYSMSGFILTER 这个hook得到的.我想应该只有从驱动层才能模拟这个消息了吧.因为你说了, 不能激窗口, 不然可以试试 键盘事件模拟 keybd_event(), 但这个是没有窗口句柄的, 只能对激有输入焦点的窗口.希望高手来解答.