Delphi获得一个进程的主窗体
2007-05-06 23:26
453 查看
type
TMainWindow = packed record
ProcessID: THandle;
MainWindow: THandle;
end;
PMainWindow =^ TMainWindow;
function IsMainWindow(AHandle: THandle): Boolean;
begin
Result :=(GetWindow(AHandle, GW_OWNER) = 0) and (IsWindowVisible(AHandle));
end;{ IsMainWindow }
function fFindMainWindow(hWnd: THandle; lParam: PMainWindow): BOOL; stdcall;
var
vProcessID: THandle;
begin
GetWindowThreadProcessId(hWnd, vProcessID);
if (lParam^.ProcessID = vProcessID) and IsMainWindow(hWnd) then
begin
lParam^.MainWindow := hWnd;
Result := False;
end else Result := True;
end;
function FindMainWindow(AProcessID: THandle): THandle;
var
vMainWindow: TMainWindow;
begin
vMainWindow.ProcessID := AProcessID;
vMainWindow.MainWindow := 0;
EnumWindows(@fFindMainWindow, Integer(@vMainWindow));
Result := vMainWindow.MainWindow;
end;{ FindMainWindow }
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := Format('Application.Handle: %d, FindMainWindow(): %d',[
Application.Handle, FindMainWindow(GetCurrentProcessId)]);
end;
TMainWindow = packed record
ProcessID: THandle;
MainWindow: THandle;
end;
PMainWindow =^ TMainWindow;
function IsMainWindow(AHandle: THandle): Boolean;
begin
Result :=(GetWindow(AHandle, GW_OWNER) = 0) and (IsWindowVisible(AHandle));
end;{ IsMainWindow }
function fFindMainWindow(hWnd: THandle; lParam: PMainWindow): BOOL; stdcall;
var
vProcessID: THandle;
begin
GetWindowThreadProcessId(hWnd, vProcessID);
if (lParam^.ProcessID = vProcessID) and IsMainWindow(hWnd) then
begin
lParam^.MainWindow := hWnd;
Result := False;
end else Result := True;
end;
function FindMainWindow(AProcessID: THandle): THandle;
var
vMainWindow: TMainWindow;
begin
vMainWindow.ProcessID := AProcessID;
vMainWindow.MainWindow := 0;
EnumWindows(@fFindMainWindow, Integer(@vMainWindow));
Result := vMainWindow.MainWindow;
end;{ FindMainWindow }
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := Format('Application.Handle: %d, FindMainWindow(): %d',[
Application.Handle, FindMainWindow(GetCurrentProcessId)]);
end;
相关文章推荐
- Delphi获得一个进程的主窗体(GetWindow(AHandle, GW_OWNER)等于0的窗体才是主窗体,并且要IsWindowVisible排除Application窗口)
- 一个用UpdateLayeredWindow实现窗体半透明的delphi的代码
- 我在delphi中用shellExecute启动了一个程序(ftp);然后想做一个等待,只到ftp进程结束,再继续下面的操作,请问如何监控这个进程是否已结束?
- cegui根据一个位置获得窗体
- 如何获得对窗体移动事件的处理的一个方法
- Delphi中一个获得窗口图象的函数
- 获取一个进程中所有打开的窗体句柄
- 一个用UpdateLayeredWindow实现窗体半透明的delphi的代码-The realization of a form with translucent UpdateLayeredWindow code delphi
- C#一个窗体Form2获得另一个窗体Form1的方法
- Delphi中强制结束一个进程
- Delphi如何访问一个进程的内存空间
- 一个通过某个部件获得父窗体的例子
- 如何获得对窗体移动事件的处理的一个方法
- Delphi中强制结束一个进程
- 在.Net中,如何获得一个进程的父进程?
- Delphi 中最小化窗体是隐藏并在任务揽中显示图表和进程名
- VC++中如何获得一个当前进程的运行目录
- Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件
- Delphi调用一个外部程序时,如何把外部程序的窗体放在主程序窗体的Panel上?
- 用DELPHI编写一个服务进程