为什么getcomputername API函数有时候出错(100分)

  • 主题发起人 主题发起人 牛龙
  • 开始时间 开始时间

牛龙

Unregistered / Unconfirmed
GUEST, unregistred user!
我编了一个小程序,点一次按钮调用一次getcomputername
但是有时就得不到计算机的名字,百思不得其解,怀疑是windows本身有问题
 
procedure TForm1.Button1Click(Sender: TObject);
var
leng:integer;
pss:array[0..20] of char;
ss:string;
begin
GetComputername(pss,leng);
ss:=pss;
edit1.text:=ss;
end;
一直按button1,有时候就不对
 
没有给leng付初值?
 
好象有个MAX_COMPUTER_NAME之类的定义吧?
VAR
...
pss:array[0..MAX_COMPUTER_NAME - 1] of char;
BEGIN
...
leng := MAX_COMPUTER_NAME; //63?
...
 
这函数在95和NT上都应该行吧?
 
procedure TForm1.Button1Click(Sender: Tobject);
var
ComputerName: array[0..MAX_COMPUTERNAME_LENGTH+1] of char;
Size: Integer;
begin
Size := MAX_COMPUTERNAME_LENGTH+1;

if GetComputerName(ComputerName, Size) then
Edit1.Text := StrPas(Computername)
else
Showmessage('Computer Name Not Found');
end;
 
多少都无所谓,关键要足够大.
 
我也遇过
在nt下很正常,在95下得不到名字
只好从注册表得到:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/ComputerName/ComputerName/ComputerName
 
使用不正确
var
username: array[0..30] of char;
size: dword;
begin
size := sizeof(username);
FillChar(username, Size, ' ');
getusername(username,size); //getcomputername类似
....
 
对就是在NT对,在95或98下不对.
特别是在窗口的oncreate事件中调用getcomputername就出错,具体原因也不知道为什么
 
sunstone是对的,可是到底是因为什么原因呐?
我看msdn的文档中也没说非得有如下操作啊?
size := sizeof(username);
FillChar(username, Size, ' ');
 
是否是传递回的消息丢了?!
>>
 
>>size := sizeof(username);
必须得到username的尺寸
>>FillChar(username, Size, ' ');
必须清空,否则,每次调用得到值不一样
 
同意pipi,此函数好象只给NT作的,我在2000下可以,再9X就只能读注册表
 
接受答案了.
 
后退
顶部