delphi – 检测Skype是处于“紧凑视图”还是“默认视图”

delphi – 检测Skype是处于“紧凑视图”还是“默认视图”,第1张

概述我的应用程序运行的方式由Skype的查看模式决定,因为我的应用程序正在查找类TConversationWindow的窗口,如果在默认视图中是tSkMainForm的子项,并且如果在Compact View中,它不是孩子of tSkMainForm. 这是我试图做的: Function IsCompactView:Boolean;Var Wnd : Hwnd;Begin Result := 我的应用程序运行的方式由Skype的查看模式决定,因为我的应用程序正在查找类TConversationWindow的窗口,如果在默认视图中是tSkMainForm的子项,并且如果在Compact VIEw中,它不是孩子of 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的子级,它始终包含一些文本.它按预期工作.

现在解决实际问题:每当用户在2个视图之间切换时,顶级TConversationForm都不会“刷新”.它们消失得很好,但是为了让它再次出现在tSkMainForm的孩子身上(所以Winspector Spy中的变化是可见的),你必须在Skype中选择它,我不能依赖用户这样做.

万一你不知道,这是两个视图之间的区别:

紧凑的视图

默认视图

如果您需要更多信息,请告诉我,谢谢!

解决方法 而不是使用windows方法检测Skype是否处于“压缩视图”或“默认视图”中,而是尝试读取存储这些设置的config.xml文件,并通过Skype“实时”更新.此文件位于

%AppData%\Skype\<your-skype-user-name>

例如,在windows 7中,这是位置

C:\Users\<your windows user>\AppData\Roaming\Skype\<your-skype-user-name>

在这个文件里面存在一个名为MultiWindowMode的条目

这是MultiWindowMode的Xpath位置

/config/UI/General/MultiWindowMode'

对于“精简视图”,此条目的值为“1”,对于“默认视图”,该条目的值为“0”

检查此演示,该演示使用XPath来解析文件并读取MultiWindowMode的值.

{$APPTYPE CONSolE}uses  ComObj,ActiveX,Variants,SysUtils;function SkypeISCompactVIEw(const Settingsfile : string) : Boolean;var   XmlDoc      : oleVariant;   Node        : oleVariant;begin  Result:=False;   if fileExists(Settingsfile) then   begin     XmlDoc       := CreateoleObject('Msxml2.DOMdocument.6.0');     try       XmlDoc.Async := False;       XmlDoc.Load(Settingsfile);       XmlDoc.SetProperty('SelectionLanguage','XPath');        if (XmlDoc.parseError.errorCode <> 0) then         raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);       Node  :=XmlDoc.selectSingleNode('/config/UI/General/MultiWindowMode');       if not VarIsClear(Node) then        Result:=Node.text='1';     finally       XmlDoc:=Unassigned;     end;   end;end;begin try    CoInitialize(nil);    try      Writeln(BoolToStr(SkypeISCompactVIEw('C:\Users\<your windows user>\AppData\Roaming\Skype\<skype user>\config.xml'),True));    except      on E:Exception do      begin          Writeln(E.Classname,':',E.Message);      end;    end; finally      CoUninitialize; end; Readln;end.
总结

以上是内存溢出为你收集整理的delphi – 检测Skype是处于“紧凑视图”还是“默认视图”全部内容,希望文章能够帮你解决delphi – 检测Skype是处于“紧凑视图”还是“默认视图”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1216205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存