zoukankan      html  css  js  c++  java
  • Delphi获得一个进程的主窗体(GetWindow(AHandle, GW_OWNER)等于0的窗体才是主窗体,并且要IsWindowVisible排除Application窗口)

    type
      TMainWindow = packed record
        ProcessID: THandle;
        MainWindow: THandle;
      end;
      PMainWindow =^ TMainWindow;

    function IsMainWindow(AHandle: THandle): Boolean;
    begin
      Result :=(GetWindow(AHandle, GW_OWNER) = 0and (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;

    http://blog.csdn.net/zswang/article/details/1598516

  • 相关阅读:
    许家骏
    平均得分 【杭州电-HDOJ-2023】 附加题+详细说明
    百度之星的第二个问题
    kendo ui 单击取消编辑数据grid减少的原因和治疗方法的数据
    2013年第36周准备考下半年的项目管理师
    2013年第36周三杂记
    2013第36周二小结
    2013第36周星期一
    2013年9月1日下午
    2013年8月最后一天晚上
  • 原文地址:https://www.cnblogs.com/findumars/p/6348012.html
Copyright © 2011-2022 走看看