易截截图软件、单文件、免安装、纯绿色、仅160KB

delphi 動態安裝服務


unit winntService;
interface
uses
Windows,WinSvc,WinSvcEx;
function InstallService(const strServiceName,strDisplayName,strDescription,strFilename: string):Boolean;
procedure UninstallService(strServiceName:string);
implementation
function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler;
asm
PUSH EDI
PUSH ESI
PUSH EBX
MOV ESI,EAX
MOV EDI,EDX
MOV EBX,ECX
XOR AL,AL
TEST ECX,ECX
JZ @@1
REPNE SCASB
JNE @@1
INC ECX
@@1: SUB EBX,ECX
MOV EDI,ESI
MOV ESI,EDX
MOV EDX,EDI
MOV ECX,EBX
SHR ECX,2
REP MOVSD
MOV ECX,EBX
AND ECX,3
REP MOVSB
STOSB
MOV EAX,EDX
POP EBX
POP ESI
POP EDI
end;
function StrPCopy(Dest: PChar; const Source: string): PChar;
begin
Result := StrLCopy(Dest, PChar(Source), Length(Source));
end;
function InstallService(const strServiceName,strDisplayName,strDescription,strFilename: string):Boolean;
var
//ss : TServiceStatus;
//psTemp : PChar;
hSCM,hSCS:THandle;
Service: SC_HANDLE;
srvdesc : PServiceDescription;
desc : string;
//SrvType : DWord;
lpServiceArgVectors:pchar;
begin
Result:=False;
hSCM:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if hSCM=0 then Exit;
Service := OpenService(hSCM, Pchar(strServiceName), SERVICE_ALL_ACCESS);
if Service<=0 then
begin
hSCS:=CreateService(
hSCM,
Pchar(strServiceName),
Pchar(strDisplayName),
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_IGNORE,
Pchar(strFilename),
nil,
nil,
nil,
nil,
nil);
if hSCS=0 then Exit;//MessageBox(hHandle,Pchar(SysErrorMessage(GetLastError)),Pchar(Application.Title),MB_ICONERROR+MB_TOPMOST);
if Assigned(ChangeServiceConfig2) then
begin
desc := Copy(strDescription,1,1024);
GetMem(srvdesc,SizeOf(TServiceDescription));
GetMem(srvdesc^.lpDescription,Length(desc) + 1);
try
StrPCopy(srvdesc^.lpDescription, desc);
ChangeServiceConfig2(hSCS,SERVICE_CONFIG_DESCRIPTION,srvdesc);
finally
FreeMe


相关文档:

delphi实现批量读取格式有规律的文本文件的内容.

现有一系统不定时在同一目录下生成一批txt文件,内容大概如下;
      20100112_164910,6,81406392,808,113,,
为方便统计,需要将这些txt文件中的数据读入数据表中.
现有两种方法:
   一是直接将数据读入到数据表中的某一列中,再用sql 语句拆开成几列: 
     ......

Delphi多线程学习(8):优先级

一个线程的优先级取决于创建线程的进程的优先级(priority class)和线程本身相对的优先级(relative priority)。
    1、进程优先级:
    不同操作系统 优先级数目不同。Windows2000以上的版本列表如下:
Idle:(标志:IDLE_PRIORITY_CLASS,值为$40);
Below Normal:(标志:BEL ......

用Delphi编程时 如何利用线程

============================================================================
Windows95是Microsoft公司的第一个真正的多任务操作系统。在每一时刻可以有多个进程同时工作,而每一个进程又包含有多个线程。但只有一个处理器的计算机不可能真正地“同时”执行多个线程,而是操作系统把时间分成若干个时间片, ......

DELPHI中的快捷方式一览(完全正式版)

 
 1.SHIFT+鼠标左键    先选中任一控件,按键后可选中窗体(选中控件后按Esc效果一样)
 2.Shift+F8          调试时弹出CPU窗口。
 3.Shift+F10         等于鼠标右键(Windows快捷键)。
&n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号