我的应用程序的运行方式由 Skype 的视图模式决定,因为我的应用程序正在寻找 class 的窗口TConversationWindow
,如果在 Default View 中是 的子级tSkMainForm
,如果在 Compact View 中,它不是 .的子级tSkMainForm
。
这是我试图做的:
Function IsCompactView:Boolean;
Var
Wnd : Hwnd;
Begin
Result := True;
Wnd := FindWindow('TConversationForm',nil);
if Wnd <> 0 then
begin
Wnd := GetParent(Wnd);
// Custom function that grabs the Window Text
if GetHandleText(Wnd) <> '' then
Result := False;
end;
End;
TConversationForm
上面的函数将通过检查其父级是否有文本来查找顶层(除非我弄错了 - 没有窗口父级的窗口) 。如果 Skype 处于默认视图中,则TConversationForm
' 是 的子级tSkMainForm
,其中始终包含一些文本。它按预期工作。
现在解决实际问题:每当用户在两个视图之间切换时,顶级的TConversationForm
's 都不会“刷新”。它们消失得很好,但是为了让它再次显示为子项(因此更改在Winspector SpytSkMainForm
中可见),您必须在 Skype 中选择它,我不能依赖用户来执行此操作。
如果您不知道,以下是 2 个视图之间的区别:
紧凑视图
默认视图
如果您需要更多信息,请告诉我,谢谢!