WMI技术介绍和应用——查询桌面信息

本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。

在Windows操作系统中,存在很多Windows Station。而每一个Windows Station又存在一个或者多个Windows Desktop。我们一般所说的桌面只是这些众多桌面中的一个。以下内容将介绍如何使用WMI查询桌面的相关信息。(转载请指明出于breaksoftware的csdn博客)

如何使用WMI枚举所有的桌面?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT * FROM Win32_Desktop" );
    recvnotify.ExcuteFun();

一些字段我会在之后解释,我们先看下Name这个字段。每个桌面都有自己的Name信息。在我当前XP系统中,存在以下桌面的名字:

NT AUTHORITY\SYSTEM

NT AUTHORITY\LOCAL SERVICE

NT AUTHORITY\NETWORK SERVICE

我当前登录的域+用户名(对应名字省略)

.DEFAULT

一般来说,我们会比较关心一般意义上的桌面信息。我们可以通过指定域+用户名的方式获取它的信息:SELECT * FROM Win32_Desktop WHERE NAME = 'Your Login Name'。

如何使用WMI判断指定桌面是否支持ALT+TAB(快速任务切换)?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT CoolSwitch FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

可以见的,我的电脑上是支持ALT+TAB进行切换的。
如何使用WMI查询光标闪烁的时间间隔时间?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT CursorBlinkRate FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();


这个时间是以毫秒为单位的。可以见的,在我这个桌面中光标闪烁的时间间隔是530毫秒。

如何使用WMI判断拖动窗口时,窗口内部也在跟着移动?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT DragFullWindows FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

我们按住非客户区拖动窗口,可能存在两种效果:

1 原窗口还在原来位置,而只有一个空心的框子跟着我们鼠标在拖动。等到我们鼠标松开,窗口才移动过去。这种情况,我们的查询将返回FALSE。


2 原窗口随着鼠标的位置移动而移动。这种情况我们将返回TRUE。

如何使用WMI查询桌面上两个图标之间的距离?

   CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT IconSpacing FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
   recvnotify.ExcuteFun();

可以见得我这个桌面中两个图标之间的间距是43像素,我量了一下,的确如此。


如何使用WMI获取桌面图标下的文字的字体?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT IconTitleFaceName FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

如何使用WMI查询桌面图标下的文字字体大小?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT IconTitleSize FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

注意此处是使用Point为单位的。

如何使用WMI判断是否开启了屏保?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT ScreenSaverActive FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

该字段为TRUE就是启用了屏保。

如何使用WMI获取屏保程序的路径?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT ScreenSaverExecutable FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

如何使用WMI判断从屏保恢复后是否需要输入密码?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT ScreenSaverSecure FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

可见当前桌面中从屏保恢复后不用输入密码。

如何使用WMI获取需要等待多久才开启屏保?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT ScreenSaverTimeout FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

这个时间单位是秒。可以见得当前桌面等待600秒后将进入屏保程序。

如何使用WMI查询桌面的背景图路径?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT Wallpaper FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

如何使用WMI判断桌面背景图是拉伸效果?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT WallpaperStretched FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

可以见的,当前桌面的背景图是拉伸效果。但是如果该值是FALSE,则说明不是拉伸效果,即可能是平铺或者居中。那

如何使用WMI在已知不是拉伸效果的情况下,如何判断是平铺或者居中呢?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT WallpaperTiled FROM Win32_Desktop WHERE Name = 'Your Login Name'" );
    recvnotify.ExcuteFun();

在WallpaperStretched为FALSE的情况下,如果WallpaperTiled为TRUE,则证明当前桌面背景图是平铺的,否则说明是居中的。

更多的信息在Win32_Desktop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值