高手坐镇(3)

数字职场

修改文件生成日期

高手:曾虹云

题目难度:★★★★★

适用人群:软件开发工程师

读者来信:我的程序运行后会在C:\system32中创建一个abc.mdb文件,由于此文件会执行重要任务,我不想这个文件被人注意,因此我想将文件的生成日期改为“2003-04-15”,这样如果有人使用系统的日期搜索就找不出这个文件了,请问这个想法怎么实现?

曾虹云:使用TfileStream文件流可以实现你的这个想法。TFileStream.Create(getPath,fmOpenRead)中的参数getPath是路径,参数fmOpenRead是打开模式中的只读打开(fmOpenWrite是只写打开模式,fmOpenReadWrite是读写打开模式)。在Delphi中定义一个过程:

procedure TForm1.ModifyFileDate(const ASourceFile:string);

var

LSourceStream: TFileStream;

FT : FILETIME;

ST : SYSTEMTIME;

begin

LSourceStream := TFileStream.Create(ASourceFile, fmOpenReadWrite);//读写打开

try

FileTimeToSystemTime(FT,ST);//设置时间

ST.wYear :=2009;

ST.wMonth :=10;

ST.wDay :=10;

SystemTimeToFileTime(ST,FT);

SetFileTime(LSourceStream.Handle,@FT,@FT,@FT);

finally

FreeAndNil(LSourceStream);

end;

end;

然后在创建文件时调用这个过程来修改文件的创建日期:ModifyFileDate('c:inntystem32bc.mdb')。

输出系统服务

高手:小恐龙

题目难度:★★★★★

适用人群:软件开发工程师

开发QQ群:如何用VB输出系统服务?要包含服务运行状态和服务路径。

小恐龙:使用WMI类库读取系统服务然后输出是个比较简单的方法,使用for循环枚举Win32_Service, 示例代码如下:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\" & strComputer & "ootimv2")

Set colRunningServices = objWMIService.ExecQuery _

("Select * from Win32_Service")

For Each objService in colRunningServices

Wscript.Echo objService.DisplayName & VbTab & objService.State

Next

显示当前时间

高手:小恐龙

题目难度:★★★

适用人群:软件开发工程师

开发QQ群:在程序(VB2008或VC2008)上显示当前时间是用Timer不断获取好,还是获取一次后用加法计数好?哪个更省资源?

小恐龙:显示当前时间用Timer不断获取的方式比用加法计数好。 因为不同的电脑,有可能加法的速度不一样。有的电脑会很快,有的电脑可能很慢,而用Timer的话就不存在这个问题。此外加法是六十进制,代码复杂。

字符串转换为字节数组

高手:阿木

题目难度:★★★★

适用人群:软件开发工程师

读者来信:我要做一个通讯程序,需要把字符串转换为字节数组,可是不知道应该怎么操作,请问有什么办法可以实现?

阿木:使用Asc函数就可以实现,不过Asc函数只可以转换一个字符或者一个字符串的第一个字符。下面我们在VB窗体中添加一个text、一个Command、一个List。在Command的Click事件中写入:

Dim aa As Variant

aa = allasc(Text1.Text)//调用函数

For i = 1 To UBound(aa)

List1.AddItem aa(i)

Allasc的函数定义如下:

Public Function allasc(ByVal s As String) As Variant

Dim xx() As Long

ReDim xx(1 To Len(s)) As Long//重新定义xx数组的长度为Text1的字符串长度

For i = 1 To Len(s)

xx(i) = Asc(Mid(s, i, 1))//调用Asc函数,一个字节一个字节的转换

Next i

allasc = xx//返回函数的值

End Function