Delphi 通得进程ID获取主窗口句柄


本文整理自网络,侵删。

 只知道进程ID,获取主窗口句柄的方法如下:

通过EnumWindows枚举所有窗口
使用GetWindowThreadProcessID,通过窗口句柄获取进程ID
比便获取的进程ID与当前已知的进程ID,判断是否为需要的窗口

代码如下:

function GetHwndFromProcess(const hPID: THandle): THandle;

  type

    PEnumInfo = ^TEnumInfo;

    TEnumInfo = record

    ProcessID: DWORD;

    HWND: THandle;

  end;

 

  function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall;

  var

    PID: DWORD;

    h: THandle;

  begin

    Result := True;

    GetWindowThreadProcessID(Wnd, @PID);

    if PID = EI.ProcessID then

    begin

      h := GetWindowLong(Wnd, GWL_HWNDPARENT);

      if h = 0 then

      begin

        EI.HWND := Wnd;

        Result := False;

      end;

    end;

    if not Result then

      EI.HWND := WND;

  end;

 

  function FindMainWindow(PID: DWORD): DWORD;

  var

    EI: TEnumInfo;

  begin

    EI.ProcessID := PID;

    EI.HWND := 0;

    EnumWindows(@EnumWindowsProc, Integer(@EI));

    Result := EI.HWND;

  end;

  

begin

  if hPID <> 0 then

    Result := FindMainWindow(hPID)

  else

    Result:=0;

end;

相关阅读 >>

Delphi debug release区别是什么?

Delphi generics collections tdictionary 用法

Delphi利用系统时间产生随机数的函数

Delphi数据库实现从最后一条记录向上查询至首记录

Delphi 获取大于2g的物理内存大小

Delphi firemonkey的屏幕分辨率hdpi、mdpi、ldpi的差别

Delphi输入字符与tlistbox项目匹配

Delphi 单击android上的web浏览器链接以启动Delphi应用程序

Delphi 文件的操作:重命名、复制、移动、删除

Delphi with do和for do语句

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...