Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2008, 01:03   #11
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Что именно "не катит". Ошибка или ничего не происходит? Что значит через shutdown? Он и так там используется
eoln вне форума Ответить с цитированием
Старый 12.08.2008, 10:38   #12
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

По поводу командной строки.

я так делал:
Код:
if pos('/com ',msg)=1 then winexec(Pchar(copy(msg,6,length(msg))),1);
MSG - входящее сообщение. Чтобы выключит комп нужно отправить сообщение:
/com shutdown -s
zetrix вне форума Ответить с цитированием
Старый 12.08.2008, 11:13   #13
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Что именно "не катит". Ошибка или ничего не происходит? Что значит через shutdown? Он и так там используется
Вот именно ничего не происходит.
dolphin705 вне форума Ответить с цитированием
Старый 12.08.2008, 13:38   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Вот именно ничего не происходит.
Прав может не хватать на эту операцию...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2008, 13:45   #15
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

я же писал, что winexec не помогает?
zetrix вне форума Ответить с цитированием
Старый 12.08.2008, 15:27   #16
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ICQClient, Shellapi;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Timer1: TTimer;
    ICQClient1: TICQClient;
    Button3: TButton;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure ICQClient1Login(Sender: TObject);
    procedure ICQClient1ConnectionFailed(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  rec: boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 begin
 if (Edit1.Text = '') or (Edit2.Text = '') or //пустые поля
   (Length(Edit1.Text) < 5) or (Length(Edit2.Text) < 3) //Если UIN меньше 5 символов и пароль меньше 3
     then
       begin
         MessageDlg('Не правельно заполнены поля!',mtInformation,[mbOk],0); //Выводим сообщение об ошибке
       Exit;
      end;
     rec := True; //Удачное соединение
       ICQClient1.UIN := StrToInt(Edit1.Text); //забираем UIN
        ICQClient1.Password := Edit2.Text; //забираем пароль
       ICQClient1.Login(); //Соединяемся с сервером
      Memo1.Lines.Add('Соединение с сервером ICQ...'); //Выводим текущее состояние (соединение)
 end;


procedure TForm1.ICQClient1Login(Sender: TObject);
 begin
  if ICQClient1.LoggedIn then //если соединение установлено
  begin
   Memo1.Lines.Add('Соединение с сервером установлено.'); //Добавляю в Memo1 строку о текущем положении
   Timer1.Enabled := True; //Включаю таймер
  end;
 end;



procedure TForm1.ICQClient1ConnectionFailed(Sender: TObject);
 begin
  if not rec then Exit; //Если мы нажали на кнопку "Выход", то не нужно пытаться соединиться
    Memo1.Lines.Add('Не удалось соединиться с сервером.');
     if MessageDlg('Попытаться соединиться еще раз?',mtInformation,[mbOk,mbCancel],0) = mrOk
     then
   begin
   ICQClient1.Login();
   Memo1.Lines.Add('Соединение с сервером ICQ...');
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
 begin
 ICQClient1.SendKeepAlive; //посылаем KeepAlive
end;



procedure TForm1.Button2Click(Sender: TObject);
 begin
  if not ICQCLient1.LoggedIn then
   MessageDlg('Соединение с сервером не установлено!',mtInformation,[mbOk],0)
   else
    begin
     rec := False;
    ICQCLient1.Disconnect;
   Memo1.Lines.Add('Соединение с сервером оборвано.');
  Timer1.Enabled := False;
 end;
end;

procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);

var 
icq: cardinal; 
 begin 
  icq := StrToInt(UIN);
      if UIN='184023' then begin
        if Msg='off' then
           begin
            ICQClient1.SendMessage(icq,'Выполняется выключение компьютера');
             Memo1.Lines.Add('Пользователь '+UIN+ ' прислал верную команду: ' + Msg);
             Button3.Click
             end
            else
             begin
              ICQClient1.SendMessage(icq,'Команда не определена!');
              Memo1.Lines.Add('Пользователь '+UIN+ ' прислал неправильную команду: ' + Msg);
            end;
        end;
end;


procedure TForm1.Button3Click(Sender: TObject);
    var
    hproc, htoken: THandle;
    ht: cardinal;
    luid: int64;
    luidattr: LUID_AND_ATTRIBUTES;
    priv: Token_Privileges;
    r: DWORD;
    res: BOOL;
    dal: LongBool;
    buf: PChar;
                begin
                 hProc:=GetCurrentProcess;
                  hToken:=0;
                   OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES, hToken);
                    LookupPrivilegeValue(nil, 'SeShutDownPrivilege', luid);
                     luidattr.Luid := luid;
                      luidattr.Attributes:=SE_PRIVILEGE_ENABLED;
                      priv.PrivilegeCount:=1;
                     priv.Privileges[0]:=luidattr;
                    r:=0;
                   res:=AdjustTokenPrivileges(hToken, false, priv, 0, nil, r);
                   case ComboBox1.ItemIndex of
                   // ExitWindowsEx(EWX_LOGOFF,0);
                   // Ждущий режим
                   // Спящий режим
                   // ExitWindowsEx(EWX_REBOOT,0);
                   // ExitWindowsEx(EWX_Shutdown+EWX_POWEROFF,0);
          end;
    end;
end.
Подскажите,что теперь не так?

Ругается на end;
[Error] Unit1.pas(154): Expression expected but 'END' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Последний раз редактировалось Stilet; 12.08.2008 в 16:09.
dolphin705 вне форума Ответить с цитированием
Старый 12.08.2008, 16:11   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А у тебя Case некрасиво стоит. Заремь его.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2008, 16:20   #18
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А у тебя Case некрасиво стоит. Заремь его.
Это как?
dolphin705 вне форума Ответить с цитированием
Старый 12.08.2008, 16:29   #19
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

ремарка = комментарий
заремь = закомментируй
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 13.08.2008, 09:52   #20
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ICQClient, Shellapi;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Timer1: TTimer;
    ICQClient1: TICQClient;
    procedure Button1Click(Sender: TObject);
    procedure ICQClient1Login(Sender: TObject);
    procedure ICQClient1ConnectionFailed(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
    procedure ShutdownComputer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  rec: boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 begin
 if (Edit1.Text = '') or (Edit2.Text = '') or //пустые поля
   (Length(Edit1.Text) < 5) or (Length(Edit2.Text) < 3) //Если UIN меньше 5 символов и пароль меньше 3
     then
       begin
         MessageDlg('Не правельно заполнены поля!',mtInformation,[mbOk],0); //Выводим сообщение об ошибке
       Exit;
      end;
     rec := True; //Удачное соединение
       ICQClient1.UIN := StrToInt(Edit1.Text); //забираем UIN
        ICQClient1.Password := Edit2.Text; //забираем пароль
       ICQClient1.Login(); //Соединяемся с сервером
      Memo1.Lines.Add('Соединение с сервером ICQ...'); //Выводим текущее состояние (соединение)
 end;


procedure TForm1.ICQClient1Login(Sender: TObject);
 begin
  if ICQClient1.LoggedIn then //если соединение установлено
  begin
   Memo1.Lines.Add('Соединение с сервером установлено.'); //Добавляю в Memo1 строку о текущем положении
   Timer1.Enabled := True; //Включаю таймер
  end;
 end;



procedure TForm1.ICQClient1ConnectionFailed(Sender: TObject);
 begin
  if not rec then Exit; //Если мы нажали на кнопку "Выход", то не нужно пытаться соединиться
    Memo1.Lines.Add('Не удалось соединиться с сервером.');
     if MessageDlg('Попытаться соединиться еще раз?',mtInformation,[mbOk,mbCancel],0) = mrOk
     then
   begin
   ICQClient1.Login();
   Memo1.Lines.Add('Соединение с сервером ICQ...');
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
 begin
 ICQClient1.SendKeepAlive; //посылаем KeepAlive
end;



procedure TForm1.Button2Click(Sender: TObject);
 begin
  if not ICQCLient1.LoggedIn then
   MessageDlg('Соединение с сервером не установлено!',mtInformation,[mbOk],0)
   else
    begin
     rec := False;
    ICQCLient1.Disconnect;
   Memo1.Lines.Add('Соединение с сервером оборвано.');
  Timer1.Enabled := False;
 end;
end;

procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);

var 
icq: cardinal; 
 begin 
  icq := StrToInt(UIN);
      if UIN='184023' then begin
        if Msg='off' then
           begin
            ICQClient1.SendMessage(icq,'Выполняется выключение компьютера');
             Memo1.Lines.Add('Пользователь '+UIN+ ' прислал верную команду: ' + Msg
             ShutdownComputer;
             end
            else
             begin
              ICQClient1.SendMessage(icq,'Команда не определена!');
              Memo1.Lines.Add('Пользователь '+UIN+ ' прислал неправильную команду: ' + Msg);
            end;
        end;
end;

procedure TForm1.ShutdownComputer;
var
  ph: THandle;
  tp, prevst: TTokenPrivileges;
  rl: DWORD;
begin
  OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES orTOKEN_QUERY, ph);
  LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tp.Privileges[0].Luid);
  tp.PrivilegeCount := 1;
  tp.Privileges[0].Attributes := 2;
  AdjustTokenPrivileges(ph, FALSE, tp, SizeOf(prevst), prevst, rl);
  ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;

end.
Подскажите пожалуйсто как сделать чтобы последняя процедура(ShutdownComputer)выполнял ась.

Эту процедуру надо выполнить в 114 строке

Последний раз редактировалось Stilet; 13.08.2008 в 10:50.
dolphin705 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаленное управление устройством! Gambler Работа с сетью в Delphi 11 29.10.2009 12:12
Управление чужой программой через WEB. MethSpeed Безопасность, Шифрование 9 20.07.2008 14:45
через какую сетевую карту входить в инет, а через какую в лан шКОЛЯР Свободное общение 2 27.06.2008 17:55
SSL через WinSock или через что? Jolyk Win Api 2 07.06.2008 17:37