获取前景CHILD窗口

时间:2011-07-01 12:26:34

标签: delphi skype foreground window-handles

当Skype处于默认视图时,TConversationWindow将成为tSkMainForm窗口的子项。

我在查找哪个TConversationWindow处于活动状态时遇到问题 - 但它不像MDI界面 - 只有一个 TConversationWindow可见,就好像它是标签/页

当我执行GetForegroundWindow时,将返回Skype的MainForm句柄(tSkMainForm)。有什么方法可以让我在Skype中获得前景TConversationWindow吗?

如果你需要,我的This question有Skype默认视图的截图。 :)

编辑:以下是Winspector Hierachy的截图:

enter image description here

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;

上面应该找到可见窗口,但是当我调试它时,它永远不会进入While循环中的Begin End,而Label1会显示“TChromeMenu - ChromeToolbar”。当我删除I​​sWindowVisible检查时,它至少会找到一个TConversationForm。我做错了什么?

EDIT3 :通过在循环中放置IsWindowVisible和getClassName检查,并在true时断开,我设法做到了。 :)

1 个答案:

答案 0 :(得分:0)

通过在循环中放置IsWindowVisible和getClassName检查,并在true时中断,我设法做到了。 :)