以前的贴子http://www.delphibbs.com/delphibbs/dispq.asp?LID=915786,以知道能
否解决你产问题
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Wnd: HWND;
implementation
{$R *.DFM}
Function EnumWindowsProc (Wnd: HWND;
lb: TListbox): BOOL;
stdcall;
var
caption: Array [0..128] of Char;
begin
Result := True;
if { skip invisible windows }
IsWindowVisible(Wnd) and
{ only process truly top-level windows. GetWindowLong must be used,
not
GetParent }
((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
(HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) = GetDesktopWindow)) and
{ skip WS_EX_TOOLWINDOW windows }
((GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) = 0)
then
begin
SendMessage( Wnd, WM_GETTEXT, Sizeof( caption ), integer(@caption));
lb.Items.AddObject( caption, TObject( Wnd ));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
listbox1.clear;
EnumWindows( @EnumWindowsProc, integer( listbox1 ));
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
theClassname: Array [0..128] of Char;
tid, pid: DWORD;
intExitCode
WORD;
begin
With Sender As TListboxdo
begin
If ItemIndex >= 0 then
begin
Wnd:= HWND(Items.Objects[ itemindex ]);
If Wnd <> 0 then
begin
Windows.GetClassname( Wnd, theClassname, Sizeof( classname ));
tid := GetWindowThreadProcessID( Wnd, @pid );
label1.caption :=
Format(
'HWND: %8.8x'#13#10+
'Class: %s'#13#10+
'Process ID: %8.8x'#13#10+
'Thread ID: %8.8x',
[Wnd, theClassname, pid, tid] );
end;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PostMessage(Wnd, WM_CLOSE, 0, 0);
end;
end.