2012-02-10 41 views
6

Tôi biết bạn có thể truy xuất tên người dùng bằng thứ gì đó như System.getProperty("user.name") nhưng tôi đang tìm cách truy xuất tên và họ đầu tiên và họ là của người dùng hiện tại.Lấy tên và họ của người dùng Windows hiện tại?

Có thư viện Java gốc nào thực hiện việc này không? Hay bạn phải cắm vào Windows API? Hoặc có thể bạn phải kéo nó từ Active Directory? Điều này có vẻ tương đối dễ dàng with .NET nhưng tôi không thể tìm thấy một cách để làm điều đó trong Java.

+0

Tôi không có câu trả lời nhưng bạn có thể nhìn vào [JNA] (https://github.com/twall/jna) và xem điều đó có giúp ích gì không. –

+0

Bạn làm như thế nào với .NET? Nếu đó là một cuộc gọi hệ thống, nó có thể được thực hiện bằng Java với JNA. –

+0

Đã thêm liên kết vào cách thực hiện trong .NET. Xem xét chỉ cần gõ vào ActiveDirectory, nhưng tôi nghĩ chắc chắn rằng nó sẽ đơn giản hơn. – aus

Trả lời

5

Như Brian Roach đã đề xuất trong các nhận xét, nó khá thẳng về phía trước để làm điều này với JNA, vì nó có a built-in wrapper for Secur32 kết thúc tốt đẹp GetUsernameEx() function (cuối cùng là cuộc gọi hệ thống được bao bọc bởi thư viện .NET bạn liên kết ở trên).

Sử dụng sẽ là một cái gì đó như thế này:

import com.sun.jna.ptr.IntByReference; 
import com.sun.jna.platform.win32.Secur32; 

// ...  

char[] name = new char[100]; // or whatever is appropriate 
Secur32.INSTANCE.GetUserNameEx(
    Secur32.EXTENDED_NAME_FORMAT.NameDisplay, 
    name, 
    new IntByReference(name.length) 
); 

String fullName = new String(name).trim(); 

Lưu ý rằng điều này sẽ cung cấp cho bạn tên đầy đủ trong các định dạng tương tự như bạn muốn nhận được gõ net user %USERNAME% /domain tại dấu nhắc lệnh.

+0

Tôi đã nóng trên đường mòn này và bạn đánh bại tôi với nó. Cảm ơn! – aus

+0

Bạn vừa lưu tôi! Cảm ơn rất nhiều. – Apurv

1

Hoặc chỉ,

String fullName = Secur32Util.getUserNameEx(Secur32.EXTENDED_NAME_FORMAT.NameDisplay); 

Nhưng nó là như nhau, là câu trả lời trên

Các vấn đề liên quan