高分相送~~~只求一个小小的解决办法 在Server Application里面如何得到当前的用户名? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 GetUserName不行的,在一个服务程序里面读出来的是SYSTEM 就是当前登陆的用户名。我试过了,GetUserName 和 WNetGetUser读出来的是进程的用户名。 不要用上面的两个函数用NetWkstaUserEnum(如果没有lm.h对应的pas,可以到jedi上下载)var wkup: PWkstaUserInfo0; //wkup: WKSTA_USER_INFO_0; entireread: dword; totalentry: dword; resumehandle: dword;begin NetWkstaUserEnum(nil,0,@wkup,256,entireread,totalentry,@resumehandle); showmessage(wkup^.wkui0_username);end; 呵呵去jedi(www.delphi-jedi.org)下载或者直接从netapi32.dll里面引用不过结构体也需要重新定义 呵呵其实说的已经很清楚了type PWkstaUserInfo0 = ^TWkstaUserInfo0; TWkstaUserInfo0 = record wkui0_username: LPWSTR; end; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function NetWkstaUserEnum(servername: LPWSTR; level: DWORD; bufptr: Pointer; prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD; resumehandle: PDWORD): Integer; stdcall;external 'netapi32.dll';var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var wkup: PWkstaUserInfo0; //wkup: WKSTA_USER_INFO_0; entireread: dword; totalentry: dword; resumehandle: dword; buf: pchar; i: integer; dbuf: pchar;begin NetWkstaUserEnum(nil,0,@wkup,128,entireread,totalentry,@resumehandle); showmessage(wkup^.wkui0_username);end; 刚刚我参考了一下资料,自己已经做好了:function GetCurrentUser: String;type WKSTA_USER_INFO_0 = record wkui0_username: PWideChar; end; PWKSTA_USER_INFO_0 = ^WKSTA_USER_INFO_0;var wkup: PWKSTA_USER_INFO_0; Info: Pointer; entireread: PDWORD; totalentry: PDWORD; resumehandle: PDWORD;begin NetWkstaUserEnum(nil,0,Info,256,entireread,totalentry,resumehandle); wkup := PWKSTA_USER_INFO_0(Info); Result := wkup^.wkui0_usernameend;但是这个函数不能连续使用,否则报错,解决方法是把那些变量定义为全局的。 而且刚刚试验了一下,NetWkstaUserEnum只能用于Windows2000,在XP下返回的是COMPUTERLOCKERT$估计是被机器锁定的意思,还有其他办法吗?我的本意是要在一个服务进程里面取得当前登陆系统用户的名字。我试过好多办法都不行。 用delphi读出注册表的当前用户名即可 呵呵,这样吧.用服务进程注入一个线程到Explorer.exe中.http://www.csdn.net/develop/Read_Article.asp?Id=21079远程线程用GetUserName得到用户名,再用消息传给服务进程.. 呵呵,这样吧.用服务进程注入一个线程到Explorer.exe中.http://www.csdn.net/develop/Read_Article.asp?Id=21079远程线程用GetUserName得到用户名,再用消息传给服务进程..//////////////////////////////////////这个方法只能读取单用户登陆的环境,如果换了XP这种可以同时有几个用户登陆的话,就不行了 获得listview中被选中的值 请问如何显示文件夹,或者用什么控件,或使用TreeView时用什么算法 能不能在拖动DBGIRD的列的时候,让一个EDIT或者LABEL控件跟着列的宽度变化?高手帮忙 请教各位大虾 按钮的按键问题 什么地方有DELPHI下载? delphi中一个用SQL语添加数据的问题? 一个简单的EDIT问题 紧急!为什么装不上ADOExpress Update Pack 2? 如何完全删除控件? 555,自从装了delphi6,电脑就没消停过。。。有个delphi32.exe的CPU占用率老是到100% 又是菜鸟问题?
用NetWkstaUserEnum(如果没有lm.h对应的pas,可以到jedi上下载)
var
wkup: PWkstaUserInfo0;
//wkup: WKSTA_USER_INFO_0;
entireread: dword;
totalentry: dword;
resumehandle: dword;
begin
NetWkstaUserEnum(nil,0,@wkup,256,entireread,totalentry,@resumehandle);
showmessage(wkup^.wkui0_username);
end;
去jedi(www.delphi-jedi.org)下载
或者直接从netapi32.dll里面引用
不过结构体也需要重新定义
其实说的已经很清楚了
type
PWkstaUserInfo0 = ^TWkstaUserInfo0;
TWkstaUserInfo0 = record
wkui0_username: LPWSTR;
end; TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function NetWkstaUserEnum(servername: LPWSTR; level: DWORD; bufptr: Pointer;
prefmaxlen: DWORD; var entriesread: DWORD; var totalentries: DWORD;
resumehandle: PDWORD): Integer; stdcall;external 'netapi32.dll';var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
wkup: PWkstaUserInfo0;
//wkup: WKSTA_USER_INFO_0;
entireread: dword;
totalentry: dword;
resumehandle: dword;
buf: pchar;
i: integer;
dbuf: pchar;
begin
NetWkstaUserEnum(nil,0,@wkup,128,entireread,totalentry,@resumehandle);
showmessage(wkup^.wkui0_username);
end;
function GetCurrentUser: String;
type
WKSTA_USER_INFO_0 = record
wkui0_username: PWideChar;
end;
PWKSTA_USER_INFO_0 = ^WKSTA_USER_INFO_0;
var
wkup: PWKSTA_USER_INFO_0;
Info: Pointer;
entireread: PDWORD;
totalentry: PDWORD;
resumehandle: PDWORD;
begin
NetWkstaUserEnum(nil,0,Info,256,entireread,totalentry,resumehandle);
wkup := PWKSTA_USER_INFO_0(Info);
Result := wkup^.wkui0_username
end;但是这个函数不能连续使用,否则报错,解决方法是把那些变量定义为全局的。
http://www.csdn.net/develop/Read_Article.asp?Id=21079
远程线程用GetUserName得到用户名,再用消息传给服务进程..
http://www.csdn.net/develop/Read_Article.asp?Id=21079
远程线程用GetUserName得到用户名,再用消息传给服务进程..//////////////////////////////////////这个方法只能读取单用户登陆的环境,如果换了XP这种可以同时有几个用户登陆的话,就不行了