Когда Skype находится в Вид по умолчанию , TConversationWindow
становятся дочерними элементами tSkMainForm
Окна.
У меня проблемы с определением, какой TConversationWindow
активен - однако он не похож на интерфейс MDI - только one TConversationWindow
виден, как если бы это была Tab / Page .
Когда я делаю GetForegroundWindow
, возвращается дескриптор MainForm в Skype (tSkMainForm
). Есть ли способ, которым я могу получить передний план TConversationWindow
в Skype?
На этот вопрос у меня есть скриншоты просмотра по умолчанию в Skype, если вам это нужно. :)
РЕДАКТИРОВАТЬ : Вот скриншот Wiepepector Hierachy:
РЕДАКТИРОВАТЬ2 : Я пытался пройти через окна, как это:
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;
Вышеуказанное должно найти видимое окно, однако, когда я отлаживаю его, оно никогда не входит в конец начала в цикле while, а Label1 отображает "TChromeMenu - ChromeToolbar". Когда я удаляю проверку IsWindowVisible, он по крайней мере находит TConversationForm. Что я делаю не так?
EDIT3 : Поместив проверку IsWindowVisible и getClassName в цикл и прервав ее, когда мне удалось, я смог это сделать. :)