具体情况为:
程序中有2个函数:SendMessage()和keybd_event(),将消息和键盘事件传给1个窗口.在delphi里编译运行没有任何问题,事件都传过去了.
不关闭,注意是不关闭delphi,直接点击编译好的exe文件,这2个事件都没有任何反应.不知道是什么原因.
整个过程中:环境没有改变,还是在本机,delphi也没有关闭.唯一的区别就是一个是delphi编译执行的,一个是直接运行exe

解决方案 »

  1.   

    不会吧
    真是没有遇到哦http://lysoft.7u7.net
      

  2.   

    窗口是否找对了?
    用个LISTBOX把一些信息显示出来,分析那里出了问题。
      

  3.   

    有两点没说清楚,不关闭delphi,但是工程关闭没有.工程在运行没有?
      

  4.   

    问题可能出在SendMessage上,你的pchar是怎么用的,是pchar(string)还是定义pchar再用getmem还是chr:Array[0..255] Of char等等
    换其它的方式试试,或不用getmem而用AllocMem
    以前碰到的一个问题有点像你的
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    Var
            hw:thandle;
    begin
            hw:=FindWindow(nil,'1.txt - 记事本');
            if hw = 0 then
                    begin
                    showmessage('记事本没有打开!');
                    Exit;
                    end;
            
            SendMessage(hw, WM_SYSCOMMAND, SC_HOTKEY, hw);
            keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), 0, 0);
            keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), KEYEVENTF_KEYUP,0);
    end;
      

  6.   

    没有用,试过了。删除后新生成的exe还是不能发消息过去。但是在delphi里直接编译运行的就可以
      

  7.   

    那会不会是你的DELPHI里用了什么特殊的控件?
    建议关掉DELPHI,或者重新启动WINDOWS试试!
    要是还不行,我也实在想不出来了!
      

  8.   

    在别人的机器上编译的拿过来也不行。别人的环境是XP+delphi6。我得是win2k+delphi6
      

  9.   

    to  hsmserver(撒哈拉之雨的悲伤) 
        1。怎样做才能实现这个功能?
        2。为什么在delphi里编译有反应,能够发一个A过去?
      

  10.   

    你用SPY查一下类名
    然后再找它的句柄
    好象用FindwosA得
      

  11.   

    SendMessage(hw, WM_SYSCOMMAND, SC_HOTKEY, hw); //这个样子并没有使记事本成为输入窗口。
                                                   //你自己的窗口才拥有输入焦点
    keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), 0, 0); //记事本当然不能响应按键
    需要在发送消息之前先让所有的窗口失去输入焦点,或者将记事本窗口置为最前面的窗口。
      

  12.   

    怎么做才能让记事本窗口设为最前窗口
    SendMessage(hw, WM_SYSCOMMAND, SC_HOTKEY, hw); //编译运行时可以将记事本设为最前窗口的