Получите окно РЕБЕНКА переднего плана - PullRequest
0 голосов
/ 01 июля 2011

Когда Skype находится в Вид по умолчанию , TConversationWindow становятся дочерними элементами tSkMainForm Окна.

У меня проблемы с определением, какой TConversationWindow активен - однако он не похож на интерфейс MDI - только one TConversationWindow виден, как если бы это была Tab / Page .

Когда я делаю GetForegroundWindow, возвращается дескриптор MainForm в Skype (tSkMainForm). Есть ли способ, которым я могу получить передний план TConversationWindow в Skype?

На этот вопрос у меня есть скриншоты просмотра по умолчанию в Skype, если вам это нужно. :)

РЕДАКТИРОВАТЬ : Вот скриншот Wiepepector Hierachy:

enter image description here

РЕДАКТИРОВАТЬ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 в цикл и прервав ее, когда мне удалось, я смог это сделать. :)

1 Ответ

0 голосов
/ 18 сентября 2012

Поместив проверку IsWindowVisible и getClassName в цикл и прервав значение true, мне удалось это сделать.:)

...