Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.147.252] |
|
Сообщ.
#1
,
|
|
|
Привет всем!
Извините, если данная тема уже поднималась на форуме. Вопрос такой: Я знаю Handle формы, как теперь мне определить Handle приложения? |
Сообщ.
#2
,
|
|
|
Цитата Функция GetParent Описание: function GetParent(Wnd: HWnd): HWnd; Считывает описатель pодительского окна данного окна. Паpаметpы: Wnd: Идентификатоp окна. Возвpащаемое значение: Идентификатоp pодительского окна; 0 - если pодительское окно отсутствует. оно? |
Сообщ.
#3
,
|
|
|
Давайте я по другому объясню...
Некая программа свернута в трей... И мне нужно при нажатии на кнопку в моей программе развернуть эту программу... Проблема в этом, что в той программе несколько окон и я не могу точно определить какое окно в данный момент открыта... |
Сообщ.
#4
,
|
|
|
GetProcessHandleFromHwnd -- принимает хендел окна. НО это появилось только в Vista.
|
Сообщ.
#5
,
|
|
|
GetWindowThreadProcessId
пример использования: uses PSAPI; ... function GetProcNameByHWND(AHWND: THandle): string; var lProcID, lProcH, lLen: Cardinal; begin Result := ''; if (AHWND = 0) or not IsWindow( AHWND ) then Exit; GetWindowThreadProcessId( AHWND, lProcID ); lProcH := OpenProcess( PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, lProcID ); if lProcH = 0 then Exit; SetLength( Result, MAX_PATH ); lLen := GetModuleBaseName( lProcH, 0, @Result[1], MAX_PATH-1 ); SetLength( Result, lLen ); CloseHandle( lProcH ); end; procedure TForm1.tmrTimer(Sender: TObject); begin Caption := GetProcNameByHWND( WindowFromPoint( Mouse.CursorPos ) ); end; |
Сообщ.
#6
,
|
|
|
Цитата LeoTon @ Причём специально, чтобы проги не шли под WinXP. GetProcessHandleFromHwnd -- принимает хендел окна. НО это появилось только в Vista. |
Сообщ.
#7
,
|
|
|
Цитата ors_archangel @ Причём специально, чтобы проги не шли под WinXP. GetWindowThreadProcessId даст PID процесса, по которому через NtQueryInformationProcess можно получить Handle процесса. Это и делает пресловутый GetProcessHandleFromHwnd чтоб проги не шли под WinXP |
Сообщ.
#8
,
|
|
|
Цитата Kuk@ @ при нажатии на кнопку в моей программе развернуть эту программу... Проблема в этом, что в той программе несколько окон и я не могу точно определить какое окно в данный момент открыта GetWindowThreadProcessId - получаем ThreadID EnumThreadWindows - перечисляем окна полученного ThreadID, где и решаем, какое окно развернуть. |