Question:
I want to get position of exe path from window handle. Can I get the code?
Answer:
This not simple, but here the code:
uses 
  PsAPI, TlHelp32; 
const 
  RsSystemIdleProcess = 'System Idle Process'; 
  RsSystemProcess = 'System Process'; 
function IsWinXP: Boolean; 
begin 
  Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and 
    (Win32MajorVersion = 5) and (Win32MinorVersion = 1); 
end; 
function IsWin2k: Boolean; 
begin 
  Result := (Win32MajorVersion >= 5) and 
    (Win32Platform = VER_PLATFORM_WIN32_NT); 
end; 
function IsWinNT4: Boolean; 
begin 
  Result := Win32Platform = VER_PLATFORM_WIN32_NT; 
  Result := Result and (Win32MajorVersion = 4); 
end; 
function IsWin3X: Boolean; 
begin 
  Result := Win32Platform = VER_PLATFORM_WIN32_NT; 
  Result := Result and (Win32MajorVersion = 3) and 
    ((Win32MinorVersion = 1) or (Win32MinorVersion = 5) or 
    (Win32MinorVersion = 51)); 
end; 
function RunningProcessesList(const List: TStrings; FullPath: Boolean): Boolean; 
  
function ProcessFileName(PID: DWORD): string; 
  var 
    Handle: THandle; 
  begin 
    Result := ''; 
    Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID); 
    if Handle <> 0 then 
      try 
        SetLength(Result, MAX_PATH); 
        if FullPath then 
        begin 
          if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then 
            SetLength(Result, StrLen(PChar(Result))) 
          else 
            Result := ''; 
        end 
        else 
        begin 
          if GetModuleBaseNameA(Handle, 0, PChar(Result), MAX_PATH) > 0 then 
            SetLength(Result, StrLen(PChar(Result))) 
          else 
            Result := ''; 
        end; 
      finally 
        CloseHandle(Handle); 
      end; 
  end; 
  
function BuildListTH: Boolean; 
  var 
    SnapProcHandle: THandle; 
    ProcEntry: TProcessEntry32; 
    NextProc: Boolean; 
    FileName: string; 
  begin 
    SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    Result := (SnapProcHandle <> INVALID_HANDLE_VALUE); 
    if Result then 
      try 
        ProcEntry.dwSize := SizeOf(ProcEntry); 
        NextProc := Process32First(SnapProcHandle, ProcEntry); 
        while NextProc do 
        begin 
          if ProcEntry.th32ProcessID = 0 then 
          begin 
            FileName := RsSystemIdleProcess; 
          end 
          else 
          begin 
            if IsWin2k or IsWinXP then 
            begin 
              FileName := ProcessFileName(ProcEntry.th32ProcessID); 
              if FileName = '' then 
                FileName := ProcEntry.szExeFile; 
            end 
            else 
            begin 
              FileName := ProcEntry.szExeFile; 
              if not FullPath then 
                FileName := ExtractFileName(FileName); 
            end; 
          end; 
          List.AddObject(FileName, Pointer(ProcEntry.th32ProcessID)); 
          NextProc := Process32Next(SnapProcHandle, ProcEntry); 
        end; 
      finally 
        CloseHandle(SnapProcHandle); 
      end; 
  end; 
  
function BuildListPS: Boolean; 
  var 
    PIDs: array [0..1024] of DWORD; 
    Needed: DWORD; 
    I: Integer; 
    FileName: string; 
  begin 
    Result := EnumProcesses(@PIDs, SizeOf(PIDs), Needed); 
    if Result then 
    begin 
      for I := 0 to (Needed div SizeOf(DWORD)) - 1 do 
      begin 
        case PIDs[I] of 
          0: 
            FileName := RsSystemIdleProcess; 
          2: 
            if IsWinNT4 then 
              FileName := RsSystemProcess 
            else 
              FileName := ProcessFileName(PIDs[I]); 
            8: 
            if IsWin2k or IsWinXP then 
              FileName := RsSystemProcess 
            else 
              FileName := ProcessFileName(PIDs[I]); 
            else 
              FileName := ProcessFileName(PIDs[I]); 
        end; 
        if FileName <> '' then 
          List.AddObject(FileName, Pointer(PIDs[I])); 
      end; 
    end; 
  end; 
begin 
  if IsWin3X or IsWinNT4 then 
    Result := BuildListPS 
  else 
    Result := BuildListTH; 
end; 
function GetProcessNameFromWnd(Wnd: HWND): string; 
var 
  List: TStringList; 
  PID: DWORD; 
  I: Integer; 
begin 
  Result := ''; 
  if IsWindow(Wnd) then 
  begin 
    PID := INVALID_HANDLE_VALUE; 
    GetWindowThreadProcessId(Wnd, @PID); 
    List := TStringList.Create; 
    try 
      if RunningProcessesList(List, True) then 
      begin 
        I := List.IndexOfObject(Pointer(PID)); 
        if I > -1 then 
          Result := List[I]; 
      end; 
    finally 
      List.Free; 
    end; 
  end; 
end; 
Subscribe to:
Post Comments (Atom)


  



the problem of data corruption in the files of specified format can be fixed by the repaire pdf utility
air max, burberry outlet, true religion jeans, louboutin, louis vuitton outlet, louboutin, ray ban sunglasses, tiffany and co, coach outlet store online, oakley sunglasses cheap, christian louboutin shoes, longchamp outlet, louis vuitton, true religion jeans, tory burch outlet, kate spade outlet, kate spade handbags, oakley sunglasses, jordan shoes, polo ralph lauren outlet, louis vuitton outlet, louis vuitton handbags, coach outlet, prada outlet, ray ban sunglasses, chanel handbags, michael kors outlet, longchamp handbags, michael kors outlet, oakley sunglasses, nike shoes, air max, coach purses, michael kors outlet, longchamp handbags, louis vuitton outlet stores, nike free, prada handbags, coach factory outlet, gucci outlet, tiffany and co, louboutin outlet, michael kors outlet, polo ralph lauren outlet, michael kors outlet, burberry outlet, michael kors outlet
marc jacobs, soccer shoes, abercrombie and fitch, hollister, asics running shoes, canada goose, ugg boots, nfl jerseys, reebok outlet, herve leger, ugg, north face outlet, mont blanc, longchamp, insanity workout, canada goose uk, chi flat iron, babyliss pro, ugg pas cher, ugg australia, canada goose jackets, mcm handbags, canada goose, wedding dresses, new balance shoes, mac cosmetics, soccer jerseys, celine handbags, birkin bag, p90x, ferragamo shoes, valentino shoes, nike huarache, beats by dre, ghd, instyler, jimmy choo outlet, lululemon outlet, bottega veneta, canada goose, rolex watches, canada goose outlet, vans shoes, nike roshe run, moncler, ugg boots, north face jackets, uggs outlet, giuseppe zanotti
louboutin, moncler outlet, juicy couture outlet, iphone 6 cases, hollister, moncler, karen millen, oakley, baseball bats, wedding dresses, ray ban, gucci, canada goose, ralph lauren, canada goose, swarovski crystal, hollister clothing store, moncler, air max, converse, pandora jewelry, juicy couture outlet, rolex watches, moncler, supra shoes, moncler, pandora charms, ugg, vans, toms shoes, links of london, pandora charms, air max, timberland boots, parajumpers, hollister, thomas sabo, louis vuitton, montre homme, coach outlet store online, lancel, ugg, swarovski, moncler, converse shoes