怎样才能向屏幕的其他窗口的输入框中写文本(200分)

  • 主题发起人 主题发起人 lobate
  • 开始时间 开始时间
L

lobate

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样才能向屏幕的其他窗口的输入框中写文本 : 如;
我有程式A,当前运行窗口有一个输入框 ;是否有方法在程式B中向这个输入框写入字符。
谢谢各位大师!!!!
 
先用Spy++得到这个窗口的一些特征,
输入框也是窗口,获得它的类名或ID
然后用遍历窗口
EnumWindows 或者 GetWindow 或者 FindWindow找到这个输入框窗口的窗口句柄
然后调用SetWindowText可以改变其内容
 
贴出部分代码,由于qq 升级啦,最新版的可能不能用
查找句柄部分
//这个函数取当前qq发送窗口上“送讯息”的按钮的句柄
//function EnumChildWindowsProc(hwnd: Integer; lparam: Longint):Boolean; stdcall;
function GetButtonHandle(hwnd: Integer; lparam: Longint):Boolean; stdcall;
var
buffer: array[0..255] of Char;
buffer1: array[0..255] of Char;
begin
Result := True;
//得到目标窗口的控件
GetClassName(hwnd,buffer,256);
//找到发消息的目标窗口的目标控件
if StrPas(Buffer)='Button' then
begin
GetWindowText(hwnd,buffer1,100);
if buffer1 = '送讯息(&S)' then
begin
PInteger(lparam)^ := hwnd; //得到目标控件的Hwnd(句柄)
Result:=False; //终止循环
end;
end;
end;//end of function

//这个函数取当前qq发送窗口上消息框句柄
//function EnumChildWindowsProc(hwnd: Integer; lparam: Longint):Boolean; stdcall;
function GetEditHandle(hwnd: Integer; lparam: Longint):Boolean; stdcall;
var
buffer: array[0..255] of Char;
buffer1: array[0..255] of Char;
begin
Result := True;
//得到目标窗口的控件
GetClassName(hwnd,buffer,256);
//找到发消息的目标窗口的目标控件
if StrPas(Buffer)='Edit' then
begin
GetWindowText(hwnd,buffer1,100);
PInteger(lparam)^ := hwnd; //得到目标控件的Hwnd(句柄)
Result:=False; //终止循环
end;
end;//end of function

发送信息部分
判断为空
SendMessage(FTextHandle, WM_GETTEXT, 1024, Integer(@Buf));
s:= buf;
if ((Length(s)<>0) and (IsWindowEnabled(FButtonHandle)=false)) then
begin
Exit;
end;
模拟发送信息
SendMessage(FTextHandle,WM_SETTEXT,0,Integer(pchar(sSend)));
模拟按钮单击信息发送按钮
SendMessage(FButtonHandle,WM_LBUTTONDOWN,0,0);
SendMessage(FButtonHandle,WM_LBUTTONUP,0,0);

结束啦,基本上就这些。
 
先获得该输入框句柄
然后就可以setWindowtext了
至于,获得句柄可以用findwindow,findwindowex 等等
 
一、取得程序句柄,用findwindow,findwindowex或enumChildwindow回调函数,当然还有其他方法,搜一下
二、发送消息SendMessage(h,WM_SETTEXT,0,Integer(pchar('aaaaaaaaaaaa')));
 
曾经搞过这样的东东,将程序B中的多行文本发送到程序A的ListBox中。
 
后退
顶部