unit Unit1;interfaceuses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls;type
   TForm1 = class(TForm)
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
   private
    { Private declarations }
   public
    { Public declarations }
   end;
type
   TMainWindow = packed record
      ProcessID: THandle;
      MainWindow: THandle;
   end;
   PMainWindow = ^TMainWindow;var
   Form1: TForm1;implementationfunction IsMainWindow(AHandle: THandle): Boolean;
begin
   Result := (GetWindow(AHandle, GW_OWNER) = 0) and IsWindowVisible(AHandle);
  {
  GetWindow
  函数功能:该函数返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄。
  函数原型:HWND GetWindow(HWND hWnd,UNIT nCmd);  IsWindowVisible
  函数功能:该函数获得给定窗口的可视状态。;
  函数原型:BOOL IsWindowVisible(HWND hWnd);
  }
end;function fFindMainWindow(hWnd: THandle; lParam: PMainWindow): BOOL; stdcall;
var
   vProcessID: THandle;
begin
   vProcessID := GetWindowThreadProcessId(hWnd, vProcessID);
   {
   WinAPI: GetWindowThreadProcessId - 获取指定窗口的进程 ID 或线程 ID
  GetWindowThreadProcessId(
    hWnd: HWND;     //指定窗口句柄
    lpdwProcessId: Pointer = nil  //返回进程ID的指针
   ): DWORD;        //返回线程ID
  }
   if (lParam^.ProcessID = vProcessID) and IsMainWindow(hWnd) then
   begin
      lParam^.MainWindow := hWnd;
      Result := False;
   end else
      Result := True;
end;function FindMainWindow(AProcess: THandle): THandle;
var
   vMainWindow: PMainWindow;
begin
   vMainWindow.ProcessID := AProcess;
   vMainWindow.MainWindow := 0;
   EnumWindows(@fFindMainWindow, integer(vMainWindow));
   Result := vMainWindow.MainWindow;
end;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
   try
      Caption := Format('Application.Handle: %d, FindMainWindow(): %d', [
         Application.Handle, FindMainWindow(GetCurrentProcessId)]);
   except
   end;
end;end.
运行出错,至于为什么我也不清楚,哪位高手能帮我看一下