Тема: AHK: Как определить аргументы командной строки, запустившей процесс?
Программы ProcessExplorer, Process Hacker позволяют видеть полную командную строку с аргументами, запустившую процесс. Как её получить в AHK ?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → AutoHotkey → AHK: Как определить аргументы командной строки, запустившей процесс?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Программы ProcessExplorer, Process Hacker позволяют видеть полную командную строку с аргументами, запустившую процесс. Как её получить в AHK ?
Программы ProcessExplorer, Process Hacker позволяют видеть полную командную строку с аргументами, запустившую процесс. Как её получить в AHK ?
Там всё не очень просто. Если по пунктам:
1) нужно открыть целевой процесс с правами на чтение и получение информации(функция OpenProcess).
2) Затем нужно нужно получить информацию о процессе функцией NtQueryInformationProcess(второй аргумент ProcessBasicInformation).
3) В пункте 2 мы получили структуру PROCESS_BASIC_INFORMATION, вторым параметром которой является указатель на другую структуру- PEB. Она-то нас и интересует.
4) Эта замечательная структура описана в MSDN не слишком подробно(link), но нам хватит(в интернете можно найти и полное описание). Эта структура находится в целевом процессе(См. ReadProcessMemory). Там нас интересует ссылка на структуру RTL_USER_PROCESS_PARAMETERS.
5) Описание RTL_USER_PROCESS_PARAMETERS см. тут или тут(полное). И там мы обнаруживаем параметр CommandLine, который и содержит командную строку, переданную процессу при запуске.
С какого места непонятно?
mih, еще пример в справке:
; Example #5: Retrieves a list of running processes via COM.
Gui, Add, ListView, x2 y0 w400 h500, Process Name|Command Line
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
LV_Add("", process.Name, process.CommandLine)
Gui, Show,, Process List; Win32_Process: http://msdn.microsoft.com/en-us/library/aa394372.aspx
Александр_, в светлой рамочке — понятно, а дальше я, конечно, не осилю, мягко говоря.
Может быть, встречалось что-нибудь консольное для рестарта? — я ради него спрашивал.
______________
доб.: creature.ws, спасибо! Как бы это ещё для рестарта приспособить, надо подумать.
Может быть, встречалось что-нибудь консольное для рестарта? — я ради него спрашивал.
shutdown -r?
Александр_, не системы — процесса, запущенного с параметрами (запустил не я, поэтому параметры заранее не известны). Нет, я поторопился — мне не достаточно рестарта, нужно получить именно строку параметров процесса с конкретным PID.
Process, Exist
pid := ErrorLevel
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") ; цикл перебора всех запущенных процессов
If (process.ProcessId = pid) ; сравнение pid текущего процесса из списка процессов с неким значением
cmdline := process.CommandLine ; сохранение commandline в переменную
Run %cmdline% ; использование сохранённой строки
в данном случае используется pid процесса выполняющего текущий скрипт
creature.ws — спасибо тебе ещё раз; я час смотрел в тот пример, ничего сделать с ним не мог. Это работает; именно то, что нужно.
Александр_, спасибо за участие.
Выражаю огромную благодарность creature.ws за это замечательное компактное решение!
Помогите, пожалуйста:)
Каким образам изменить ниже приведенный код так, чтобы скомпилированная программа на AutoHotkey действовала не по всей области Фотошопа, а только в определенной ее области?
А именно в области ClassNN:PSViewC33.
>>>>>>>>>( Now Under Mouse Cursor )<<<<<<<<
ClassNN: PSViewC33
Text:
Color:
>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<
#SingleInstance ignore
Run, Photoshop.exe, , Max UseErrorLevel
if ErrorLevel = ERROR
{
MsgBox При запуске программы Photoshop произошла ошибка. Пожалуйста, попробуйте снова.
ExitApp
}
WinWaitActive ahk_class Photoshop
SetTimer Check, 2000
Return
#IfWinActive ahk_class Photoshop
WheelDown::Send, {)}
WheelUp::Send, {(}
MButton & WheelDown:: Send, {f}
MButton & WheelUp::Send, {n}
Check:
IfWinNotExist ahk_class Photoshop
{
ExitApp
}
Return
ComSyntax, как твой вопрос связан с названием данной темы? Тебе тонкий намёк.
ComSyntax, как твой вопрос связан с названием данной темы? Тебе тонкий намёк.
Как причина со следствием...
Я создам новую тему как и полагается, прошу прощение за флуд:)
creature.ws
Почему-то у меня этот код всегда находит только одни процесс - скрипта АНК. А я так понимаю, что он должен перебрать все активные процессы и выбрать из них тот, который If=
Подскажите, пожалуйста, как его подправить, чтобы можно было находить ВСЕ процессы с определенного диска и закрывать их.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться