|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Всем ДВС. Есть тривиальная задача - открыть папку в проводнике Windows и показать (выделить) в ней заданный файл (конечно же программно). Так вот, по итогу было найдено решение: использовать ShellExecute, с параметрами "open" "explorer" "/select, путь к файлу". И все вроде хорошо, за исключением того, что окно проводника открывается в фоне, и приветливо моргает с "таскбара". Погуглив было решено перейти на использование ShelExecuteEx, для того, чтобы получать ссылку на объект запущенного процесса, и затем, получая его идентифкатор через GetProcessId искать соответствующее ему окно через EnumWindows и делать его Поверх остальных. Однако, получаемый по hProcess идентификатор, по итогу вообще не соотносится ни с одним из процессов (согласно менеджеру процессов). Открыть его и уничтожить (OpenProcess -> TerminateProcess), также ни к чему не приводит. Так вот и вопрос, как получить корректный PID для процесса, созданного в результате выполнения ShellExecuteEx c указанными параметрами? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 12:57 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
nicegrin, А если идти не от процесса а найти хендл окна (да хоть по заголовку) и послать ему мессагу? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:03 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
nicegrinкак получить корректный PID для процесса, созданного в результате выполнения ShellExecuteEx c указанными параметрами? В данном случае - никак, поскольку этот процесс давно завершился, передав управление предыдущему запущенному инстансу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:04 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В данном случае - никак, поскольку этот процесс давно завершился, передав управление предыдущему запущенному инстансу. Под выражением "этот процесс" вы имеете ввиду процесс выполнения команды программой explorer.exe? Т.е. она запускается и инициирует новый процесс explorer.exe своими силами чтобы предоставить результат. И Этот результат уже не имеет ничего общего с результатом ShellExecute. Ну тогда все объяснимо. Тогда остается нетривиальная задача вывести окно с выделенным файлом на первый план, как это делают прочие программы (браузеры, IDE и т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:48 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, возможно что-то похожее и придется делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:49 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Процесс explorer.exe запускается при входе в виндовс, а ShellExecute() как-то передает ему какую папку открыть. Скорее всего для этого запускается промежуточный процесс, который передает и завершается. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 13:53 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
nicegrinТ.е. она запускается и инициирует новый процесс explorer.exe своими силами чтобы предоставить результат. Ну блин, чёрным же по-англицки расписан именно этот случай в доке по ShellExecute... nicegrinТогда остается нетривиальная задача вывести окно с выделенным файлом на первый план Разве не именно для этого служит параметр nShow?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:03 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Разве не именно для этого служит параметр nShow?.. В данном случае этот параметр не влияет на требуемый результат. И Ничего черного по английски нигде не написано, если говорить о положении окон запускаемых процессов относительно других окон. https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 14:51 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
С выводом окон поверх других все непросто, МС ввел ограничения т.к. разработчики злоупотребляют этим делом. Ты даешь команду вывести поверх всех окон, а виндавс не всегда это делает, чаще просто моргает в таскбаре. Я как-то давно разбирался с подобной проблемой, в итоге сделал наоборот - не новое окно наверх, а свое окно уводил за новое. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 15:05 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
nicegrinВ данном случае этот параметр не влияет на требуемый результат. Это потому что ты используешь "open" на Проводник. Пробовал использовать "explore" на нужный тебе файл? И пробовал ли использовать AllowSetForegroundWindow(ASFW_ANY)? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 15:08 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Explore всегда отлично работает , НО, только с каталогами. с файлами данная операция - не прокатывает. Файл можно или открыть, или отредактировать или напечатать в основном. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 15:12 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov И пробовал ли использовать AllowSetForegroundWindow(ASFW_ANY)? Пробовал. Не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 15:17 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
MSDNThe system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true: The process is the foreground process. The process was started by the foreground process. The process received the last input event. There is no foreground process. The foreground process is being debugged. The foreground is not locked (see LockSetForegroundWindow). The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo). No menus are active. В данном случае если ты не соотвествуешь выделенному - ничто не поможет, окно будет только моргать в таскбаре. Но я бы таки поэкспериментировал с AllowSetForegroundWindow(). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 15:18 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Проблема решена. ShellExecute и К отдыхают http://decoding.dax.ru/faq/vcl/files/files004.html SHOpenFolderAndSelectItems рулит. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Ну и коли ветка по С++ (В моем случае RAD Studio, Builder) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 15:32 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Тут капец глаза сломать можно. Где какой тип? Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 17:14 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
Dima T С выводом окон поверх других все непросто, МС ввел ограничения т.к. разработчики злоупотребляют этим делом. Ты даешь команду вывести поверх всех окон, а виндавс не всегда это делает, чаще просто моргает в таскбаре. Я как-то давно разбирался с подобной проблемой, в итоге сделал наоборот - не новое окно наверх, а свое окно уводил за новое. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 17:26 |
|
ShellExecuteEx hProcess PID - процесса Explorer.exe
|
|||
---|---|---|---|
#18+
mayton, Прошу прощения, набирал вживую, не копипастил, поставил указатель где он не нужен: Исправляюсь Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2021, 20:22 |
|
|
start [/forum/topic.php?fid=57&fpage=3&tid=2017221]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 413ms |
0 / 0 |