Ветеран
Сообщения: 1216
Благодарности: 486
|
Профиль
|
Отправить PM
| Цитировать
Цитата Salmo:
Есть ли возможность получить в переменную командную строку запущенного процесса GetCommandLine »
|
Есть, для себя, делал такой макрос:
CmdProsess
Код:
!define CmdProsess "!insertmacro CallCmdProsess"
!macro CallCmdProsess `PID` `OUT`
!ifndef VAR_CMDPROSESS
;объявление структур
!define VAR_STRUCT
!define stPROCESS_PARAMETERS "(i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i.s,i,i,i,i,i,i,i,i,i,i)"
!define stPROCESS_BASIC_INFORMATION "(i,i.s,i,i,i,i)"
!define stPEB "(i,i,i,i,i.s,i,i)"
;;;;;;;;;;;;;
!endif
System::Store S
System::Call "kernel32::OpenProcess(i0x1F0FFF,i0,i${PID})i.R2"
System::Alloc 24
Pop $R0
System::Call "ntdll::NtQueryInformationProcess(iR2, i0, iR0, i24, in)i.R1"
${If} $R1 == 0
System::Alloc 28
Pop $R1
System::Call "*$R0${stPROCESS_BASIC_INFORMATION}" ;PebBaseAddress
System::Free $R0
System::Call "kernel32::ReadProcessMemory(iR2, is, iR1, i28, *in)"
System::Alloc 144
Pop $R0
System::Call "*$R1${stPEB}" ;ProcessParameters
System::Free $R1
System::Call "kernel32::ReadProcessMemory(iR2, is, iR0, i144, *in)"
System::Call "*$R0${stPROCESS_PARAMETERS}" ;CommandLine
System::Free $R0
System::Call "kernel32::ReadProcessMemory(iR2, is, w.s, i536, *in)"
System::Call "kernel32::CloseHandle(iR2)"
${Else}
System::Free $R0
System::Call "kernel32::CloseHandle(iR2)"
Push error
${EndIf}
System::Store L
Pop `${OUT}`
!macroend
использование макроса:
Код:
${CmdProsess} "пид процесса" "$var"
Как найти пид запущенного процесса читаем в справочнике: » Работа с процессами с помощью NSIS..
$var - переменная, где находится командная строка запущенного процесса
|