每当 Skype 处于Default View中时,TConversationWindow
' 就成为tSkMainForm
Window 的子级。
我在找出哪个TConversationWindow
处于活动状态时遇到问题 - 但它不像 MDI 界面 - 只有一个 TConversationWindow
是可见的,就像它是Tab/Page一样。
当我这样做时GetForegroundWindow
,将返回 Skype 的 MainForm 句柄 ( tSkMainForm
)。有什么方法可以让我TConversationWindow
在 Skype 中获得前台?
我的这个问题有 Skype 默认视图的截图,如果你需要的话。:)
编辑:这是 Winspector Hierachy 的屏幕截图:
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”。当我删除 IsWindowVisible 检查时,它至少会找到一个 TConversationForm。我究竟做错了什么?
EDIT3:通过将 IsWindowVisible 和 getClassName 检查放在循环内,并在为真时中断,我设法做到了。:)