Информация об изменениях

Сообщение Re[6]: Узнать путь к приложению из диалога "Открыть с помощь от 09.09.2021 11:37

Изменено 09.09.2021 11:40 Carc

Re[6]: Узнать путь к приложению из диалога "Открыть с помощью"
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Carc, Вы писали:


ЕМ>>>Откуда этот код будет вызываться, в какое время, в каких условиях?

C>>User mode, по команде пользователя (кнопка, команда меню).
C>>дождаться в фоновом потоке завершения выбранного пользователем приложения

ЕМ>Все равно непонятно. Это Ваш код будет вызывать SHOpenWithDialog? Или Ваш код будет просто работать в совершенно левом процессе, и как-то мониторить такие события?

Нет. Тут всё предельно четко: мой код будет вызываться из меого же процесса (моим же кодом).

ЕМ>В любом случае, без хаков/хуков тут не обойтись, и это нормально. Система возвращает информацию о приложении, когда Вы запускаете его непосредственно, через CreateProcess или ShellExecute.

Именно это меня и интересует. ShellExecute(EX) может мне вернуть HANDLE процесса, который она запустит. Но только без окна выбора OpenWith. А именно оно мне и нужно.

ЕМ> А SHOpenWithDialog — это просто способ дернуть стандартную функцию из своего кода, она вообще может выполняться в контексте Explorer'а, и не предполагает подробного отчета о результате.

А нахрена она тогда она — функция SHOpenWithDialog — нужна?
Если убрать флаг OAIF_EXEC, то SHOpenWithDialog ничего не запустит, даже в случае выбора приложения пользователем + кнопка ОК. Но и путь к выбранному приложению, тоже не вернет. На кой тогда оно надо?
Re[6]: Узнать путь к приложению из диалога "Открыть с помощь
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Carc, Вы писали:


ЕМ>>>Откуда этот код будет вызываться, в какое время, в каких условиях?

C>>User mode, по команде пользователя (кнопка, команда меню).
C>>дождаться в фоновом потоке завершения выбранного пользователем приложения

ЕМ>Все равно непонятно. Это Ваш код будет вызывать SHOpenWithDialog? Или Ваш код будет просто работать в совершенно левом процессе, и как-то мониторить такие события?

Нет. Тут всё предельно четко: мой код будет вызываться из моего же процесса (моим же кодом).

ЕМ>В любом случае, без хаков/хуков тут не обойтись, и это нормально. Система возвращает информацию о приложении, когда Вы запускаете его непосредственно, через CreateProcess или ShellExecute.

Именно это меня и интересует. ShellExecute(EX) может мне вернуть HANDLE процесса, который она запустит. Но только без окна выбора OpenWith. А именно оно мне и нужно.

ЕМ> А SHOpenWithDialog — это просто способ дернуть стандартную функцию из своего кода, она вообще может выполняться в контексте Explorer'а, и не предполагает подробного отчета о результате.

А нахрена тогда она — функция SHOpenWithDialog — нужна?

Если убрать флаг OAIF_EXEC, то SHOpenWithDialog ничего не запустит, даже в случае выбора приложения пользователем + кнопка ОК. Но и путь к выбранному приложению, тоже не вернет. На кой тогда оно надо?