5,927
社区成员




{问题:感觉好离奇,在Delphi2009运行后,结果是Hello World,该如何解决呢?}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetComputerNameX: String ;
var
i: Cardinal;
cBuff: PChar;
begin
GetMem(cBuff, 128);
i := 128;
GetComputerName(cBuff, i);
Result := StrPas(cBuff);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := GetComputerNameX;
end;
end.
我真是汗啊.刚刚搜了注册表,里面的ComputerName数据值既然是Hello world
{回hongqi162,不能跳转到函数申明或实现的地方去}
{僵哥,我的机器名不是Hello Word,如果有类似于木马的API Hook在开玩笑的话,那么我以下这样是可以得到机器名的,}
{难道真的有木马,应该没有可能啊,但你也是Delphi2009的啊}
procedure TForm1.FormCreate(Sender: TObject);
var
Buffer:Array[1..32] of Char;
WSData:TWSAdata;
Host:PHostEnt;
begin
if WSAstartup(2,WSData)<>0 then
begin
end;
if GetHostName(@Buffer[1],32)<>0 then
begin
end;
Host := GetHostByName(@Buffer[1]);
begin
Edit1.Text := Host.h_name;
end;
end;
function GetComputerName(lpBuffer: PChar; var nSize: DWORD): BOOL; stdcall; external 'kernel32.dll' name 'GetComputerNameW';
function GetComputerNameX: String ;
var
iLen: Cardinal;
begin
iLen := MAX_PATH;
SetLength(Result, iLen);
if Not GetComputerName( PChar(Result), iLen) then raise Exception.Create('GetComputerName执行失败!');
SetLength(Result, iLen);
end;
{谢谢僵哥,谢谢genispan. 是的,在Delphi7下是正常的,但我是在Delphi2009下出现这样的情况,}
{同时也换了僵哥的函数,问题还是依然存在.}
function GetComputerNameX: String ;
var
iLen: Cardinal;
begin
iLen := MAX_PATH;
SetLength(Result, iLen);
if Not GetComputerName( PChar(Result), iLen) then raise Exception.Create('GetComputerName执行失败!');
SetLength(Result, iLen);
end;