getcomputername(cpname,namesize)有时不能取得计算机名(100分)

  • 主题发起人 主题发起人 flysand
  • 开始时间 开始时间
F

flysand

Unregistered / Unconfirmed
GUEST, unregistred user!
1、如何用改写一文本文件的某一行?<br>2、用WinApi:getcomputername(cpname,namesize)有时不能取得计算机名<br>&nbsp; procedure gn;<br>&nbsp; var<br>&nbsp; &nbsp; cpname:pchar;<br>&nbsp; &nbsp; namesize:cardinl;<br>&nbsp; begin<br>&nbsp; &nbsp; new(cpname);<br>&nbsp; &nbsp; getcomputername(cpname,namesize);<br>&nbsp; &nbsp; showmessage(strpas(cpname));<br>&nbsp; end;<br>&nbsp; 该过程在一个新test程序中可以正确显示计算机名,但把它加入我<br>已有的程序的Form1create过程中就不能正确显示计算机名,这是为什么?<br>&nbsp;[^]
 
试试这个函数吧<br>function GetNetInfo:string;<br>var<br>&nbsp; &nbsp;Computer : PChar;<br>&nbsp; &nbsp;CSize &nbsp; &nbsp;: DWORD;<br>begin<br>&nbsp; &nbsp;Computer := #0;<br>&nbsp; &nbsp;CSize := MAX_COMPUTERNAME_LENGTH + 1;<br>&nbsp; &nbsp;result:='';<br>&nbsp; &nbsp;try<br>&nbsp; &nbsp; &nbsp; GetMem( Computer, CSize );<br>&nbsp; &nbsp; &nbsp; if Windows.GetComputerName( Computer, CSize ) then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;result := Computer;<br>&nbsp; &nbsp;finally<br>&nbsp; &nbsp; &nbsp; FreeMem( Computer );<br>&nbsp; &nbsp;end;<br>end;
 
这样就可以啦!<br>var<br>&nbsp; &nbsp; c: array[0..127] of Char;<br>&nbsp; &nbsp; sz: dword;<br>begin<br>&nbsp; &nbsp; sz := SizeOf(c);<br>&nbsp; &nbsp; GetComputerName(c, sz);<br>&nbsp; &nbsp; showmessage(c);<br>end;
 
function f_GetComputerName:string;<br>var<br>&nbsp; &nbsp; &nbsp;Name &nbsp; &nbsp; : string;<br>&nbsp; &nbsp; &nbsp;dwNameLen : DWord;<br>begin<br>&nbsp; dwNameLen := cnMaxNameLen-1;<br>&nbsp; SetLength( Name, cnMaxNameLen );<br>&nbsp; GetComputerName(PChar(Name), dwNameLen );<br>&nbsp; SetLength(Name, dwNameLen );<br>&nbsp; Result := Name;<br>end;
 
第二个问题已解决,虽然你们没有回答“为什么”,但还是放分。<br><br>[red]请其他人帮助我解决第一个问题[/red]:<br>&nbsp; 1、如何用改写一文本文件的某一行?
 
完全可以放在ONCREAT事件中的。,<br>不过你帖出来的不对,<br>namesize 是dword型的<br>
 
既然是文本文件,用readin就可以了。如果知道一行几个字,那么算一下就行了。
 
to ppdjl:<br>&nbsp; 是可以放在ONCREAT事件中,namesize用cardinl,我得过正确的结果.<br>&nbsp; 但我把它放到我的一些程序中,它有时不能得到正确的结果.<br><br>to 花 儿:<br>&nbsp; 我先用readln读到目标行后,用writeln写入时有I/O错误提示.<br><br>
 
//如何用改写一文本文件的某一行?<br>ReadLn(textfile,Line);即可!
 
ReadLn(textfile,Line);只能读出文本<br>不能写入<br>我需要写入文件中的某一行
 
如此简单的问题(对于懂的人来说),没人肯出手吗?
 
你的文件的内容是不是不规则的,比如有一些是UniX 格式的换行,??这样就有可能出问题,或者是有一些乱码??<br>如果你是用file of char读写不出问题的话就是上面的原因了。试试再说…………
 
是否你打开的方式不对!<br>在内村当中创建一个TSTRinglist,然后读出来副值,<br>修改一行然后写入文件!
 
没这么复杂吧,其实放在oncreate还是onshou等等都行,<br>你的程序错就错在 &nbsp; new(cpname),这个空间肯定存不下computername,换一下,定一一个buffer<br>,保证正常.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部