Всякий раз, когда Skype находится в представлении по умолчанию, TConversationWindow
становятся дочерними элементами tSkMainForm
окна.
У меня возникли проблемы с определением того, какой TConversationWindow
активен, однако это не похоже на интерфейс MDI - виден только один TConversationWindow
, как если бы это была вкладка/страница.
Когда я делаю GetForegroundWindow
, возвращается дескриптор основной формы Skype (tSkMainForm
). Есть ли способ получить передний план TConversationWindow
в Skype?
Этот мой вопрос содержит скриншоты Skype Вид по умолчанию, если он вам нужен. :)
EDIT: вот скриншот иерархии Wspector:
EDIT2: я пытался пройти через окна следующим образом:
procedure TForm1.Button1Click(Sender: TObject);
function GetClassName(Handle: HWND): String;
var
Buffer: array[0..MAX_PATH] of Char;
begin
Windows.GetClassName(Handle, @Buffer, MAX_PATH);
Result := String(Buffer);
end;
Var
Wnd: HWND;
SkypeWnd: HWND;
begin
SkypeWnd := FindWindow('tSkMainForm',nil);
Wnd := GetTopWindow(SkypeWnd);
while (GetClassName(Wnd) <> 'TConversationForm') and (Wnd <> 0) and (not IsWindowVisible(Wnd)) do
begin
Wnd := GetNextWindow(Wnd,GW_HWNDNEXT);
end;
Label1.Caption := GetClassName(Wnd)+' - '+GetHandleText(wnd);
end;
Вышеупомянутое должно найти видимое окно, однако, когда я его отлаживаю, оно никогда не входит в начало конца цикла «Пока», а Label1 отображает «TChromeMenu - ChromeToolbar». Когда я удаляю проверку IsWindowVisible, он по крайней мере находит TConversationForm. Что я делаю неправильно?
EDIT3: поместив проверки IsWindowVisible и getClassName внутри цикла и прервав их, когда они верны, мне удалось это сделать. :)
EnumerateWindows
или FindWindow, чтобы получить его? - person David Heffernan   schedule 01.07.2011FindWindow
здесь тоже не применимо. Лучше всегоGetWindow(.., GW_HWNDFIRST)
колл. - person Premature Optimization   schedule 01.07.2011FindWindow
иFindWindowEx
не возвращают ожидаемоеTConversationWindow
. КакEnumWindows
поможет мне в этой ситуации? @ain - Как бы я это сделал? :) - person Jeff   schedule 01.07.2011tSkMainForm
- person Jeff   schedule 01.07.2011TConversationForm
за раз. :) - person Jeff   schedule 01.07.2011