unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
//窗口句柄
hWndClose: HWnd;
hCurWindow:HWnd;
WinText:array[0..255] of char;
begin
//获取第一个窗口的句柄
hCurWindow:=GetWindow(Handle,GW_HWNDFirst);
while hCurWindow<>0 do
begin
//获取窗口的名称
if GetWindowText(hCurWindow,@WinText,255)>0 then
begin
Memo1.Lines.Add(StrPas(@WinText));
if pos(edit1.Text,WinText)>0 then
begin
hWndClose := FindWindow(nil, WinText);
SendMessage(hWndClose,WM_close,0,0); end;
end;
//获取下一个窗口的句柄
hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT);
end;end;end.上面代码中的这句hCurWindow:=GetWindow(Handle,GW_HWNDFirst);其中Handle没有任何定义。怎么就编程通过了呢?想通的代码,我放在没有窗体的程序,编译就通过不了
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
//窗口句柄
hWndClose: HWnd;
hCurWindow:HWnd;
WinText:array[0..255] of char;
begin
//获取第一个窗口的句柄
hCurWindow:=GetWindow(Handle,GW_HWNDFirst);
while hCurWindow<>0 do
begin
//获取窗口的名称
if GetWindowText(hCurWindow,@WinText,255)>0 then
begin
Memo1.Lines.Add(StrPas(@WinText));
if pos(edit1.Text,WinText)>0 then
begin
hWndClose := FindWindow(nil, WinText);
SendMessage(hWndClose,WM_close,0,0); end;
end;
//获取下一个窗口的句柄
hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT);
end;end;end.上面代码中的这句hCurWindow:=GetWindow(Handle,GW_HWNDFirst);其中Handle没有任何定义。怎么就编程通过了呢?想通的代码,我放在没有窗体的程序,编译就通过不了
//还是EnumWindows回调。近几天已经用回调函数写了好几个题目的代码了
//注意!下面是返回所有窗口(WINDOW)的句柄、而不仅仅是窗体(FORM)的句柄program Project1;{$APPTYPE CONSOLE}uses
SysUtils, Windows;const
RcdFileName = 'c:\record.txt';procedure WritetoTXTFile(Str: string);
var
F: TextFile;
begin
AssignFile(F, RcdFileName);
if FileExists(RcdFileName) then Append(F) else ReWrite(F);
WriteLn(F, Str);
CloseFile(F);
end;function CallBackProc(H: hwnd): Boolean; stdcall;
var
tempText, tempClass: array [0..255] of char;
begin
Result := True;
FillChar(tempText, 256, 0);
FillChar(tempClass, 256, 0);
GetWindowText(H, tempText, 256);
GetClassName(H, tempClass, 256);
WritetoTXTFile(Format('句柄:%d,类名:%s,标题:%s',[H, StrPas(tempClass),StrPas(tempText)]));
end;begin
EnumWindows(@CallBackProc, 0);
end.