为什么按键消息发不出去?(1分)

  • 主题发起人 主题发起人 dazzling
  • 开始时间 开始时间
D

dazzling

Unregistered / Unconfirmed
GUEST, unregistred user!
[分数以后再加]<br><br>var hw:HWND;<br>begin<br>&nbsp; hw:=findwindow('Notepad','未定标题 - 记事本');<br>&nbsp; postMessage(hw,WM_KEYDOWN,65,1);<br>&nbsp; postMessage(hw,WM_CHAR,65,1);<br>&nbsp; postMessage(hw,WM_KEYUP,65,1);<br>end;<br>可是用SPY++发现记事本没有收到任何消息,这是为什么?<br><br>
 
接受端例子:<br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp;Dialogs;<br><br>type<br>&nbsp;TForm1 = class(TForm)<br>&nbsp; &nbsp;procedure FormCreate(Sender: TObject);<br>&nbsp;private<br>&nbsp; &nbsp;{ Private declarations }<br>&nbsp; &nbsp;procedure WMCopyData(var Msg: TWMCopyData); message WM_CopyData;<br>&nbsp;public<br>&nbsp; &nbsp;{ Public declarations }<br>&nbsp;end;<br><br>var<br>&nbsp;Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp;Caption:='App1'<br>end;<br><br>procedure TForm1.WMCopyData(var Msg: TWMCopyData);<br>var<br>&nbsp;s: string;<br>begin<br>&nbsp;s:=StrPas(PChar(Msg.CopyDataStruct^.lpData));<br>&nbsp;ShowMessage(s)<br>end;<br>
 
老大,我只是发送不行。<br>接收是两码事,上述程序不涉及。
 
用 sendmessage();
 
也不行啊!<br>刘麻子啊刘麻子,你就好人帮到底吧,发段小示例我看看?<br>
 
var s:integer;<br>begin<br>s:=FindWindow(nil,'未定标题 - 记事本');<br>if s&lt;&gt;0 then<br>begin<br>SetForegroundWindow(s);<br>keybd_event(65,mapvirtualkey(65,0),0,0);<br>keybd_event(65,mapvirtualkey(65,0),keyeventf_keyup,0);<br>这是按A的,效果不好
 
var<br>&nbsp;s,L:integer;<br>begin<br>&nbsp; s:=findwindow(pchar('Notepad'),pchar('无标题 - 记事本'));//找窗口<br>&nbsp; L:=findwindowex(s,0,pchar('Edit'),nil); &nbsp;//在主窗体上找<br>&nbsp; if s=0 then showmessage('没找到');<br>&nbsp; if l=0 then showmessage('没找到');<br>&nbsp; postMessage(l,WM_CHAR,65,1);<br>end;<br>上面代码测试通过。。关键不是发给窗体,我们平时输入文字的那个是个Edit,要发给他。。<br>还有一个地方,我这边记事本默认标题是'无标题 - 记事本'。。。<br>&nbsp; 你那边呢?你自己看看,如果不一样就要改这个地方。。
 
这样也可以,但是在打开多个记事本时候不能保证找到的想要的那个,因为标题不定。。<br>var<br>&nbsp;s,L:integer;<br>begin<br>&nbsp; s:=findwindow(pchar('Notepad'),nil);//找窗口<br>&nbsp; L:=findwindowex(s,0,pchar('Edit'),nil); &nbsp;//在主窗体上找按钮<br>&nbsp; if s=0 then showmessage('没找到');<br>&nbsp; if l=0 then showmessage('没找到');<br>&nbsp; postMessage(l,WM_CHAR,65,1);<br>end;
 
刘麻子啊刘麻子,你是世界上最可爱的人儿!!!<br>"关键不是发给窗体,我们平时输入文字的那个是个Edit,要发给他。。"<br>一句足矣~~~<br>不过好人帮做到底,如何发送ctrl ALT之类的组合按 键信息?
 
多人接受答案了。
 
后退
顶部