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

📄 clientfrm.pas

📁 能够监视另一台机子的屏幕
💻 PAS
📖 第 1 页 / 共 2 页
字号:
end;

procedure TClientForm.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   Log(Format('%-7s %s', ['LogOff', DateTimeToStr(Now)]));
   ClientSocket1.Active := False;
   EnableButs;
   Stat[0] := ('Disconnected: ' + Socket.RemoteHost);
   Caption := 'Remote Control Client';
   StopAnim;
end;

procedure TClientForm.Disconnect1Click(Sender: TObject);
begin
   Stat[0] := 'Disconnecting...';
   ClientSocket1.Active := False;
   EnableButs;
   StopAnim;
end;

procedure TClientForm.RefreshComplete1Click(Sender: TObject);
begin
   SendMsg(MSG_REFRESH, '', ClientSocket1.Socket);
end;

procedure TClientForm.UpdateChanges1Click(Sender: TObject);
begin
   SendMsg(MSG_SCREEN_UPDATE, '', ClientSocket1.Socket);
end;

procedure TClientForm.Image1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
   ScaleXY(X, Y);
   LastX := X;
   LastY := Y;

   AddMove(X, Y);
end;

procedure TClientForm.AddMove(x, y: integer);
var
   MoveObj  : TMoveObj;
begin
   MoveObj := TMoveObj.Create;
   MoveObj.X := X;
   MoveObj.Y := Y;
   MoveObj.Time := GetTickCount;
   MoveList.Add(MoveObj);
end;

procedure TClientForm.ResponseTimerTimer(Sender: TObject);
var
   bm : TBitmap;
   x, y  : integer;
begin
   WaitImage.Hint := Format('Wait: %3.1n seconds', [(GetTickCount-t1)/1000.0]);

   bm := TBitmap.Create;
   bm.Width := WaitImage.Width;
   bm.Height := WaitImage.Height;

   Anim := Anim + 1;
   Anim := Anim and 31;
   for x := -1 to 1 do
      for y := -1 to 1 do
         bm.Canvas.Draw(Anim + x*32, Anim + y*32, Application.Icon);

   WaitImage.Picture.Assign(bm);
   bm.Free;
end;

procedure TClientForm.Image1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   ScaleXY(X, Y);
   but := 1;
   if Button = mbRight then but := 2;
   ClearMoveList;
   AddMove(x, y);
end;

procedure TClientForm.Image1Click(Sender: TObject);
begin
   NumClick := 1;
   ClickTimer.Enabled := True;
end;

procedure TClientForm.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   ScaleXY(X, Y);
   if but = 2 then begin
      // Only do this for Right Clicks
      SendMsg(MSG_CLICK, IntToByteStr(LastX) + IntToByteStr(LastY) +
         IntToByteStr(1 {Single}) + IntToByteStr(but), ClientSocket1.Socket);
   end;
   AddMove(x, y);
end;

procedure TClientForm.Image1DblClick(Sender: TObject);
begin
   NumClick := 2;
   ClickTimer.Enabled := True;
end;

procedure TClientForm.ClickTimerTimer(Sender: TObject);
var
   s        : string;
   MoveObj  : TMoveObj;
   i        : integer;
begin
   ClickTimer.Enabled := False;

   if (MoveList.Count < 5) or (NumClick = 2) then begin
      // This is a Click or Double-click
      SendMsg(MSG_CLICK, IntToByteStr(LastX) + IntToByteStr(LastY) +
         IntToByteStr(NumClick) + IntToByteStr(but), ClientSocket1.Socket);
   end else begin
      // This is a "drag" operation
      s := IntToByteStr(but) + IntToByteStr(MoveList.Count);
      for i := 0 to MoveList.Count-1 do begin
         MoveObj := MoveList[i];
         s := s + IntToByteStr(MoveObj.X) + IntToByteStr(MoveObj.Y)
            + IntToByteStr(MoveObj.time);
      end;
      SendMsg(MSG_DRAG, s, ClientSocket1.Socket);
   end;
end;

procedure TClientForm.SendButClick(Sender: TObject);
begin
   SendText(SendEdit.Text);
end;

procedure TClientForm.SendCRButClick(Sender: TObject);
begin
   SendText(SendEdit.Text + #13);
end;

procedure TClientForm.SendText(const Text: string);
begin
   SendMsg(MSG_KEYS, Text, ClientSocket1.Socket);
end;


procedure TClientForm.Log1Click(Sender: TObject);
begin
   Log1.Checked := not Log1.Checked;

   UpdateLogVis;
end;

procedure TClientForm.UpdateLogVis;
begin
   LogList.Visible := Log1.Checked;
   Splitter1.Visible := Log1.Checked;

   if Log1.Checked then
      LogList.Left := Splitter1.Left - 1;
end;

procedure TClientForm.Log(const s: string);
begin
   LogList.ItemIndex := LogList.Items.Add(s);
end;

procedure TClientForm.CommStat1Click(Sender: TObject);
begin
   CommStat1.Checked := not CommStat1.Checked;
   StatPanel.Visible := CommStat1.Checked;
end;

procedure TClientForm.EnableButs;
var
   b : boolean;
begin
   b := ClientSocket1.Active;
   Connect1.Enabled := not b;
   Disconnect1.Enabled := b;
end;

procedure TClientForm.FormCreate(Sender: TObject);
begin
   EnableButs;
   MoveList := TList.Create;
   ParseComLine;
   StopAnim;
   EnableInput;

   ServerDelay := DEFAULT_SERVER_DELAY;
   ViewMode    := DEFAULT_VIEW_MODE;
   CompMode    := DEFAULT_COMP_MODE;
   SvrPriority := DEFAULT_SVR_PRIORITY;
end;

procedure TClientForm.Shutdown1Click(Sender: TObject);
begin
   Close;
   Application.MainForm.Close;
end;

procedure TClientForm.FormDestroy(Sender: TObject);
begin
   ClearMoveList;
   MoveList.Free;
end;

procedure TClientForm.ClearMoveList;
var
   i : integer;
begin
   for i := 0 to MoveList.Count-1 do
      TObject(MoveList[i]).Free;
   MoveList.Clear;
end;

procedure TClientForm.FocusServerWindow1Click(Sender: TObject);
begin
   SendMsg(MSG_FOCUS_SERVER, '', ClientSocket1.Socket);
end;

procedure TClientForm.ParseComLine;
var
   i           : integer;
   s           : string;
begin
   for i := 1 to ParamCount do begin
      s := UpperCase(ParamStr(i));

      if s = '/CLIENT' then begin
         Visible := True;
      end;
   end;
end;

procedure TClientForm.EnableInput;
var
   b : boolean;
begin
   b := (NeedReply = 0) and ClientSocket1.Active;

   SendBut.Enabled := b;
   SendCRBut.Enabled := b;
   Image1.Enabled := b;
   Special1.Enabled := b;
   // Options1.Enabled := b;
end;

procedure TClientForm.StopAnim;
var
   bmp : TBitmap;
begin
   Screen.Cursor := crDefault;
   ResponseTimer.Enabled := False;
   // Stat[2] := 'Not Waiting';

   bmp := TBitmap.Create;
   bmp.Width := WaitImage.Width;
   bmp.Height := WaitImage.Height;
   bmp.Canvas.Draw(2, 2, Application.Icon);
   WaitImage.Picture.Assign(bmp);
   bmp.Free;
   
   EnableInput;
end;

procedure TClientForm.StartAnim;
begin
   Anim := 2;
   ResponseTimer.Enabled := True;
   // Stat[2] := 'Waiting';
   t1 := GetTickCount;
   Screen.Cursor := crAppStart;
   EnableInput;
end;

procedure TClientForm.WMSysCommand(var Message: TWMSysCommand);
begin
   if (Message.CmdType and $FFF0 = SC_MINIMIZE) then
      Application.Minimize
   else
      inherited;
end;

function TClientForm.CanSendMenuMsg: boolean;
begin
   Result := ClientSocket1.Active;
end;

procedure TClientForm.PauseChange(Sender: TObject);
var
   d : integer;
begin
   d := 0;
   (Sender as TMenuItem).Checked := True;

   if Sender = N005sec1 then d :=   50;
   if Sender = N010sec1 then d :=  100;
   if Sender = N050sec1 then d :=  500;
   if Sender = N100sec1 then d := 1000;
   if Sender = N200sec1 then d := 2000;
   if Sender = N500sec1 then d := 5000;
   ServerDelay := d;

   if CanSendMenuMsg then
      SendMsg(MSG_SEVER_DELAY, IntToByteStr(d), ClientSocket1.Socket);
end;

procedure TClientForm.ColorClick(Sender: TObject);
var
   vm : TViewMode;
   x  : integer;
begin
   (Sender as TMenuItem).Checked := True;

   vm := vmDefault;
   if Sender = Color4   then vm := vmColor4;
   if Sender = Gray4    then vm := vmGray4;
   if Sender = Gray8    then vm := vmGray8;
   if Sender = Color24  then vm := vmColor24;
   if Sender = Default1 then vm := vmDefault;
   ViewMode := vm;

   if CanSendMenuMsg then begin
      x := integer(vm);
      SendMsg(MSG_VIEW_MODE, IntToByteStr(x), ClientSocket1.Socket);
      SendMsg(MSG_REFRESH, '', ClientSocket1.Socket);
   end;
end;

procedure TClientForm.CompClick(Sender: TObject);
var
   cm : TCompressionLevel;
begin
   (Sender as TMenuItem).Checked := True;

   cm := clDefault;

   if Sender = HighSlow1 then cm := clMax;
   if Sender = Medium1   then cm := clDefault;
   if Sender = LowFast1  then cm := clFastest;
   CompMode := cm;

   if CanSendMenuMsg then
      SendMsg(MSG_COMP_MODE, IntToByteStr(integer(cm)), ClientSocket1.Socket);
end;

procedure TClientForm.PriorityClick(Sender: TObject);
var
   x : integer;
begin
   (Sender as TMenuItem).Checked := True;

   x := THREAD_PRIORITY_NORMAL;

   if Sender = Critical1      then x := THREAD_PRIORITY_TIME_CRITICAL;
   if Sender = Highest1       then x := THREAD_PRIORITY_HIGHEST;
   if Sender = AboveNormal1   then x := THREAD_PRIORITY_ABOVE_NORMAL;
   if Sender = Normal1        then x := THREAD_PRIORITY_NORMAL;
   if Sender = BelowNormal1   then x := THREAD_PRIORITY_BELOW_NORMAL;
   if Sender = Lowest1        then x := THREAD_PRIORITY_LOWEST;
   if Sender = Idle1          then x := THREAD_PRIORITY_IDLE;
   SvrPriority := x;

   if CanSendMenuMsg then
      SendMsg(MSG_PRIORITY_MODE, IntToByteStr(x), ClientSocket1.Socket);
end;

procedure TClientForm.Send_Current_Settings;
begin
   SendMsg(MSG_SEVER_DELAY,   IntToByteStr(ServerDelay), ClientSocket1.Socket);
   SendMsg(MSG_VIEW_MODE,     IntToByteStr(integer(ViewMode)), ClientSocket1.Socket);
   SendMsg(MSG_COMP_MODE,     IntToByteStr(integer(CompMode)), ClientSocket1.Socket);
   SendMsg(MSG_PRIORITY_MODE, IntToByteStr(SvrPriority), ClientSocket1.Socket);
end;

procedure TClientForm.ScaleImage1Click(Sender: TObject);
begin
   ScaleImage1.Checked := not ScaleImage1.Checked;

   if ScaleImage1.Checked then begin
      Image1.AutoSize := False;
      Image1.Stretch  := True;
      Image1.Align    := alClient;
   end else begin
      Image1.AutoSize := True;
      Image1.Stretch  := False;
      Image1.Align    := alNone;
      Image1.Picture.Assign(Image1.Picture.Graphic);  // To trigger the Autosize property
   end;
end;

procedure TClientForm.ScaleXY(var X, Y: integer);
begin
   if not ScaleImage1.Checked then exit;

   with Image1 do begin
      X := X * Picture.Width div Width;
      Y := Y * Picture.Height div Height;
   end;
end;

procedure TClientForm.ProcessList1Click(Sender: TObject);
begin
   SendMsg(MSG_PROCESS_LIST, '', ClientSocket1.Socket);
end;

procedure TClientForm.FileList1Click(Sender: TObject);
begin
   SendMsg(MSG_DRIVE_LIST, '', ClientSocket1.Socket);
end;

procedure TClientForm.SendPanelResize(Sender: TObject);
begin
   SendEdit.Width := SendPanel.ClientWidth - 8;
end;

procedure TClientForm.About1Click(Sender: TObject);
begin
   AboutBox.ShowModal;
end;

procedure TClientForm.StatBarMenuClick(Sender: TObject);
begin
   StatBarMenu.Checked := not StatBarMenu.Checked;

   StatusBar1.Visible := StatBarMenu.Checked; 
end;

procedure TClientForm.FullScreen1Click(Sender: TObject);
begin
   if BorderStyle = bsSizeable then begin
      BeforeFull  := BoundsRect;
      Menu        := nil;
      Left        := 0;
      Top         := 0;
      Width       := Screen.Width;
      Height      := Screen.Height;
      BorderStyle := bsNone;
      StatPanel.Visible := False;
      StatusBar1.Visible := False;
      ScrollBox1.BorderStyle := bsNone;
      FSTopForm.Show;
   end else begin
      BoundsRect := BeforeFull;
      Menu := MainMenu1;
      BorderStyle := bsSizeable;
      StatPanel.Visible := True;
      StatusBar1.Visible := True;
      ScrollBox1.BorderStyle := bsSingle;
      FSTopForm.Hide;
   end;
end;

procedure TClientForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   // If in Full-Screen mode, do an extra check for Hot-Keys on the popup menu
   if BorderStyle = bsNone then begin
      FSTopForm.CheckShortCut(Key, Shift);
   end;
end;

end.

⌨️ 快捷键说明

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