|
Вопрос # 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;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|