zoukankan      html  css  js  c++  java
  • Program Name、Process ID、Window Handle、Process Handle 的转换函数

    Program NameProcess IDWindow HandleProcess Handle 的转换函数

    // Get ProcessID By ProgramName (Include Path or Not Include)
    function GetPIDByProgramName(const APName: string): THandle;
    // Get Window Handle By ProgramName (Include Path or Not Include)
    function GetHWndByProgramName(const APName: string): THandle;
    // Get Window Handle By ProcessID
    function GetHWndByPID(const hPID: THandle): THandle;
    // Get ProcessID By Window Handle
    function GetPIDByHWnd(const hWnd: THandle): THandle;
    // Get Process Handle By Window Handle
    function GetProcessHndByHWnd(const hWnd: THandle): THandle;
    // Get Process Handle By Process ID
    function GetProcessHndByPID(const hAPID: THandle): THandle;




    // Get Window Handle By ProgramName (Include Path or Not Include)
    function GetHWndByProgramName(const APName: string): THandle;
    begin
    Result:=GetHWndByPID(GetPIDByProgramName(APName));
    end;

    // Get Process Handle By Window Handle
    function GetProcessHndByHWnd(const hWnd: THandle): THandle;
    var
    PID: DWORD;
    AhProcess: THandle;
    begin
    if hWnd<>0 then
    begin
    GetWindowThreadProcessID(hWnd, @PID);
    AhProcess := OpenProcess(PROCESS_ALL_ACCESS, false, PID);
    Result:=AhProcess;
    CloseHandle(AhProcess);
    end
    else
    Result:=0;
    end;

    // Get Process Handle By Process ID
    function GetProcessHndByPID(const hAPID: THandle): THandle;
    var
    AhProcess: THandle;
    begin
    if hAPID<>0 then
    begin
    AhProcess := OpenProcess(PROCESS_ALL_ACCESS, false, hAPID);
    Result:=AhProcess;
    CloseHandle(AhProcess);
    end
    else
    Result:=0;
    end;


    // Get Window Handle By ProcessID
    function GetPIDByHWnd(const hWnd: THandle): THandle;
    var
    PID: DWORD;
    begin
    if hWnd<>0 then
    begin
    GetWindowThreadProcessID(hWnd, @PID);
    Result:=PID;
    end
    else
    Result:=0;
    end;


    // Get Window Handle By ProcessID
    function GetHWndByPID(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;
    begin
    GetWindowThreadProcessID(Wnd, @PID);
    Result := (PID <> EI.ProcessID) or
    (not IsWindowVisible(WND)) or
    (not IsWindowEnabled(WND));

    if not Result then EI.HWND := WND; //break on return FALSE
    所以要反向檢查
    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;


    // Get ProcessID By ProgramName (Include Path or Not Include)
    function GetPIDByProgramName(const APName: string): THandle;
    var
    isFound: boolean;
    AHandle, AhProcess: THandle;
    ProcessEntry32: TProcessEntry32;
    APath: array[0..MAX_PATH] of char;
    begin
    try
    Result := 0;
    AHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    ProcessEntry32.dwSize := Sizeof(ProcessEntry32);
    isFound := Process32First(AHandle, ProcessEntry32);

    while isFound do
    begin
    AhProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
    false, ProcessEntry32.th32ProcessID);
    GetModuleFileNameEx(AhProcess, 0, @APath[0], sizeof(APath));

    if (UpperCase(StrPas(APath)) = UpperCase(APName)) or
    (UpperCase(StrPas(ProcessEntry32.szExeFile)) = UpperCase(APName)) then
    begin
    Result := ProcessEntry32.th32ProcessID;
    break;
    end;
    isFound := Process32Next(AHandle, ProcessEntry32);
    CloseHandle(AhProcess);
    end;
    finally
    CloseHandle(AHandle);
    end;
    end;

  • 相关阅读:
    【原创】Apache ab结果参数详解
    【转载】QPS,用户平均等待时间,服务器平均请求处理时间
    【原创】Apache ab测试时出现:apr_socket_recv "connection reset by peer" 104
    【做题】Codeforces Round #429 (Div. 2) E. On the Bench——组合问题+dp
    oracle递归查询
    http1.0和1.1的区别
    here with you
    spring杂碎
    西海情歌
    //随机生成 10到20条数据 数据包含 用户名(5-10位的字母) 性别 年龄(1-100岁)
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255240.html
Copyright © 2011-2022 走看看