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

1

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

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

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

  • 0
    Когда вы создаете экранную заставку, вы создаете форму Windows и переименовываете exe в scr, поэтому я не уверен, куда вы попали. Despite what you read, it turns out that a Windows Screen Saver is not an .exe.. . Вы тот, кто создает заставку и имеет контроль над ней. Я что-то пропустил? И чтобы добавить к этому, если вы не устанавливаете заставку, почему вы беспокоитесь о переименовании его в scr И если вы устанавливаете его, почему вы вызываете scr вручную (двойной щелчок)? Переименовав его в scr и установив его, вы ожидаете, что Windows вызовет его.
  • 0
    Я уверен, что то, что вам нужно, невозможно, и вам понадобится другой способ, возможно, файл конфигурации. Возможно, кто-то докажет, что я не прав.
Показать ещё 2 комментария
Теги:
winforms
screensaver
command-line-arguments
windows-screensaver

1 ответ

0

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

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

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

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

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

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

  • 0
    К сожалению, клиент довольно специфичен в требованиях: заставка, которую запускают окна, и ярлык на рабочем столе, который запускает заставку с немного другим поведением. Оказывается, это не выполнимо. Если он не будет изменять требования, я думаю, что я просто сделаю заставку-заглушку заглушкой, которая запускает мой exe-файл (передавая аргументы Windows), и получит точку ярлыка на том же exe-файле (со своими собственными аргументами).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню