2012-05-08 51 views
0

我正在使用NetQueryDisplayInformation(我已經嘗試NetUserEnum函數)來獲取本地計算機上的用戶帳戶集。我可以通過這種方式獲得所有帳戶 - 但我只想要與真實人類相關的帳戶,而不是用於軟件更新的隱藏帳戶。如何獲取Windows在登錄屏幕上顯示的用戶帳戶列表?

在閱讀有關結構的the MSDN documentationsimilar Stack questions之後,我看不到任何可以允許我篩選我需要的帳戶的東西。

理想的情況下,會有人有一個簡單,可靠的解決方案:

  1. 不使用無證註冊表項
  2. 不依賴於磁盤上列舉的用戶文件夾
  3. 我不涉及要嘗試建立非實時用戶的詳盡清單佔
  4. 由於技術原因,WMI是不是一種選擇

有何想法?

[稍後] 得到答案,但不在這裏 - 只列舉每個用戶的組。 「真人」帳戶將成爲管理員,高級用戶,用戶,訪客中的一位或多位的成員。

+0

是該信息不具備的usri1_flags領域? – Luke

+0

閱讀文檔,嘗試了幾個位的組合,但沒有任何工作。仍然有太多的用戶。 –

+0

希望這可以幫助您找到正確的位置...... HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ SpecialAccounts \ UserList \ 該註冊表項是一個DWORD。如果它是0,用戶將不會出現在歡迎屏幕 – JimR

回答

0

您可能可以使用NetUserEnum函數。它應該返回系統上所有用戶帳戶的列表。我沒有親自使用這個函數,所以我不能提供任何壯觀的代碼示例,但MSDN信息聽起來像你正在尋找的。

+0

已經嘗試過,並且也非常類似NetQueryDisplayInformation。他們列出所有用戶,但不幸的是,實際上在Windows登錄屏幕上顯示的用戶組只是這些方法的一部分。從本質上講,我有太多的數據,而我試圖將其簡化爲「真正的人」用戶。 –

+1

@EdwardDixon:一些人類用戶選擇不在歡迎屏幕上列出... – Anders

+0

好點@Anders;並不擔心這一點。我主要關心的是,不要通過向用戶顯示不熟悉的用戶名(例如「autoupdater」等)來混淆用戶。 –

0

您可以使用NetQueryDisplayInformation API,結合按位檢查用戶信息標誌。

我有完全一樣的要求,所以我做了示例代碼(從MSDN GROUP查詢修改)。

我使用的用戶標誌是:在

UF_NORMAL_ACCOUNT 
UF_ACCOUNTDISABLE 
UF_PASSWD_NOTREQD ---> this ensure we get Human account, Human account always requires password. 

工作代碼:http://www.cceye.com/list-system-normal-user-account-only/

相關問題