Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: CL | DM;

Вниз

Послать сообщение дугому ПК   Найти похожие ветки 

 
RAIN ©   (2004-04-23 09:24) [0]

Наверное, многие знают функцию выключения компьютера по сети, не используя программу сервер InitiateSystemShutdown("192.168.0.1", "Shutdown",1,True,False). Теперь я пытаюсь найти функцию привязки к определенному компьютеру по IP, как это было сделано в функции InitiateSystemShutdown, для того чтобы послать на данный ПК сообщение. Например меня сейчаз интересует, думаю что это возможно, выдвинуть дверцу CD-ROM у ПК, находящего в сети и не используя программу сервер. Буду очень благодарен, если кто-нибудь что-нибудь посоветует. Спасибо.


 
Ozone ©   (2004-04-23 10:32) [1]

TO RAIN ©

Можно вопрос - а как работает эта самая функция InitiateSystemShutdown. Как я понимаю нужны какие-то привелегии.
Если так, то как их заиметь?


 
RAIN ©   (2004-04-23 10:51) [2]

to Ozone
Я знаю только одно, что данная функция работает, если есть доступ к этому ПК, в смысле, что к нему можно просто зайти, вообщем произвести как бы авторизацию. И еще я знаю, что данная функция не может выключить ПК, где установлена ОС WinXP. Там, наверное закрыли порт или что-то такое.


 
Ozone ©   (2004-04-23 11:12) [3]

Попробовал так:


procedure Shutdown (Name:String; Message:String; Delay:Integer;
   Restart,CloseAll:Boolean);
var
   ph:THandle;
   tp,prevst:TTokenPrivileges;
   rl:DWORD;
begin
   OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_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);
   InitiateSystemShutdown(PChar(name),PChar(Message),Delay,Restart,CloseAll);
   ShowMessage(SysErrorMessage(GetLastError)); // ?????????
end;



Shutdown("192.168.40.217", "ShutDown", 5, true, true);


Пишет, что не найден сетевой путь (хотя я явно вижу этот комп в сети). В чем проблема?

ЗЫ: у меня WinXP, на удаленно ймашине Win98


 
RAIN ©   (2004-04-23 11:28) [4]

Вообщем вот прога, которая выключает удаленный ПК:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MMSystem, ComCtrls, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Co: TComboBox;
   Edit1: TEdit;
   Button2: TButton;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
          Form1: TForm1;
              t: _Token_Privileges;
             ht: cardinal;
             rl: cardinal;
 Computer      : Array[1..500] of String[25];
 ComputerCount : Integer;
   EnumHandle  : THandle;
   WorkgroupRS : TNetResource;
   Buf         : Array[1..500] of TNetResource;
  BufSize     : Cardinal;{Integer;}
  Entriess    : Cardinal;{Integer;}
  Result      : Integer;
   Workgroup,g : String;
   iii         : integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ht) then
 begin
   LookupPrivilegeValue(nil, "SeDoorOpenPrivilege", t.Privileges[0].Luid);
   t.PrivilegeCount:=1;
   t.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   AdjustTokenPrivileges(ht, false, t, 0, nil, rl);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 InitiateSystemShutdown("192.168.0.77"{PChar(co.Items.Strings[co.ItemIndex])}, "Shutdown",1,True,False)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//поиск комьютеров в сети
 co.Items.Clear;
 ComputerCount := 0;
 Workgroup := Edit1.Text + #0;
 FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
 With WorkgroupRS do
 begin
   dwScope := 2;
  dwType := 3;
  dwDisplayType := 1;
  dwUsage := 2;
  lpRemoteName := @Workgroup[1];
 end;
WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @WorkgroupRS, EnumHandle);
Repeat
   Entriess := 1;
  BufSize := SizeOf(Buf);
  Result :=  WNetEnumResource( EnumHandle,Entriess,@Buf,BufSize );
 If (Result = NO_ERROR) and (Entriess = 1) then
 begin
   Inc( ComputerCount );
   Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName);g:="";
     if Computer[ ComputerCount ]<>"" then
     for iii:=3 to length(Computer[ ComputerCount ]) do g:=g+Computer[ ComputerCount ][iii];
     co.Items.Add(g);
 end;
 Until (Entriess <> 1) or (Result <> NO_ERROR);
WNetCloseEnum( EnumHandle );
//конец поиска
end;

end.


 
RAIN ©   (2004-04-23 15:04) [5]

В этой проге надо ввести название ГРУППЫ и нажать поиск, далее выбрать любой ПК и нажать вторую кнопку, которая и выключает ПК. А вот как все таки связать ХЭНДЛ к сетевому ПК ну или что-то вроде этого?


 
RAIN ©   (2004-04-26 06:11) [6]

.


 
RAIN ©   (2004-04-26 07:58) [7]

Можете ответить, это хоть возможно, но только если точно знаете :)?


 
имя   (2004-04-27 10:44) [8]

Удалено модератором


 
coolIP   (2004-05-07 07:43) [9]

Классная прога! Больше ничего не нашел? Попробуй поковырять:
GetService,
OpenSCManager,
RegConnectRegistry,
SERVICE_INFO.



Страницы: 1 вся ветка

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
4-1085580560
Jel
2004-05-26 18:09
2004.07.04
Посмотрите пожалуйста, что крамольного в коде?


1-1087400397
Стас
2004-06-16 19:39
2004.07.04
Помогите найти компонент для Delphi7- smpp connector


3-1086704651
pashaz
2004-06-08 18:24
2004.07.04
FreeReport and Grid


1-1087301043
Gemini
2004-06-15 16:04
2004.07.04
Имееться ListView в котором надо сортировать числа.


8-1081962501
Ramis Mamedov
2004-04-14 21:08
2004.07.04
MP3