1.获取当前所有窗口
procedure TForm1.Button1Click(Sender: TObject); var szText: array[0..254] of char; hCurrentWindow :hwnd; begin hCurrentWindow := GetWindow(Handle,GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow ,@szText,255) > 0 then memo1.lines.Add(StrPas(@szText)); hCurrentWindow := GetWindow(hCurrentWindow,GW_HWNDNEXT); end; end; 2.获取某一指定窗口
procedure TForm1.Button1Click(Sender: TObject); var szText: array[0..254] of char; hCurrentWindow :hwnd; begin hCurrentWindow := GetWindow(Handle,GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow ,@szText,255) > 0 then
if pos('RTX 会话', StrPas(@szText))<>0 then //这里指定某一窗口,可能有多个 memo1.lines.Add(StrPas(@szText)); hCurrentWindow := GetWindow(hCurrentWindow,GW_HWNDNEXT); end; end;
3.获取某一窗口内的所有控件及其内容 unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; memo1: TMemo; procedure Button1Click(Sender: TObject); procedure get_actrlh(h:hwnd); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; hi:integer;
implementation
{$R *.dfm}
function gettext(h:hwnd):string; var name:string; txtlen:integer;
begin TxtLen:=sendmessage(h ,wm_gettextlength,0,0)+1; setlength(name,TxtLen); sendmessage(h ,wm_gettext,txtlen,LongInt(@name[1])); result:=name; end;
procedure tform1.get_actrlh(h:hwnd); var s: Array[0..255] of char; begin
h:=GetWindow(h,GW_child); while h>0 do begin
GetClassName(h, s, 256); begin memo1.lines.Add(inttostr(hi)+':'+s+':'+trim(gettext(h)) ); end ; hi:=hi+1; get_actrlh(h); h:=GetWindow(h,GW_HWNDNEXT); end; end;
procedure TForm1.Button1Click(Sender: TObject); var szText: array[0..254] of char; hCurrentWindow :hwnd; begin hCurrentWindow := GetWindow(Handle,GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow ,@szText,255) > 0 then
if pos('RTX 会话', StrPas(@szText))<>0 then //这里指定某一窗口,可能有多个 begin memo1.lines.Add(StrPas(@szText)); hi:=0; get_actrlh(hCurrentWindow);//获取窗口中的所有控件
end;
hCurrentWindow := GetWindow(hCurrentWindow,GW_HWNDNEXT); end; end; end.
4.获取窗口中的某个控件,并对其操作
首先用上面3中的程序,根据窗口中控件的特性,找到你要操作的控件的序号, 即memo1中左边的数字,用变量hnum保存这一序号,再把上面3中的程序稍作修改如下,
以下其实是一个完整的、功能简单的、没有经过优化的腾讯通RTX自动回复消息程序:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; memo1: TMemo; procedure Button1Click(Sender: TObject); procedure get_actrlh(h:hwnd); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; hi,hnum:integer;
implementation
{$R *.dfm}
function gettext(h:hwnd):string; var name:string; txtlen:integer;
begin TxtLen:=sendmessage(h ,wm_gettextlength,0,0)+1; setlength(name,TxtLen); sendmessage(h ,wm_gettext,txtlen,LongInt(@name[1])); result:=name; end;
procedure tform1.get_actrlh(h:hwnd); var s: Array[0..255] of char; begin
h:=GetWindow(h,GW_child); while h>0 do begin
GetClassName(h, s, 256); begin memo1.lines.Add(inttostr(hi)+':'+s+':'+trim(gettext(h)) );
if hi=hnum then begin memo1.lines.Add('上面为找到的控件'); SendMessage(h,WM_SETTEXT,0,Integer(pchar('*此为RichEdit20W所赋的文本')));
end; end ;
hi:=hi+1; get_actrlh(h); h:=GetWindow(h,GW_HWNDNEXT); end; end;
procedure TForm1.Button1Click(Sender: TObject); var szText: array[0..254] of char; hCurrentWindow :hwnd; begin hCurrentWindow := GetWindow(Handle,GW_HWNDFIRST); memo1.Clear; while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow ,@szText,255) > 0 then
if pos('RTX 会话', StrPas(@szText))<>0 then //这里指定某一窗口,可能有多个 begin memo1.lines.Add(StrPas(@szText)); hi:=0; hnum:=3; //此为所要赋值的RichEdit20W控件在窗口中的序号 get_actrlh(hCurrentWindow);//获取窗口中的所有控件
//以下向窗口发送ALT_S 组合键,实现腾讯通RTX发送消息
SetForegroundWindow(hCurrentWindow);//设置窗口为当前窗口 keybd_event(VK_menu,MapVirtualKey(VK_menu,0),0,0); sleep(1000); keybd_event(83,MapVirtualKey(83,0),0,0); sleep(1000); keybd_event(83,MapVirtualKey(83,0),KEYEVENTF_KEYUP,0); keybd_event(VK_menu,MapVirtualKey(VK_menu,0),KEYEVENTF_KEYUP,0);
end;
hCurrentWindow := GetWindow(hCurrentWindow,GW_HWNDNEXT); end; end; end.
|
请发表评论