• 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

  • 相关阅读:
    bean的作用域和生命周期
    装配Bean的三种方式
    BeanFactory和ApplicationContext对比
    创建 Spring容器的三种方式
    约束
    三大范式
    事务
    EdgeRank
    TCP三次握手四次挥手
    Linux权限解释
  • 原文地址:https://www.cnblogs.com/findumars/p/6348012.html
Copyright © 2020-2023  润新知