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;

  • 相关阅读:
    Delegte的BeginInvoke
    C# socket 实现客户端连续发送数据
    Button的PerformClick()
    Invoke和BeginInvoke
    Application.DoEvents() 处理队列消息,防界面假死
    BackgroundWorker后台线程
    CF773F
    ORM框架,没必要搞那么复杂
    VS Unable to copy file
    Unbuntu auto start program
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255240.html
Copyright © 2011-2022 走看看