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没有任何定义。怎么就编程通过了呢?想通的代码,我放在没有窗体的程序,编译就通过不了

解决方案 »

  1.   

    Handle = Self.Handle = Form1.Handle
      

  2.   

    不是没定义,如楼上所说,这里的是指Form1的handle
      

  3.   

    TForm1.Button1Click是TForm1的方法,Handle就默认是TForm1的Handle了,如楼上两位所说
      

  4.   

    请教上面的大哥,我现在的程序没有Form1。就是没有窗体,但我要实现一样的功能,要怎么写,就是查找当前所有窗口的句柄.
      

  5.   


    //还是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.