Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизПодскажите почему возвращает путь только собственного приложения? Найти похожие ветки
← →
Pit © (2006-01-29 18:34) [0]Подскажите почему возвращает путь только собственного приложения?
procedure TForm1.Button1Click(Sender: TObject);
var
hSnapShot: THandle;
modHandle: HMODULE ;
uProcess: PROCESSENTRY32;
r: longbool;
buf: array [0..128] of char;
begin
ListBox1.Clear;
hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnapShot<>0)then
begin
r:=Process32First(hSnapShot, uProcess);
while r <> false do
begin
modHandle:= GetModuleHandle(uProcess.szExeFile);
GetModuleFileName(modHandle,buf,sizeOf(buf));
ListBox1.Items.Add(buf);
r:=Process32Next(hSnapShot, uProcess);
end;
CloseHandle(hSnapShot);
end;
end;
← →
begin...end © (2006-01-29 18:58) [1]Потому что на каждом проходе цикла в uProcess.szExeFile находится не полный путь к файлу процесса, а только его имя (да и то не всегда). Из-за этого GetModuleHandle не может определить хэндл модуля, и возвращает ноль. А функция GetModuleFileName передачу этого нуля в качестве параметра hModule рассматривает как желание получить путь к файлу, создавшему текущий процесс.
← →
Pit © (2006-01-29 19:21) [2]Как же решить эту проблемую
Подскажите пожалуйста как определить полный путь к файлу по хэндлу , по модулю или по имени чужого окна.
← →
begin...end © (2006-01-29 19:43) [3]Я поспешил с ответом и несколько неправ в [1]: GetModuleHandle возвращает ноль потому, что передаваемый ей путь (или имя) вообще не имеет отношения к текущему процессу. Да и uProcess.dwSize перед вызовом Process32First не инициализируется...
> Pit © (29.01.06 19:21) [2]
Открыть процесс по uProcess.th32ProcessID (OpenProcess) и вызвать GetModuleFileNameEx. Не забыть закрыть хэндл процесса.
← →
Pit © (2006-01-29 20:09) [4]В моей Винде(XP) почему то не работает GetModuleFileNameEx,
пишит - Undeclared identifier: GetModuleFileNameEx
Все обьявления вроде сделал, и uses"ы и все остальные.
Всёравно спасибо буду ломать голову как это дело решить,есть к чему стремится.
← →
begin...end © (2006-01-29 20:16) [5]> Pit © (29.01.06 20:09) [4]
uses PsAPI
← →
Pit © (2006-01-29 21:26) [6]СПАСИБО ОГРОМНОЕ наконецто работает,но не всё как мне надо,
но направление поиска понятно.
procedure TForm1.Button1Click(Sender: TObject);
var
ProcessId: integer;
hSnapShot: THandle;
ProcessHandle: THandle;
ModHandle: HMODULE ;
uProcess: PROCESSENTRY32;
r: longbool;
buf: array [0..128] of char;
begin
ListBox1.Clear;
hSnapShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnapShot<>0)then
begin
r:=Process32First(hSnapShot, uProcess);
while r <> false do
begin
ProcessId:= (uProcess.th32ProcessID);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
ModHandle:= GetModuleHandle(uProcess.szExeFile);
GetModuleFileNameEx(ProcessHandle,ModHandle,buf,128);
ListBox1.Items.Add(buf);
r:=Process32Next(hSnapShot, uProcess);
end;
CloseHandle(hSnapShot);
end;
end;
← →
kaZaNoVa © (2006-01-30 09:40) [7]Pit © (29.01.06 21:26) [6]
> ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS,
> FALSE, ProcessId);
маленькая рекомендация .. для запроса информации не всда нужены все права .. (их иногда может нехватить) - лучшеPROCESS_QUERY_INFORMATION or PROCESS_VM_READ
имхо ...
← →
Pit © (2006-01-30 12:29) [8]Да kaZaNoVa вы правы это PROCESS_QUERY_INFORMATION or PROCESS_VM_READ подходит как нельзя лучше.Спасибо.
← →
begin...end © (2006-01-30 16:37) [9]> Pit © (29.01.06 21:26) [6]
Есть несколько ошибок и недочётов. Так будет лучше:var
hSnapshot, hProcess: THandle;
PE: TProcessEntry32;
Path: array [0..MAX_PATH] of Char;
begin
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnapshot <> INVALID_HANDLE_VALUE then
begin
PE.dwSize := sizeof(PE);
if Process32First(hSnapshot, PE) then
repeat
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, PE.th32ProcessID);
if GetModuleFileNameEx(hProcess, 0, Path, sizeof(Path)) <> 0 then
// добавление Path в список;
CloseHandle(hProcess)
until not Process32Next(hSnapshot, PE);
CloseHandle(hSnapshot)
end
end
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c