Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить параметры запуска другого приложения? [D7, 2000, XP]


Gloomer ©   (2007-05-31 23:46:00) 

Известен PID процесса. Пробовал использовать GetModuleFileNameEx - но она возвращает только полный путь к файлу. А надо получить командную строку запуска, например
"С:\Program Files\Java\jre1.5\bin\javaw.exe" -jar "С:\123.jar"
В МСДН что-то не могу найти какую функцию мне надо использовать...


Riply   (2007-06-01 22:05:00) [1]

> [3] clickmaker ©   (01.06.07 11:08)
Так много сакраментальных чисел :)


clickmaker   (2007-06-01 11:08:00) [2]

function NtQueryInformationProcess(hProcess: THandle; ProcessInfoClass: Integer; ProcessInfoBuffer: Pointer;
ProcessInfoBufferLength: Cardinal; BytesReturned: PCardinal): integer; stdcall; external 'ntdll.dll';

function GetCommandLine(pID: DWORD): PWChar;
label err;
var
pbi: array [0..5] of DWORD;
hProc: THandle;
pProcParams: DWORD;
wCmdLen: WORD;
pCmdLine: DWORD;
br: DWORD;
begin
result := nil;
hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, pID);
if NtQueryInformationProcess(hProc, 0, @pbi, $18, nil) <> 0 then goto err;
if not ReadProcessMemory(hProc, Pointer(pbi[1] + $10), @pProcParams, 4, br) then goto err;
if not ReadProcessMemory(hProc, Pointer(pProcParams + $40), @wCmdLen, 2, br) then goto err;
if not ReadProcessMemory(hProc, Pointer(pProcParams + $44), @pCmdLine, 4, br) then goto err;
result := GetMemory(wCmdLen);
if result = nil then goto err;
if not ReadProcessMemory(hProc, Pointer(pCmdLine), result, wCmdLen, br) then
 begin
  FreeMemory(result);
  result := nil;
 end;
err:
CloseHandle(hProc);
end;

procedure TForm1.Button1Click(Sender: TObject);
var pwcResult: PWChar;
begin
 pwcResult := GetCommandLine(1432);
 if (pwcResult <> nil) then begin
   MessageBoxW(0, pwcResult, 'Command line is:', 0);
   FreeMem(pwcResult);
 end;
end;


begin...end   (2007-06-01 07:39:00) [3]

http://rsdn.ru/Forum/?mid=18652


Kedge   (2007-06-01 06:28:00) [4]

ReadProcessMemory ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо