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;

  • 相关阅读:
    CSS布局 ——从display,position, float属性谈起
    svchost.exe启动服务原理(如何查看系统服务究竟启动了哪个文件)
    简单模拟多线程Socket通信(java)
    把爱融入程序——程序,源自生活,高于生活
    SQL LIKE语句多条件贪婪匹配算法
    SQL多条件模糊查询解决方案(类似百度搜索)
    SQL LIKE语句多条件贪婪加权匹配算法(改进版)
    Foxmail添加微软最新outlook.com邮箱解决方案
    SQL LIKE语句多条件贪婪加权匹配(新增必要词指定)
    搜索的艺术——搜索引擎使用心得
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255240.html
Copyright © 2011-2022 走看看