Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 848

/ вопрос открыт /

Здравствуйте!
Пожалуйста покажите пример с TCP. Мне надо создать 2 проги . 1 - Client и 2-Server. Например клиент отправляет к серверу что нит и тот комп выключается. Как это сделать ?

ElektrinO Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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. Желаю удачи.

Приложение:
  1. ExitWindows:
  2.  
  3.  
  4. Function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool;
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. ExitWindowsEx:
  21.  
  22.  
  23.  
  24. BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved, );
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39. ExitWindowsEx(EWX_SHUTDOWN,0);
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46. Function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean ): Boolean;
  47. Var TPPrev,
  48. TP: TTokenPrivileges;
  49. Token: THandle;
  50. dwRetLen: DWord;
  51. Begin
  52. Result:=False;
  53. OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @Token );
  54. TP.PrivilegeCount:=1;
  55. IF LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID )) then
  56. Begin
  57. IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
  58. else TP.Privileges[0].Attributes:=0;
  59. dwRetLen:= 0;
  60. Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen);
  61. End;
  62. CloseHandle(Token);
  63. End;
  64.  
  65.  
  66.  
  67. SetPrivilege('SeShutdownPrivilege',True);
  68. 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

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;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:40
Выполнено за 0.02 сек.