怎样向一个正在运行的程序发送一个键盘按键信息?(100分)

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

d_fang

Unregistered / Unconfirmed
GUEST, unregistred user!
想让一个程序接收一个空格键的按下,怎样编写?该编写程序工作在后台
 
SendMessage 或 SendKey
 
有一个控件可以完成你的要求LMD里面有
 
Procedure GiveYouATip;<br>BEGIN<br>键盘MSG:<br>keybd_event(20,0,KEYEVENTF_EXTENDEDKEY,0); //按下<br>keybd_event(20,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); //弹起<br><br>有一个例,请参考:(在输入点加入字符)<br>mPoint:TPoint; dtWnd:THandle;<br>GetCursorPos(mPoint);<br>dtwnd:=WindowFromPoint(mPoint);<br>SendMessage(dtWnd,wm_IME_Char,ord('A'),1);<br><br>那么。。。 &nbsp;其他。。。 &nbsp;你的问题。。。<br><br>END.<br>
 
function GetEditHandle(hwnd: Integer; lparam: Longint):Boolean; stdcall;<br>var<br>&nbsp; buffer: array[0..255] of Char;<br>begin<br>&nbsp; Result := True;<br>&nbsp; //得到目标窗口的控件<br>&nbsp; GetClassName(hwnd,buffer,256);<br>&nbsp; //找到目标窗口的目标控件<br>&nbsp; if StrPas(Buffer)='Edit' then<br>&nbsp; begin<br>&nbsp; &nbsp; GetWindowText(hwnd,buffer1,100);<br>&nbsp; &nbsp; PInteger(lparam)^ := hwnd; //得到目标控件的Hwnd(句柄)<br>&nbsp; &nbsp; Result:=False; &nbsp;//终止循环<br>&nbsp; end;<br>end;//end of function<br><br>procedure TfrmMain.bbtnStartClick(Sender: TObject);<br>var<br>&nbsp; Handle: Integer;<br>begin<br>&nbsp; {取句柄}<br>&nbsp; Handle := FindWindow(nil,'对话模式'); &nbsp;//就是窗口的Caption<br>&nbsp; if Handle&lt;&gt;0 then<br>&nbsp; begin<br>&nbsp; &nbsp; //在这里循环取到想要的句柄为止<br>&nbsp; &nbsp; EnumChildWindows(Handle,@GetEditHandle,Integer(@Handle));<br>&nbsp; &nbsp; //此时,Handle就是你要的句柄<br>&nbsp; end;//end of if<br>end;<br><br><br>得到句柄后用postmessage消息就可以了。<br>例如postmessage(handle,WM_KEYDOWN,50,0);<br>向窗口中编辑控件框中输入一个数字2。<br>
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部