飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4971|回复: 0

获取自己在程序中运行的外部EXE的Handle

[复制链接]
  • TA的每日心情
    开心
    2019-9-19 16:05
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2007-2-8 10:57:43 | 显示全部楼层 |阅读模式
    (大富翁论坛: http://www.delphibbs.com/)

    type
    PEnumInfo = ^TEnumInfo;
    TEnumInfo = record
    ProcessID : DWORD;
    HWND : THandle;
    end;

    function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall;
    var
    PID : DWORD;
    begin
    GetWindowThreadProcessID(Wnd, @PID);
    Result := (PID <> EI.ProcessID) or
    (not IsWindowVisible(WND)) or
    (not IsWindowEnabled(WND));

    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;


    procedure TForm1.Button1Click(Sender: TObject);
    var
    SI : TStartupInfo;
    PI : TProcessInformation;
    H : THandle;
    S : String;
    begin
    ZeroMemory(@SI, SizeOf(SI));
    ZeroMemory(@PI, SizeOf(PI));
    SI.cb := SizeOf(SI);
    if CreateProcess(nil,'CALC.EXE', nil, nil, FALSE, 0 ,nil,nil, SI, PI) then
    begin
    //注意!
    WaitForInputIdle(PI.hProcess, INFINITE);

    H := FindMainWindow(PI.dwProcessID);
    if H > 0 then
    begin
    SetLength(S, 255);
    GetWindowText(H, PChar(S), 255);
    SetLength(S, StrLen(PChar(S)));
    ShowMessage(S);
    end;

    CloseHandle(PI.hProcess);
    CloseHandle(PI.hThread);
    end;
    end;
    end.
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表