funit.pas
上传用户:sinothink
上传日期:2022-07-15
资源大小:459k
文件大小:3k
源码类别:

远程控制编程

开发平台:

Delphi

  1. unit  funit;
  2. interface
  3. function FindProcess(ExeName: string): Longword;            //查找进程
  4. function StrCopy(Dest: PChar; const Source: PChar): PChar;  //拷贝字符串
  5. function GetDLLDirectory(FullPath: string): string;         //取DLL路径
  6. implementation
  7. uses Windows;
  8. type
  9.   TProcessEntry32 = packed record
  10.     dwSize: DWORD;
  11.     cntUsage: DWORD;
  12.     th32ProcessID: DWORD;       // this process
  13.     th32DefaultHeapID: DWORD;
  14.     th32ModuleID: DWORD;        // associated exe
  15.     cntThreads: DWORD;
  16.     th32ParentProcessID: DWORD; // this process's parent process
  17.     pcPriClassBase: Longint;    // Base priority of process's threads
  18.     dwFlags: DWORD;
  19.     szExeFile: array[0..MAX_PATH - 1] of Char;// Path
  20.   end;
  21.    //---------API----------//
  22. function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle stdcall; external 'kernel32.dll';
  23. function Process32First(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL stdcall; external 'kernel32.dll';
  24. function Process32Next(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL stdcall; external 'kernel32.dll';
  25.    //---------API----------//   
  26.      //寻找指定进程,返回其ID.
  27. function FindProcess(ExeName: string): Longword;
  28.        //(子函数)尾串是否匹配,不分大小写
  29.   function AnsiEndsText(const ASubText, AText: string): Boolean;
  30.   var
  31.     P: PChar;
  32.     L, L2: Integer;
  33.   begin
  34.     P := PChar(AText);
  35.     L := Length(ASubText);
  36.     L2 := Length(AText);
  37.     Inc(P, L2 - L);
  38.     if L > L2 then
  39.       Result := False
  40.     else
  41.       Result := CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE,P, L, PChar(ASubText), L) = 2;
  42.   end;
  43. var
  44.   sphandle: DWORD;  Found: Bool;
  45.   PStruct: TProcessEntry32;     
  46. begin                                      
  47.   Result := 0;
  48.   sphandle := CreateToolhelp32Snapshot($00000002, 0);
  49.   PStruct.dwSize := Sizeof(PStruct);
  50.   Found := Process32First(sphandle, PStruct);
  51.   while Found do
  52.   begin
  53.     if AnsiEndsText(ExeName, PStruct.szExefile) then
  54.     begin
  55.        Result := PStruct.th32ProcessID;   Break;
  56.     end;
  57.     Found := Process32Next(sphandle, PStruct);
  58.   end;
  59.   CloseHandle(sphandle);
  60. end;
  61.      //PChar字符串复制
  62. function StrCopy(Dest: PChar; const Source: PChar): PChar;
  63. asm
  64.         PUSH    EDI
  65.         PUSH    ESI
  66.         MOV     ESI,EAX
  67.         MOV     EDI,EDX
  68.         MOV     ECX,0FFFFFFFFH
  69.         XOR     AL,AL
  70.         REPNE   SCASB
  71.         NOT     ECX
  72.         MOV     EDI,ESI
  73.         MOV     ESI,EDX
  74.         MOV     EDX,ECX
  75.         MOV     EAX,EDI
  76.         SHR     ECX,2
  77.         REP     MOVSD
  78.         MOV     ECX,EDX
  79.         AND     ECX,3
  80.         REP     MOVSB
  81.         POP     ESI
  82.         POP     EDI
  83. end;
  84.      //取得DLL所在目录
  85. function GetDLLDirectory(FullPath: string): string;
  86. var
  87.   i: integer;
  88. begin
  89.   i := length(FullPath);
  90.   while i>=1 do
  91.   begin
  92.     if (FullPath[i]='') then  break;
  93.     dec(i);
  94.   end;
  95.   Result := copy(FullPath,1,i-9)+'HookDLL';
  96. end;
  97. end.