我知道您可以使用类似System.getProperty("user.name")
的内容检索用户名,但我正在寻找一种方法来检索当前用户的名字和/或姓名 。
是否有本地Java库可以执行此操作?或者你必须插入Windows API?或者你可能必须从Active Directory中提取它?这似乎相对容易with .NET,但我找不到用Java做的方法。
答案 0 :(得分:7)
正如Brian Roach在评论中所建议的那样,使用JNA执行此操作非常简单,因为它有a built-in wrapper for Secur32包装GetUsernameEx() function(最终由.NET包装的系统调用)您链接到上面的图书馆。)
使用将是这样的:
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();
请注意,这将为您提供与在命令提示符下键入net user %USERNAME% /domain
的格式相同的全名。
答案 1 :(得分:3)
或者只是,
String fullName = Secur32Util.getUserNameEx(Secur32.EXTENDED_NAME_FORMAT.NameDisplay);
但它和上面的答案是一样的