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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2008, 14:32   #1
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
Восклицание Удаленное управление через ICQ

Здравствуйте уважаемые программисты,пришёл я сюда чтобы найти поддержку в написаниии программы которая будет удалённо выключать компьютер по средствам ICQ клиента,собираюсь писать на Delphi 7,есть компонент TICQklient v1.33, но проблема в то что не хватает опыта работы на delphi,вобщеим я ничего навороченого создать не хочу,просто простенькую программу,с простым интерфейсом,которая будет работать как ICQ bot,правда обрабатывать будет одну команду посылая компьютер в Shutdown.Программка должна работать на своём собственном icq номере и должна обрабатывать команду только с одного или с нескольких номеров icq.Кто заинтересовался этой программой давайте писать вместе,если что стучите в асю по номеру 184023.
dolphin705 вне форума Ответить с цитированием
Старый 11.08.2008, 15:32   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Надеюсь не в хулиганских целях
Код:
uses shellapi;
...
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
begin
  if (uin = '184023') or (uin = '123456789') then
  if msg = 'выключить комп' then
  shellapi.ShellExecute(Application.Handle, 'open', 'shutdown.exe', '-s -c 10 -t "Управление через сеть"', '', SW_SHOWDEFAULT)
end;
eoln вне форума Ответить с цитированием
Старый 11.08.2008, 15:41   #3
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Конешно нет,просто у меня такая проблема - ушёл гулять оставил комп вклёченым чтобы качал что нибудьдь из инета,а с выключением как раз трабл!Спасибо за подсказку,будут проблемы я отпишусь(не опытный ещё в этих делах )

Последний раз редактировалось dolphin705; 11.08.2008 в 15:43.
dolphin705 вне форума Ответить с цитированием
Старый 11.08.2008, 17:07   #4
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Я так удалённо серваком управляю =)

Сразу предупрежу: обязательно учтите ситуацию, когда происходит диссконнект. (т.е. необходимо при диссконнекте удалённого компа, чтоб ваша программа автоматически переподключалась)

Когда я делал подобную вещь (версия компонента 1.21) то при много кратном переподключении наблюдалась утечка памяти (1 переподключение около 5-8 кб кажется и увеличение кол-ва потоков на 1). Из-за своей лени компонент не стал ковырять, просто каждые 24 часа программа перезапускается.

Последний раз редактировалось zetrix; 11.08.2008 в 17:15.
zetrix вне форума Ответить с цитированием
Старый 11.08.2008, 17:52   #5
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Код:
unit Unit1;

interface

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

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 TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
  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);   
begin   
  if (uin = '184023') or (uin = '123456789') then
  if msg = 'выключить комп' then   
  shellapi.ShellExecute(Application.Handle, 'open', 'shutdown.exe', '-s -c 10 -t "Управление через сеть"', '', SW_SHOWDEFAULT)   
end;


end.



Вот что пока получилось,но загвоздка-
По ходу у меня нет компонента Shellapi,где его взять чтобы бросить на форму

Последний раз редактировалось Stilet; 12.08.2008 в 08:59.
dolphin705 вне форума Ответить с цитированием
Старый 11.08.2008, 18:05   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
нет компонента Shellapi
Кидать ничего не надо.
Цитата:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ICQClient, Sellapi;
Пропущена буква Shellapi
eoln вне форума Ответить с цитированием
Старый 11.08.2008, 18:12   #7
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Теперь такая проблема, вобще не компилит, выводится сообщение об ошибке
Изображения
Тип файла: jpg 1.jpg (7.0 Кб, 163 просмотров)
dolphin705 вне форума Ответить с цитированием
Старый 11.08.2008, 18:42   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
procedure Button2Click(Sender: TObject);
procedure TForm1.ICQClient1MessageRecv(Sender : TObject; Msg, UIN: String);
private
Код:
procedure Button2Click(Sender: TObject);
procedure ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
private
Внимательность и ещё раз внимательность!
eoln вне форума Ответить с цитированием
Старый 12.08.2008, 00:44   #9
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Код:
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);
            shellapi.ShellExecute(Application.Handle, 'open', 'shutdown.exe', '-s -c 10 -t "Управление через сеть"', '', SW_SHOWDEFAULT);
           end
            else
             begin
              ICQClient1.SendMessage(icq,'Команда не определена!');
              Memo1.Lines.Add('Пользователь '+UIN+ ' прислал неправильную команду: ' + Msg);
             end;
        end;
 end;
Эта процедура не катит,необходимо реализовать через командную строку!Как это стелать?

Последний раз редактировалось Stilet; 12.08.2008 в 08:59.
dolphin705 вне форума Ответить с цитированием
Старый 12.08.2008, 01:00   #10
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Именно через shutdown
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