⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subsuperuserunit.pas

📁 DELPHI 下远程控制源码
💻 PAS
📖 第 1 页 / 共 4 页
字号:
	    if BytesRead > 0 then
	    begin 	     
	      Buffer[BytesRead] := #0; 	      
              Line := Line + Buffer;
            end;
	  until not WasOK or (BytesRead = 0);	  
	 WaitForSingleObject(PI.hProcess, 15000);
	finally 	 
	  CloseHandle(PI.hThread);
          CloseHandle(PI.hProcess);
        end;
    finally
        result:=Line;
        CloseHandle(StdOutPipeRead);
    end;
  end;
		     //----------------------------操作系统识别
  function IsNT: Boolean ;
  var
     OSVersionInfo: TOSVersionInfo;
  begin
     OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
     GetVersionEx(OSVersionInfo);
     if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
       Result := True
     else
      Result := False;
  end;
var
  CMDStr:string;
  EchoStr:String;
  TheDir :Array[1..255] of Char;
  ThePDir:PChar;
  TheStrDir:String;
begin
     CMDStr:=AThread.Connection.ReadLn(EOL);
     LetSingle2.Acquire; //登记日志
       RegUserOperation(AThread,'超级用户','控制台命令',
			   '命令行:'+CMDStr);
     LetSingle2.Leave;
     if DirectoryExists(CMDStr) then //直接是目录
     begin	
	 EchoStr:=CMDStr;
	 SetCurrentDirectory(PChar(EchoStr));
	 AThread.Connection.WriteInteger(Length(EchoStr));     
	 AThread.Connection.Write(EchoStr);
	 exit;	   
     end;
				   //是退格处理
     if UpperCase(StrUtils.LeftStr(CMDStr,3))=UpperCase('cd.') then
     begin
	getCurrentDirectory(255,@TheDir);
	ThePDir:=@TheDir;
	TheStrDir:=ExtractFilePath(String(ThePDir));	
	EchoStr:=TheStrDir;
	SetCurrentDirectory(PChar(EchoStr));
	AThread.Connection.WriteInteger(Length(EchoStr));     
	AThread.Connection.Write(EchoStr);
	exit;
     end;                          //进入目录处理
     if UpperCase(StrUtils.LeftStr(CMDStr,3))=UpperCase('cd ') then
     begin
	getCurrentDirectory(255,@TheDir);
	ThePDir:=@TheDir;
	TheStrDir:=String(ThePDir);
	CMDStr:=StrUtils.RightStr(CMDStr,Length(CMDStr)-3);
	if DirectoryExists(CMDStr) then //是完整目录处理--1
	begin	
	   EchoStr:=CMDStr; 	   
	end else
	begin                           //是子目录处理  --2
	   if TheStrDir[Length(ThestrDir)]='\' then
	     EchoStr:=TheStrDir+CMDStr else
	      EchoStr:=TheStrDir+'\'+CMDStr;
	end;
	SetCurrentDirectory(PChar(EchoStr));
	AThread.Connection.WriteInteger(Length(EchoStr));     
	AThread.Connection.Write(EchoStr);
	exit;
     end;          
                           //其它命令
     EchoStr:=GetDosOutput('cmd /c '+CMDStr);
     if IsNT then
     begin
	AThread.Connection.WriteInteger(Length(EchoStr));     
	AThread.Connection.Write(EchoStr);
     end
     else
     begin
	 AThread.Connection.WriteInteger(Length(EchoStr));  
	 AThread.Connection.Write(EchoStr);
     end;
end;
//====================进程查看----------------------24
procedure  GetSysProcessProc(AThread:TIdPeerThread);
var
    ThePL:TStringList;
begin
  LetSingle2.Acquire; //登记日志
       RegUserOperation(AThread,'超级用户','进程查看',
			   '所有系统进程');
  LetSingle2.Leave;
  try
   try 
    ThePL:=TStringList.Create;
   except
     exit;
   end;
   GetProcessList(ThePL);
   AThread.Connection.WriteInteger(Length(ThePL.Text));
   AThread.Connection.WriteStrings(ThePL);   
  except   
  end;
  ThePL.Free;
end;
//====================结束进程----------------------25
procedure  KillProcessProc(AThread:TIdPeerThread);
var
   ThePID:Cardinal;
   TheProcName:String;
begin
  Try
   ThePID:=AThread.Connection.ReadCardinal;
   TheProcName:=AThread.Connection.ReadLn(EOL);
   if ThePID=0 then 
   begin
      if KillProcess2(TheProcName) then
       AThread.Connection.Write('恭喜啦,目标进程已经结束!'+EOL) else
         AThread.Connection.Write('对不起,您没有结束该进程的权限!!'+EOL);
   end else
   begin
     if KillProcess(ThePID) then
       AThread.Connection.Write('恭喜啦,目标进程已经结束!'+EOL) else
         AThread.Connection.Write('对不起,您没有结束该进程的权限!!'+EOL);
   end;
  except
  end; 
  LetSingle2.Acquire; //登记日志
       RegUserOperation(AThread,'超级用户','结束进程',
			   IntToStr(ThePID));
  LetSingle2.Leave; 
end;
//====================更改进程优先级----------------26
procedure  SetProgressPriorityProc(AThread:TIdPeerThread);  
var
   TheState:String;
   ThePID  :integer;
begin  
   Try
       ThePID  :=AThread.Connection.ReadInteger;
       TheState:=AThread.Connection.ReadLn(EOL);
   except
       exit;
   end;   
   LetSingle2.Acquire; //登记日志
       RegUserOperation(AThread,'超级用户','设置进程:'+IntToStr(ThePID),
			   '改变进程优先级:'+TheState);
   LetSingle2.Leave; 
   Try   
      if TheState='标准' then
      begin
	if SetProcessPriority(ThePID,NORMAL_PRIORITY_CLASS) then
	   AThread.Connection.Write('恭喜啦,进程优先级更改成功!'+EOL) else
	     AThread.Connection.Write('对不起,您没有改变该进程的权限!!'+EOL);
      end;
      if TheState='低' then
      begin
	if SetProcessPriority(ThePID,IDLE_PRIORITY_CLASS) then
	   AThread.Connection.Write('恭喜啦,进程优先级更改成功!'+EOL) else
	     AThread.Connection.Write('对不起,您没有改变该进程的权限!!'+EOL);
      end;
      if TheState='高' then
      begin
	if SetProcessPriority(ThePID,HIGH_PRIORITY_CLASS) then
	   AThread.Connection.Write('恭喜啦,进程优先级更改成功!'+EOL) else
	     AThread.Connection.Write('对不起,您没有改变该进程的权限!!'+EOL);
      end;
      if TheState='实时' then
      begin
	if SetProcessPriority(ThePID,REALTIME_PRIORITY_CLASS) then
	   AThread.Connection.Write('恭喜啦,进程优先级更改成功!'+EOL) else
	     AThread.Connection.Write('对不起,您没有改变该进程的权限!!'+EOL);
      end;
      if TheState='低于标准' then
      begin
	if SetProcessPriority(ThePID,
			   NORMAL_PRIORITY_CLASS+IDLE_PRIORITY_CLASS) then
	   AThread.Connection.Write('恭喜啦,进程优先级更改成功!'+EOL) else
	     AThread.Connection.Write('对不起,您没有改变该进程的权限!!'+EOL);
      end;
      if TheState='高于标准' then
      begin
	if SetProcessPriority(ThePID,
	                  NORMAL_PRIORITY_CLASS+HIGH_PRIORITY_CLASS) then
	   AThread.Connection.Write('恭喜啦,进程优先级更改成功!'+EOL) else
	     AThread.Connection.Write('对不起,您没有改变该进程的权限!!'+EOL);
      end;
   except
   end;
end;
//====================远程监视----------------------27
procedure  RemoteScrMonitor(AThread:TIdPeerThread);
var
   ThePriority   :Integer; //进程优先级
   TheImageArea  :integer; //屏幕区域标识
   TheStripHeight:integer; //屏幕区域高度度
   TheImageType  :integer; //图形传输方式
   ThePicPixFmt  :integer; //图象处理的颜色位数,确省为8位256色
   TheImageQos   :integer; //图象质量控制
   TheMonitorThread:TStripMonitorThread;
begin
   TheImageType  :=AThread.Connection.ReadInteger;
   ThePicPixFmt  :=AThread.Connection.ReadInteger;
   TheImageQoS   :=AThread.Connection.ReadInteger;
   TheStripHeight:=AThread.Connection.ReadInteger;      
   ThePriority   :=AThread.Connection.ReadInteger;
   LetSingle2.Acquire; //登记日志
       RegUserOperation(AThread,'超级用户','远程监视','监视时间:'+TimeToStr(now));
   LetSingle2.Leave; 
    
   TheMonitorThread:=TStripMonitorThread.Create(AThread,ThePriority,
                     TheStripHeight,TheImageType,ThePicPixFmt,TheImageQoS);
end;
//====================鼠标命令----------------------28
procedure  RemoteMouseControl(AThread:TIdPeerThread);
var
   MouseState   :String; //按键状态
   MouseButton  :String; //鼠标之左-- 中-- 右键
   MousePos     :TPoint; //鼠标点
   ReadStringLen:integer;
   ReadStrings  :TStringList;
begin
   try
      ReadStrings:=TStringList.Create;
   except
      exit;
   end;
   try
     ReadStringlen:=AThread.Connection.ReadInteger;
     if ReadStringLen>200 then
     Begin
        ReadStrings.Free;
        exit;
     end;
     ReadStrings.Text:=AThread.Connection.ReadString(ReadStringLen);
   except
     ReadStrings.Free;
     exit;
   end;
   
   if ReadStrings.Count<4 then exit;

   MouseState:=ReadStrings[0];
   MouseButton:=ReadStrings[1];
   try
     MousePos.X:=StrToInt(ReadStrings[2]);
     MousePos.Y:=StrToInt(ReadStrings[3]);
   except
     ReadStrings.Free;
     exit;
   end;
   ReadStrings.Free;
   if MouseState='鼠标按下' then //处理鼠标按下模拟
   begin      
      if MouseButton='左键' then
          Mouse_Event(MOUSEEVENTF_LEFTDOWN,MousePos.X,MousePos.Y,0,0);
      if MouseButton='中键' then
          Mouse_Event(MOUSEEVENTF_MIDDLEDOWN,MousePos.X,MousePos.Y,0,0);
      if MouseButton='右键' then
          Mouse_Event(MOUSEEVENTF_RIGHTDOWN,MousePos.X,MousePos.Y,0,0);
      
   end else
    if MouseState='鼠标抬起' then //处理鼠标抬起模拟
    begin             
       if MouseButton='左键' then
          Mouse_Event(MOUSEEVENTF_LEFTUP,MousePos.X,MousePos.Y,0,0);
       if MouseButton='中键' then
          Mouse_Event(MOUSEEVENTF_MIDDLEUP,MousePos.X,MousePos.Y,0,0);
       if MouseButton='右键' then
          Mouse_Event(MOUSEEVENTF_RIGHTUP,MousePos.X,MousePos.Y,0,0);
          
    end else
     if MouseState='鼠标移动' then //处理鼠标移动模拟
     begin      
         SetCursorPos(MousePos.X,MousePos.Y);
     end;      
end; 
//====================键盘命令----------------------29
procedure  RemoteKeyBdControl(AThread:TIdPeerThread); 
var
   KeyBdState  :string;
   VK_Value    :integer;   
   VK_ByteValue:byte;
   ReadStringLen:integer;
   ReadStrings  :TStringList;
begin
   try
      ReadStrings:=TStringList.Create;
   except
      exit;
   end;
   try
      ReadStringlen:=AThread.Connection.ReadInteger;
      if ReadStringLen>50 then
      Begin
        ReadStrings.Free;
        exit;
      end;
      ReadStrings.Text:=AThread.Connection.ReadString(ReadStringLen);
   except
      ReadStrings.Free;
      exit;
   end;
   
   if ReadStrings.Count<2 then exit;
   try
      KeyBdState:=ReadStrings[0];
      VK_Value:=StrToInt(ReadStrings[1]);
   except
      ReadStrings.Free;
      exit;
   end;
   
   ReadStrings.Free;  
   
   VK_ByteValue:=Byte(VK_Value);
    
   if KeyBdState='键盘按下' then
       KeyBD_Event(VK_ByteValue,0,0,0);

   if KeyBdState='键盘抬起' then
       KeyBD_Event(VK_ByteValue,0,KEYEVENTF_KEYUP,0);
end;
//====================注册表------------------------30
procedure RemoteRegestry(AThread:TIdPeerThread);
var
   Reg          : TRegistry;
   TheRegCMD    : string;
   TheRoot      : String;
   TheKey       : String;
   TheKeyNames  : TStringList;
   TheKeyValues : TStringList;
   TheKeyVInfos : TStringList;
   i,j          : integer;
   TheKeyInfo   : TRegDataInfo;
   TheValueName : String;
   TheNewKey    : string;
   TheNewVName  : String;
   TheNewValue  : String;
   TheValueType : String;
   TheValueStr  : String;
   TheBuffer    : Array[1..1024] of byte;
begin
  try
    Reg := TRegistry.Create;
    
    try
       TheRegCMD:=AThread.Connection.ReadLn(EOL); //读取操作命令
       TheRoot:=AThread.Connection.ReadLn(EOL);
       TheKey:=AThread.Connection.ReadLn(EOL);
    except
       exit;
    end; 
      
   if TheRoot='HKEY_CLASSES_ROOT' then Reg.RootKey:=HKEY_CLASSES_ROOT;
   if TheRoot='HKEY_CURRENT_USER' then Reg.RootKey:=HKEY_CURRENT_USER;
   if TheRoot='HKEY_LOCAL_MACHINE' then Reg.RootKey:=HKEY_LOCAL_MACHINE;
   if TheRoot='HKEY_USERS' then Reg.RootKey:=HKEY_USERS;
   if TheRoot='HKEY_CURRENT_CONFIG' then Reg.RootKey:=HKEY_CURRENT_CONFIG;

   if TheRegCMD='注册表查询' then //执行注册表查询命令----------------1
   begin
     try
        TheKeyNames  := TStringList.Create;
        TheKeyValues := TStringList.Create;
        TheKeyVInfos := TStringList.Create;
     except
        AThread.Connection.Disconnect;
        exit;
     end;
     
     LetSingle2.Acquire; //登记日志
       RegUserOperation(AThread,'超级用户','注册表','查看:'+TheKey);
     LetSingle2.Leave; 
     
      if Reg.OpenKey(TheKey, True) then //打开键
      begin
         Reg.GetKeyNames(TheKeyNames);   //读取键名列表
         Reg.GetValueNames(TheKeyValues);//读取键值列表
         
         TheKeyVInfos.Add('');
         TheKeyVInfos.Add('REG_SZ');
         TheValueStr:=Reg.ReadString('');
         if TheValueStr<>'' then
             TheKeyVInfos.Add(TheValueStr) else
               TheKeyVInfos.Add('数值未设置');
         
         for i:=0 to TheKeyValues.Count-1 do
         begin
          if TheKeyValues[i]<>'' then
          begin
            TheKeyVInfos.Add(TheKeyValues[i]);
            
            if Reg.GetDataInfo(TheKeyValues[i],TheKeyInfo) then
            begin
              if TheKeyInfo.RegData=rdString Then
              begin
                 TheKeyVInfos.Add('REG_SZ');
                 TheKeyVInfos.Add(Reg.ReadString(TheKeyValues[i]));
              end else
                if TheKeyInfo.RegData=rdExpandString Then
                 begin
                  TheKeyVInfos.Add('REG_SZ');
                  TheKeyVInfos.Add(Reg.ReadString(TheKeyValues[i]));
                 end else
                 if TheKeyInfo.RegData=rdInteger Then
                  begin
                     TheKeyVInfos.Add('REG_DWORD');
                     TheKeyVInfos.Add(IntToStr(Reg.ReadInteger(TheKeyValues[i]))); 
                  end else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -