![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
получение хэндла окна из TShellExecuteInfo
Альберт © (2006-11-27 19:30:00)var shll:TShellExecuteInfo;
//-------------------------------
FillChar(shll, Sizeof(shll), 0);
with shll do
begin
cbSize:= Sizeof(shll);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := 30000;
lpVerb:= 'open';
lpParameters := PChar('about:blank');
lpFile:= Pchar('mshta.exe');
nShow := SW_SHOW;
lpDirectory := 'C:\WINDOWS\system32';
end;
ShellExecuteEX(@shll);
почему не присваивается новое значение в shll.wnd?
Leonid Troyanovsky (2006-11-27 21:25:00) [1]
> Альберт (27.11.06 20:09) [15]
> может имеет смысл пользоваться GetWindowThreadProcessId?
Без этой функции, безусловно, не обойтись.
Кроме того, видимо, сочетать ее придется с CreateProcess,
возвращающего кроме хендлов и идентификаторы
процесса и его первичного потока.
Ну, а начинать EnumWindows, скорее всего,
придется после WaitForInputIdle.
Кстати, закрывать хендл процесса (или, возможно,
первичного потока) надо не раньше обнаружения
искомого окна/он.
Однако, все это, все равно, не исключает некотрых
случаев, когда во время перечисления некоторые
окна искомого процесса успеют закрыться.
--
Regards, LVT.
Альберт (2006-11-27 20:09:00) [2]
> А почему ты считаешь, что у него:
> - есть хоть один поток, владеющий окном;
> - что это единственное окно.
да я понял, что не в ту степь ушел..
> Пардон, с каким Process?
shll.hProcess
может имеет смысл пользоваться GetWindowThreadProcessId?
Leonid Troyanovsky (2006-11-27 20:04:00) [3]
> Альберт (27.11.06 19:55) [10]
> что я вообще хочу. я каким-то образом запускаю из своей
> программы другое приложение и очень хочу получить его HWND.
А почему ты считаешь, что у него:
- есть хоть один поток, владеющий окном;
- что это единственное окно.
--
Regards, LVT.
Leonid Troyanovsky (2006-11-27 20:04:00) [4]
> Альберт (27.11.06 20:02) [12]
> мда... а каким образом вообще получить это окно? через перебор
> всех окон и сравнением Process?
Пардон, с каким Process?
--
Regards, LVT.
Альберт (2006-11-27 20:02:00) [5]мда... а каким образом вообще получить это окно? через перебор всех окон и сравнением Process?
clickmaker (2006-11-27 19:59:00) [6]
> [10] Альберт (27.11.06 19:55)
> может быть я неправильно
Ага. Неправильно.
Справка есть?
hwnd
Window handle to any message boxes that the system might produce while executing this function.
Это окно, которое будет как бы владельцем месседж бокса, который может вызвать эта функция. Константа в данном контексте.
А вот в hProcess вернется хэндл процесса. Но не окна
Альберт (2006-11-27 19:55:00) [7]может быть я неправильно понял значение свойства WND?
что я вообще хочу. я каким-то образом запускаю из своей программы другое приложение и очень хочу получить его HWND..
clickmaker (2006-11-27 19:54:00) [8]
> приложение запущенное через ShellExecuteEX должно возвращать
> хэндл его окна
кто сказал?
Альберт (2006-11-27 19:50:00) [9]приложение запущенное через ShellExecuteEX должно возвращать хэндл его окна..
Альберт (2006-11-27 19:47:00) [10]хэндл окна запущенного приложения
clickmaker (2006-11-27 19:45:00) [11]а почему оно должно меняться? что собственно получить-то хочешь?
Альберт (2006-11-27 19:44:00) [12]любое значение присваемое изначально shll.wnd остается неизменным после вызова ShellExecuteEX. поэтому хоть 30000 или 0 - по барабану..
clickmaker (2006-11-27 19:42:00) [13]
> [3] Альберт (27.11.06 19:37)
> да это уже просто эксперимент был
а какова цель-то эксперимента?
Альберт (2006-11-27 19:37:00) [14]да это уже просто эксперимент был. с нулем тоже не пашет..
clickmaker (2006-11-27 19:36:00) [15]
> почему не присваивается новое значение в shll.wnd?
> Wnd := 30000;
а почему именно 30000?
Альберт (2006-11-27 19:31:00) [16]забыл поздароваться )) Добрый вечер!!!