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