| 
| 
 | Вопрос # 1 848/ вопрос открыт / | 
 |  Здравствуйте!Пожалуйста покажите пример с TCP. Мне надо создать 2 проги . 1 - Client и 2-Server. Например клиент отправляет к серверу что нит и тот комп выключается. Как это сделать ?
 
|  |   Вопрос задал: ElektrinO (статус: Посетитель)Вопрос отправлен: 26 августа 2008, 21:50
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Мережников Андрей Здравствуйте, ElektrinO!В программе-сервере поместите на форму TIdTCPServer (Indy компонент). Настройте у него параметры (IP адрес, номер порта). В программе-клиенте поместите на форму TIdTCPClient. Настройте его параметры (IP, порт клиента, IP,порт сервера, с которым надо связываться). Для сервера обработчик пишется в свойстве execute. Процесс обмена начинается по инициативе клиента (метод connect). Подробнее можно прочитать в информации по Indy компонентам. На форуме был вопрос про Indy - в ответах там есть ссылки на информацию
 
|  | Ответ отправил: Мережников Андрей (статус: Абитуриент)Время отправки: 27 августа 2008, 05:43
 
 |  Ответ #2. Отвечает эксперт: Feniks Здравствуйте, ElektrinO!Для выполнения перезагрузки/выключения/логофа предназначены функции ExitWindows и ExitWindowsEx.
 
 Function ExitWindows(Reserved: DWord; ReturnCode: Word): Boolean;Иницииpует стандаpтную пpоцедуpу завеpшения pаботы с Windows. Все пpикладные задачи должны подтвеpдить завеpшение pаботы Windows. Вызывает функцию 4CH пpеpывания 21H DOS. 
 Function ExitWindows(uFlags: Word; dwReason: DWord): Boolean;Функция ExitWindowsEx перезагружает(restart) или выключает систему (shutdown), а также может завершить сессию для текущего пользователя(log off). Смотрие их описания и пример в Приложении.
 
 P.S. Желаю удачи.
 Приложение:Переключить в обычный режим ExitWindows:  Function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool;               ExitWindowsEx:   BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved, );               ExitWindowsEx(EWX_SHUTDOWN,0);      Function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean ): Boolean; Var TPPrev,      TP: TTokenPrivileges;      Token: THandle;      dwRetLen: DWord; Begin Result:=False; OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @Token ); TP.PrivilegeCount:=1; IF LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID )) then Begin   IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED              else TP.Privileges[0].Attributes:=0;   dwRetLen:= 0;   Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen); End; CloseHandle(Token); End;   SetPrivilege('SeShutdownPrivilege',True);ExitWindowsEx(EWX_SHUTDOWN,0);
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 27 августа 2008, 11:22
 
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 28 августа 2008, 05:58; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 26 августа 2008, 23:21 [#1]:А в чём собственно проблема? отправить пакет по сокету или выключить компьютер. Решение первой задачи Вы вроде знаете.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Мережников Андрей (статус: Абитуриент), 27 августа 2008, 05:56 [#2]:Для того, чтобы написать подробный пример с Indy компонентами, надо знать какая у Вас версия Delphi. По сравнению, например с Delphi 6, работа с этими компонентами в Delphi2007 изменена. Скачайте себе DelphiWorld, например, там есть примеры по разным вопросам, в том числе и по выключению компьютера и по блокированию устройств, и по работе с сетью. http://www.delphiworld.narod.ru/ |  
|   | ElektrinO (статус: Посетитель), 27 августа 2008, 07:12 [#3]:Вадим К, У меня проблема в том как выключить компьютер. а как ? а перезагрузит и ещё как закончить сеанс? 
 Мережников Андре, у меня Делфи 7.
 |  
|   | Мережников Андрей (статус: Абитуриент), 28 августа 2008, 05:58 [#4]:Если использовать Indy компоненты для связи, то код примерно такой (для Delphi 6 - у меня нет Delphi 7): Сервер:
 procedure TForm1.IDTCPServer1Execute(AThread:TIdPeerThread);
 var s:string;
 begin
 //читаем команду от клиента
 s:=AThread.Connection.Readln;
 if s='quit'
 then begin
 //вставляете нужный код по выключению
 end;
 
 для клиента:
 .....
 idTCPClient1.connect;
 idTCPClient1.writeln('quit');
 idTCPClient1.disconnect;
 
 end;
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |