Как я могу получить процесс, который запустил мое приложение?

Несмотря на то, что вы читали, оказывается, что экранная заставка Windows — это НЕ «просто» файл .exe, переименованный в .scr. Файл .scr не «запускается» напрямую, как EXE. Вместо этого Windows ищет исполняемый файл в файле .scr и повторно запускает этот исполняемый файл с любыми параметрами командной строки, которые Windows хочет передать исполняемому файлу.

Это означает, что если вы создаете ярлык для вашего файла .scr с вашими собственными параметрами (например, «myscreensaver.scr /windowed/doublebuffered»), когда вы используете этот ярлык, Environment.CommandLine показывает, что был запущен «myscreensaver .scr/S". Обратите внимание, что мои параметры были заменены.

Я понимаю роль параметров /s, /c и /p здесь. Это не требует пояснений, и я правильно использую их в своей экранной заставке. Но я также хотел бы вернуть свои исходные параметры. Можно ли получить имя процесса, запустившего мой процесс, и параметры командной строки, переданные этому процессу?


person Cardinal Fang    schedule 28.08.2014    source источник
comment
Когда вы создаете заставку, вы создаете форму окна и переименовываете exe в scr, поэтому я не уверен, откуда вы берете Despite what you read, it turns out that a Windows Screen Saver is not an .exe... Вы тот, кто создает заставку и имеете контроль над ней. Я что-то пропустил? И вдобавок к этому, если вы не устанавливаете свою заставку, почему вы беспокоитесь о переименовании ее в scr, И если вы ее устанавливаете, почему вы вызываете scr вручную (двойной щелчок)? Переименовав его в scr и установив, вы ожидаете, что Windows вызовет его.   -  person The Muffin Man    schedule 29.08.2014
comment
Я почти уверен, что то, что вам нужно, невозможно, и вам понадобится другой способ, возможно, файл конфигурации. Хотя, может быть, кто-то докажет, что я ошибаюсь.   -  person vesan    schedule 29.08.2014
comment
@vesan Чтобы изменить настройки экранной заставки, используйте форму параметров. Эти настройки обычно сохраняются и загружаются в/из реестра. Как я уже сказал, если вы хотите вызвать его вручную, не делайте его файлом scr. Оставьте его как exe. Это просто.   -  person The Muffin Man    schedule 29.08.2014
comment
@vesan Спасибо за попытку ответить на вопрос, Весан. Я так и подозревал. :-) Да, Маффин, ты что-то упускаешь. Когда вам нужно удалить только из моей цитаты, вы должны подозревать, что на самом деле вы не обращаетесь к этой цитате. Я думаю, что я довольно ясно понял разницу в утверждении, которое последовало за цитатой.   -  person Cardinal Fang    schedule 29.08.2014


Ответы (1)


Вы правы насчет файла SCR. Это просто EXE-файл, который Windows запускает с параметрами /p (предварительный просмотр), /c (настройка) или /s (показать). За все остальное, в том числе за сохранение своих настроек в реестре или в другом месте, отвечает хранитель экрана.

Нет, я не знал, что если вы запускаете заставку напрямую, Windows перезаписывает аргументы командной строки с помощью /S. Хотя в этом есть смысл.

Аргументы командной строки хранятся во внутреннем буфере Windows, к которому можно получить доступ из программы или извне. Есть только один буфер, так что если он пропал, то пропал.

Процесс, который запустил ваш процесс, почти наверняка является Explorer, и если он помнит ваши аргументы командной строки, это ничего не говорит.

Возможно, вы сможете найти окно для последнего приложения перед оболочкой, посмотрев на Z-порядок.

Все, о чем я могу думать, это то, что вместо использования ярлыка напишите свой собственный скрипт, который может запускать хранитель экрана (точно так же, как ярлык), но отправлять ему некоторые аргументы после запуска. Это довольно легко сделать.

person david.pfx    schedule 29.08.2014
comment
К сожалению, у клиента довольно специфичные требования: заставка, которую запускает Windows, и ярлык на рабочем столе, который запускает заставку с немного другим поведением. Оказывается, это невыполнимо. Если он не изменит требования, я думаю, что просто сделаю заставку заглушкой, которая запускает мой exe (передавая аргументы Windows), и укажу точку быстрого доступа на тот же exe (с его собственными аргументами). - person Cardinal Fang; 29.08.2014