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。
? ? ? ??工程源碼見《WMI技術介紹和應用——WMI概述》結尾。
總結
以上是生活随笔為你收集整理的WMI技术介绍和应用——查询桌面信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WMI技术介绍和应用——查询正在运行的线
- 下一篇: WMI技术介绍和应用——查询环境变量