Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > помогите с кодом


Автор: BLACK_KOT 31.7.2008, 20:52
с клиента на сервер поступают строковые команды : сфоткать экран или переместить курсор:
Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 fs: TFileStream;
begin
if Socket.ReceiveText = 'cursor' then  SetCursorPos(500,500);

if Socket.ReceiveText = 'screen' then
  begin
   fs:=TFileStream.Create('c:\2.jpg', fmOpenRead);
   try
    fs.Position:= 0;
    Socket.SendText('Size:'+IntToStr(fs.Size) + #0);
    Socket.SendStream(fs);
   finally
   end;
  end;
end;

 
в этом варианте работает тока передвижение курсора, а вторая команда ваще не проходит почему то, когда как если делать через "else" - работает всё :
Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 fs: TFileStream;
begin

if Socket.ReceiveText = 'screen' then
  begin
   fs:=TFileStream.Create('c:\2.jpg', fmOpenRead);
   try
    fs.Position:= 0;
    Socket.SendText('Size:'+IntToStr(fs.Size) + #0);
    Socket.SendStream(fs);
   finally
   end;
  end
  else SetCursorPos(500,500);
end;

почему так происходит кто нить объяснит? или мне теперь все команды придётся писать через "else". и как лучше с точки зрения профессианалов?

Автор: qwe113 31.7.2008, 23:10
Что тут не понятного?
Метод ReceiveText достает из внутреннего буфера данные (строку). В первом случае, ты два раза его вызываешь, и конечно же второй вызов ReceiveText дает другой результат нежели первый.

ТЧтобы твой первый способ работал, необходимо вставить пару строк:
Код

...
var Cmd: string;
....
begin
Cmd := Socket.ReceiveText;


if Cmd = 'cursor' .....
....

Автор: BLACK_KOT 1.8.2008, 00:01
благодарю!

Автор: BLACK_KOT 1.8.2008, 13:17
ёмоё, вот ещё проблема:
Код

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 fs: TFileStream; Cmd: string;
begin
Cmd := Socket.ReceiveText;
if Cmd= 'RMouse' then
  begin
  mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
  mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
   end;
if Cmd= 'LMouse' then
  begin
  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
   end;
if Cmd = 'screen' then
  begin
   fs:=TFileStream.Create('c:\2.jpg', fmOpenRead);
   try
    fs.Position:= 0;
    Socket.SendText('Size:'+IntToStr(fs.Size) + #0);
    Socket.SendStream(fs);
   finally
   end;
  end;
end;


команда скрин проходит нормально, а вот с командами от клавиш мыши хрень какая то.
посылал с клиента команды и через onClick и через onkeyup  и через хук - всё время на серваке
 эта команда многократно почему то повторяется. тоесть на посланный клик правой кнопкой мыши - на серваке раз 20 (поразному) кликает. кто нить подскажет из за чего это и как устранить?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)