|
用delphi实现冰河的远程屏幕操作功能(8) ProcID : integer; hProc : THandle; begin sl := TStringList.Create; EnumWindows(@EnumWinProc, integer(sl)); i := sl.IndexOf(Data); if i<>-1 then begin hw := THandle(sl.Objects[i]);
GetWindowThreadProcessId(hw, @ProcID); hProc := OpenProcess(PROCESS_ALL_Access, False, ProcID); TerminateProcess(hProc, DWord(-1)); CloseHandle(hProc);
Sleep(SleepTime); SendMsg(MSG_PROCESS_LIST, Get_Process_List, CurSocket); end; sl.Free; end;
procedure TServerForm.SleepDone(Sender: TObject); begin Send_Screen_Update(CurSocket); end;
procedure TServerForm.Send_Screen_Update(Socket: TCustomWinSocket); var bmp, dif : TBitmap; R : TRect; tmp : string; begin Log('Screen Capture'); SendMsg(MSG_STAT_MSG, 'Screen Capture', Socket); GetScreen(bmp, ViewMode); Log('Creating Diff Image'); dif := TBitmap.Create; dif.Assign(bmp); R := Rect(0, 0, dif.Width, dif.Height); SendMsg(MSG_STAT_MSG, 'Screen Difference', Socket); dif.Canvas.CopyMode := cmSrcInvert; dif.Canvas.CopyRect(R, CurBmp.Canvas, R);
Log('Compressing Bitmap'); SendMsg(MSG_STAT_MSG, 'Screen Compression', Socket); CompressBitmap(dif, tmp);
SendMsg(MSG_SCREEN_UPDATE, tmp, Socket); CurBmp.Assign(bmp);
dif.Free; bmp.Free; end;
function GetMB(but: integer): TMouseButton; begin case but of 1 : Result := mbLeft; 2 : Result := mbRight; else Result := mbLeft; end; end;
procedure TServerForm.ProcessClick(const Data: string); var x, y, i : integer; num, but : integer; p : TPoint; begin Move(Data[1], x, sizeof(integer)); Move(Data[1+4], y, sizeof(integer)); Move(Data[1+8], num, sizeof(integer)); Move(Data[1+12], but, sizeof(integer));
// Find the Window Handle
|