一种检测windows系统运行模式的方法及电子设备与流程

文档序号:15998645发布日期:2018-11-20 19:09阅读:257来源:国知局

本公开涉及一种检测windows系统运行模式的方法及电子设备。



背景技术:

随着计算机技术的发展,windows系统也发生了巨大的变革,最为明显的是,在windows 10系统中,新增了平板模式。平板模式用于平板电脑或带有触摸屏的设备,尤其对于笔记本平板二合一的超级本具有重要作用。

而客户端软件在开发的过程中,由于没有对windows 10系统的平板模式下运行做兼容性设计,造成客户端软件在windows 10系统的平板模式下运行时,会出现客户端软件的程序功能显示异常、错误等问题。因此,为了使客户端软件在windows 10系统的平板模式下能正常运行,客户端软件需要再运行过程中判断其软件是否运行在windows10系统的平板模式下,以便客户端软件作出相应的程序逻辑处理来兼容windows 10系统的平板模式,但是,目前暂无检测windows 10系统运行在平板模式下的方法。由于windows 10系统没有公开提供检测客户端软件运行在平板模式下的接口,所以需要通过未公开的方法来检测客户端软件是否运行在windows 10平板模式,因此,本公开主要通过windows通用平台开发接口(UWP应用开发)获取windows 10系统的运行模式,设计了一种检测windows系统运行模式的方法,能够正确检测到客户端软件是否运行在windows 10系统的平板模式,最终有效避免客户端软件在windows 10系统平板模式下运行异常。



技术实现要素:

本公开鉴于上述问题,提供了一种检测windows系统运行模式的方法及电子设备,能够有效地检测到客户端软件是否运行在平板模式下,以便客户端软件进行后续处理,进而避免程序显示异常、错误等问题。

本公开的一个方面提供了一种检测windows系统运行模式的方法,包括:加载动态链接库,获取动态链接库函数的入口地址,创建第一组件对象模型COM对象,创建所述第一组件对象模型COM对象的全局唯一标识符GUID,其中,所述第一组件对象模型COM对象包括所述windows系统的运行模式,并且,该第一组件对象模型COM对象在windows系统中不可供外部调用;根据所述全局唯一标识符GUID,获取所述第一组件对象模型COM对象中的内容,并根据获取的内容创建第二组件对象模型COM对象,其中,所述第二组件对象模型COM对象在windows系统中可供外部调用;调用所述第二组件对象模型COM对象中的GetForWindow接口,获取windows系统的运行模式,判断所述运行模式的种类。

可选的,创建第一组件对象模型COM对象,还包括:调用LoadLibrary函数加载combass.dll动态库;调用GetProcAddress函数获取RoGetActivationFactory未公开应用程序编程接口的函数指针。

可选的,创建第二组件对象模型COM对象,还包括:创建所述第二组件对象模型COM对象的全局唯一标识符GUID;调用所述第一组件对象模型COM对象的RoGetActivationFactory接口,获取所述第一组件对象模型COM对象中的内容。

可选的,所述获取windows系统的运行模式,判断所述运行模式的种类,还包括:获取所述第二组件对象模型COM对象的接口返回的类型对象;获取所述类型对象的返回值;根据所述返回值判断windows系统运行模式。

可选的,所述运行模式为平板运行模式,所述方法还包括:如果所述返回值与windows系统定义的表示平板模式的值相等,则windows系统运行模式为平板模式;如果所述返回值与windows系统定义的表示平板模式的值不相等,则windows系统运行模式为桌面模式。

可选的,所述第二组件对象模型COM对象的类型为IUIViewSettingsInterop类型。

可选的,所述windows系统定义的表示平板模式的值为枚举值UserInteractionMode_Toch。

本公开另一方面还提供了一种检测windows系统运行模式的电子设备,包括:处理器;存储器,其存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行上述检测windows系统运行模式的方法。

本公开另一方面还提供了一种检测windows系统运行模式的系统,该检测windows系统运行模式的系统包括:加载模块,用于加载动态链接库,获取动态链接库函数的入口地址;第一创建模块,用于创建第一组件对象模型COM对象,其中,所述第一组件对象模型COM对象包括windows系统的运行模式,并且,该第一组件对象模型COM对象在windows系统中不可供外部调用;第二创建模块,根据获取的第一组件对象模型COM对象的内容,创建第二组件对象模型COM对象,并且,该第二组件对象模型COM对象在windows系统中可供外部调用;获取模块,调用第二组件对象模型COM对象中的GetForWindow接口,获取windows系统的运行模式;判断模块,用于判断当前运行模式是否为平板运行模式。

本公开另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述检测windows系统运行模式的方法。

附图说明

图1示意性示出了本公开实施例提供的检测windows系统运行模式方法的流程图。

图2示意性示出了根据本公开的检测windows系统运行模式的电子设备的框图。

图3示意性示出了根据本公开实施例的windows系统运行模式检测系统的框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“A或B”应当被理解为包括“A”或“B”、或“A和B”的可能性。

附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。

因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。

图1示意性示出了本公开实施例提供的检测windows系统运行模式方法的流程图。

如图1所示,方法包括如下操作:

S1:加载动态库,获取接口函数指针。

在上述操作S1中,由于windows系统没有公开提供检测其运行模式的应用程序编程接口,所以需要通过未公开的应用程序编程接口来检测windows系统的运行模式,本实施例主要是通过windows通用平台开发接口(Universal Windows Platform,UWP)来获取windows系统的运行模式。

首先,因为需要获取的应用程序编程接口(Application Programming Interface,API)在windows系统中没有公开,所以需要动态加载动态链接库文件(Dynamic Link Library,DLL)的模块获取该应用程序编程接口的函数指针。调用LoadLibrary函数加载combase.dll动态链接库文件,例如,执行function LoadLibrary(combase:PChar):Thandle;表示加载由参数combase指定的DLL文件,如果该LoadLibrary函数操作成功,将返回装载由参数combase指定的DLL库模块的实例句柄,如果该LoadLibrary函数操作失败,将返回一个错误代码。

然后,调用GetProcAddress函数获取RoGetActivationFactory未公开应用程序编程接口的函数指针,例如,执行function GetProcAddress(Module:Thandle;ProcName:RoGetActivationFactory):TfarProc;参数Module包含LoadLibrary返回的DLL库模块的实例句柄,参数ProcName包含函数接口指针,如果该GetProcAddress函数操作成功,则返回DLL中由参数ProcName指定的RoGetActivationFactory未公开应用程序编程接口的函数指针,如果该GetProcAddress函数操作失败,返回nil。

S2:创建第一组件对象模型COM对象及其全局唯一标识符GUID。

在上述操作S2中,首先,根据获取的RoGetActivationFactory未公开应用程序编程接口的函数指针,调用该RoGetActivationFactory未公开应用程序编程接口,获取windows系统的运行模式,创建windows系统运行时类库的COM对象,即第一组件对象模型COM对象。其中,该第一组件对象模型COM对象包括windows系统的运行模式,并且,该第一组件对象模型COM对象在windows系统中不可供外部调用。

然后,调用GetProcAddress函数获取WindowsCreateString未公开应用程序编程接口的函数指针,调用该WindowsCreateString未公开应用程序编程接口,创建所述第一组件对象模型COM对象的全局唯一标识符(Globally Unique Identifier,GUID)。其中,全局唯一标识符GUID是一种二进制长度为128位的数字标识符,其格式为“XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX”,其中每个X是0-9或a-f范围内的一个长度为4位的十六进制数,例如:6F9619FF-8E86-E011-B42E-00C04FC964FF即为有效的全局唯一标识符GUID值。

S3:创建第二组件对象模型COM对象。

在上述操作S3中,首先,通过第一组件对象模型COM对象的全局唯一标识符GUID,调用操作S1中得到的RoGetActivationFactory函数接口,获取第一组件对象模型COM对象的类和接口,获取第一组件对象模型COM对象中包含windows系统运行模式的信息。

然后,调用操作S2得到的WindowsCreateString函数创建一个view_settings_guid对象,该view_settings_guid对象保存了COM对象的GUID,其格式为“XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX”,其中每个X是0-9或a-f范围内的一个4位十六进制数。

进一步的,根据view_settings_guid对象保存的全局唯一标识符GUID,创建一个IUIViewSettingsInterop类型的COM对象,即第二组件对象模型COM对象。该第二组件对象模型COM模型的全局唯一标识符GUID即为view_settings_guid对象保存的全局唯一标识符GUID,该第二组件对象模型COM对象中包含windows系统运行模式的信息,并且,该第二组件对象模型COM对象是windwos运行时可以供外部调用的、与系统设置交互的应用程序编程接口。

S4:获取windows系统的运行模式。

在上述操作S4中,首先,通过第二组件对象模型COM对象的全局唯一标识符GUID,调用操作S3中得到的IUIViewSettingsInterop对象的GetForWindow接口,获取第二组件对象模型COM对象的类和接口,该接口返回一个IUIViewSettings类型对象,该IUIViewSettings类型对象包含windows系统运行模式的信息。

然后,调用上述IUIViewSettings对象的get_UserInteractionMode接口,获取当前windows系统的运行模式,该get_UserInteractionMode接口会返回一个枚举类型的返回值,不同的枚举类型返回值代表当前windows系统不同的运行模式。

S5:判断当前运行模式是否为平板模式。

在上述操作S5中,根据操作S4得到的当前windows系统运行模式的枚举值,和windows系统定义的表示平板模式的枚举值UserInteractionMode_Touch相比较,如果S4得到的当前windows系统运行模式的枚举值与windows系统定义的表示平板模式的枚举值UserInteractionMode_Touch相等,当前windows运行在平板模式,如果S4得到的当前windows系统运行模式的枚举值与windows系统定义的表示平板模式的枚举值UserInteractionMode_Touch不相等,则当前windows运行在桌面模式。

按照以上操作,可以正确的检测到客户端软件是否运行在windows的平板模式下。

如图2所示,电子设备200包括处理器210、计算机可读存储介质220。该电子设备200可以执行上面参考图1描述的方法,以进行消息处理。

具体地,处理器210例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器210还可以包括用于缓存用途的板载存储器。处理器210可以是用于执行参考图1描述的根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

计算机可读存储介质220,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。

计算机可读存储介质220可以包括计算机程序221,该计算机程序221可以包括代码/计算机可执行指令,其在由处理器210执行时使得处理器210执行例如上面结合图1所描述的方法流程及其任何变形。

计算机程序221可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序221中的代码可以包括一个或多个程序模块,例如包括221A、模块221B、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器210执行时,使得处理器210可以执行例如上面结合图1所描述的方法流程及其任何变形。

图3示意性示出了根据本公开实施例的windows系统运行模式检测系统的框图。

如图3所示,windows系统运行模式检测系统300包括加载模块310、第一创建模块320、第二创建模块330、获取模块340及判断模块350。

具体地,加载模块310,加载动态库,获取接口函数指针。调用LoadLibrary函数加载combase.dll动态链接库文件,调用GetProcAddress函数获取RoGetActivationFactory未公开应用程序编程接口的函数指针。

第一创建模块320,创建第一组件对象模型COM对象及其全局唯一标识符GUID。调用RoGetActivationFactory未公开应用程序编程接口,获取windows系统的运行模式,创建第一组件对象模型COM对象。调用GetProcAddress函数获取WindowsCreateString未公开应用程序编程接口的函数指针,调用该WindowsCreateString未公开应用程序编程接口,创建所述第一组件对象模型COM对象的全局唯一标识符GUID。

第二创建模块330,创建第二组件对象模型COM对象。通过第一组件对象模型COM对象的全局唯一标识符GUID,调用RoGetActivationFactory函数接口,获取第一组件对象模型COM对象的类和接口,获取第一组件对象模型COM对象中包含windows系统运行模式的信息。然后,调用WindowsCreateString函数创建一个view_settings_guid对象,根据view_settings_guid对象保存的全局唯一标识符GUID,创建一个IUIViewSettingsInterop类型的第二组件对象模型COM对象。

获取模块340,获取windows系统的运行模式。通过第二组件对象模型COM对象的全局唯一标识符GUID,调用IUIViewSettingsInterop对象的GetForWindow接口,获取第二组件对象模型COM对象的类和接口,该接口返回一个IUIViewSettings类型对象,该IUIViewSettings类型对象包含windows系统运行模式的信息。然后,调用上述IUIViewSettings对象的get_UserInteractionMode接口,获取当前windows系统的运行模式,该get_UserInteractionMode接口会返回一个枚举类型的返回值,不同的枚举类型返回值代表当前windows系统不同的运行模式。

判断模块350,判断当前运行模式是否为平板模式。根据得到的当前windows系统运行模式的枚举值,和windows系统定义的表示平板模式的枚举值UserInteractionMode_Touch相比较,如果这两个枚举值相等,当前windows运行在平板模式,如果这两个枚举值不相等,则当前windows运行在桌面模式。

可以理解的是,加载模块310、第一创建模块320、第二创建模块330、获取模块340及判断模块350可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,加载模块310、第一创建模块320、第二创建模块330、获取模块340及判断模块350中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以以对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。或者,加载模块310、第一创建模块320、第二创建模块330、获取模块340及判断模块350中的至少一个可以至少被部分地实现为计算机程序模块,当该程序被计算机运行时,可以执行相应模块的功能。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个程序段或代码的一部分,上述程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1