📄 subsuperuserunit.~pas
字号:
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 + -