![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Програмное управление
Romm © (2007-04-04 17:59:00)Здравствуйте Мастера!
Подскажите пожалуйста как из программы выключить/перезагрузить/поставить в спящий или ждущий режим компьютер.
И еще... не могли бы вы подсказать каким образом можно просмотреть рабочий стол на удаленном компьютере.
Заранее спасибо!
Leonid Troyanovsky (2007-04-17 18:53:00) [1]
> Romm © (17.04.07 18:02) [10]
> Мастера, пожалуйста, привидите пример, реально работающей
> функции выключения компьютера.
На сайте by Anatoly Podgoretsky есть факи.
--
Regards, LVT.
Romm (2007-04-17 18:36:00) [2]перезагрузку делаю следующим образом:
ShellExecute(Application.Handle,Pchar('Open'),Pchar('shutdown'),Pchar('-r -t 0'),'',0);.
Romm (2007-04-17 18:02:00) [3]Мастера, пожалуйста, привидите пример, реально работающей функции выключения компьютера.
Romm (2007-04-12 17:04:00) [4]
> MikePetrichenko © (11.04.07 20:47) [8]
ну не работал я с сокетами ни разу...(((
MikePetrichenko (2007-04-11 20:47:00) [5]
> Весь фокус в том, что НЕ НУЖНО сохранять снимок десктопа,
> а прямиком передавать на клиент!!!
Мдя.
Предложение номер 2. В первые классы (а еще лучше в нулевые) ввести обязательный предмет "Учимся думать сами".
С обязательным повтором всего курса данного предмена на первом курсе каждого института (училища, ПТУ, и т.д.)
Romm (2007-04-11 19:04:00) [6]
> Рамиль © (10.04.07 16:47) [6]
Спасибо конечно, но ты немножко не понял!
Я делаю прогу-для удаленного управления компами.Та серверах(клиентских машинах) должен работать экран, который будет каждуй 0,5 секунду передавать снимок экрана на клиент(серверную машину). Весь фокус в том, что НЕ НУЖНО сохранять снимок десктопа, а прямиком передавать на клиент!!!
Вот смотри:
public
{ Public declarations }
procedure GrabScreen;
...
implementation
{$R *.DFM}
procedure TForm1.GrabScreen;
var
DeskTopDC: HDc;
DeskTopCanvas: TCanvas;
DeskTopRect: TRect;
begin
DeskTopDC := GetWindowDC(GetDeskTopWindow);
DeskTopCanvas := TCanvas.Create;
DeskTopCanvas.Handle := DeskTopDC;
DeskTopRect := Rect(0, 0, Screen.Width, Screen.Height);
Form1.Canvas.CopyRect(DeskTopRect, DeskTopCanvas, DeskTopRect);//снимок отображается на форме!А мне нужно просто его передать по сокету, не сохраняя на этой машине!
ReleaseDC(GetDeskTopWindow, DeskTopDC);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GrabScreen;
end;
Рамиль (2007-04-10 16:47:00) [7]Писал исключительно по хелпу, очень давно, не претендую на то, что все учтено и написано правильно
unit SrvMainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Sockets, ScktComp;
type
TForm1 = class(TForm)
ServerSocket: TServerSocket;
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Cmd: string;
Size: int64;
Stream: TFileStream;
begin
Cmd := Socket.ReceiveText;
if Cmd = 'GET' then
begin
Stream := TFileStream.Create('PICT0001.jpg', fmOpenRead);
Size := Stream.Size;
Socket.SendBuf(Size, SizeOf(Size));
Socket.SendStream(Stream);
//поток не дестроим, т. к. в хелпе сказано, что сокет сам с ним разберется.
end;
end;
end.
unit MainFormCli;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Sockets, StdCtrls, ExtCtrls, Jpeg, ScktComp;
type
TForm2 = class(TForm)
Button3: TButton;
Image: TImage;
ClientSocket: TClientSocket;
Button1: TButton;
Button2: TButton;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
Reciveing: boolean;
Size: int64;
AllSize: int64;
Stream: TMemoryStream;
Jpeg: TJPEGImage;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button3Click(Sender: TObject);
begin
ClientSocket.Socket.SendText('GET');
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
ClientSocket.Active := true;
Reciveing := false;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
ClientSocket.Active := false;
end;
procedure TForm2.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Buf: array[0..8191] of byte; //Вроде по умолчанию буфер у сокета 8 килобайт, но могу ошибаться.
//в принципе работать должно при любом. Но в хелдпе сказано, что OnRead не гарантирует
//что при возникновении него все данные уже будут в буфере
RecivedSize: integer;
begin
if not Reciveing then
begin
Socket.ReceiveBuf(Size, SizeOf(Size));
Reciveing := true;
Stream := TMemoryStream.Create;
AllSize := 0;
end else
begin
RecivedSize := Socket.ReceiveBuf(Buf, SizeOf(Buf));
Stream.Write(Buf, RecivedSize);
inc(AllSize, RecivedSize);
if AllSize = Size then
begin
Reciveing := false;
JPeg := TJPEGImage.Create;
Stream.Position := 0;
JPeg.LoadFromStream(Stream);
Stream.Free;
Image.Picture.Assign(Jpeg);
Jpeg.Free;
end;
end;
end;
end.
Romm (2007-04-10 16:12:00) [8]Мастера! Не ужели никто не может помоч?! :((
Проблема: не знаю как передать снимок рабочего стола через сокет. Помогите плииз!..
tesseract (2007-04-10 16:12:00) [9]
> Проблема: не знаю как передать снимок рабочего стола через
> сокет. Помогите плииз!..
SendBuf/WriteBuf.
Romm (2007-04-07 07:15:00) [10]Не мог бы кто-нибудь ответить на второй вопрос?
Впринципе, я знаю, как сделать снимок рабочего стола,НО как его через сокет передать???
Romm (2007-04-05 13:28:00) [11]Loginov Dmitry © (04.04.07 20:25) [1]
благодарю...
Loginov Dmitry (2007-04-04 20:25:00) [12]
- <item caption="Спящий режим">
<command>rundll32.exe</command>
<params>powrprof.dll,SetSuspendState</params>
</item>
- <item caption="Перезагрузка">
<command>shutdown</command>
<params>-r -t 0</params>
</item>
- <item caption="Залочить Windows">
<command>rundll32.exe</command>
<params>user32.dll,LockWorkStation</params>
</item>
Вот такие вот команды. Применяются вместе с ShellExecute().