Способ работы моего приложения определяется режимом просмотра Skype из-за того, что мое приложение ищет окна класса TConversationWindow
, которые, если в режиме просмотра по умолчанию является дочерним элементом tSkMainForm
, а если в Compact Видите, это не ребенок 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
верхнего уровня не «обновляются». Они исчезают в порядке, но для того, чтобы он снова появился как ребенок tSkMainForm
(так что изменение видно в Winspector Spy ), вам нужно выбрать его в Skype, и я не могу полагаться на пользователь, чтобы сделать это.
В случае, если вы не знаете, вот разница между двумя видами:
Компактный вид
Вид по умолчанию
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, спасибо!