Если ваш код работает в процессе (в excel.exe)
Командную строку можно получить с помощью свойства Environment.CommandLine
. Обратите внимание, что процесс может изменить свою собственную командную строку (в конце концов, это всего лишь несколько байтов в памяти), но это не часто делается.
Если ваш код работает вне процесса (рекомендуется вариант 1)
Вы можете использовать WMI для получения аргументов командной строки другого процесса. Смотрите здесь . Вам нужно будет добавить ссылку на System.Management.dll. Например:
string query = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name='{0}'", "excel.exe");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
foreach (ManagementObject process in searcher.Get())
{
Console.WriteLine(process["CommandLine"]);
}
}
При этом будут напечатаны командные строки всех запущенных экземпляров excel.exe. Вы также можете выполнить запрос по идентификатору процесса, используя параметр ProcessId
вместо параметра Name
в запросе.
Если ваш код работает вне процесса (вариант 2, хитрее)
Вы также можете получить командную строку удаленного процесса, используя NtQueryInformationProcess
и ReadProcessMemory
для чтения в блоке среды процесса (PEB), чтобы получить _RTL_USER_PROCESS_PARAMETERS
, который содержит команду -линия. Однако ничего из этого не задокументировано, что означает, что оно не поддерживается и может быть изменено. Детали этого описаны здесь .