Zdalny shutdown - wylogowanie, wylaczenie, restartowanie komputerow w sieci lokalnej
BcbMan
Dla poczatkujacych...
Na pewno każdy z Was chcial zgasic zrestartowac w klasie komputer. Jest to mozliwe pod warunkiem, ze jestescie zalogowani jako administratorzy. Wtedy mozecie zdalnie wyłaczać i restartowac komputery w sieci lokalnej a takze swoj komputer lokalny.
Wystarczy programowo uruchomic polecenie systemowe 'shutdown' z odpowiednimi parametrami (dziala na pewno na Windows XP/2003 - na pewno nie dziala na platformie 9x - co do NT, 2000: nie wiem, czy dziala). Na nowszych windach pewnie tez bedzie dzialalo... :)
Ponizej podalem przykladowa aplikacje, ktora realizuje to zadanie (pod warunkiem, ze login, ktorym sie zalogowaliscie do sytemu jest w grupie administratorów). Wystarczy dorobic interfejs graficzny i mamy przydatny programik.
Wiecej informacji na temat polecenia 'shutdown' mozna znalezc w systemowej konsoli wpisujac 'shutdown' bez parametrow.
program ZdalnyShutdown;
{$APPTYPE CONSOLE}
uses
SysUtils, ShellApi;
var
znak, czy_zdalny, polecenie : Char;
// przechowuja: Znak T lub N - odpowiedz na pytanie, czy zastosowac
// do zdalnego komputera, przechowuja: rodzaj zakonczenia pracy
// (wylogowanie, restart, zamkniecie)
ile_sek : Integer;
// przechowuje czas wstrzymania przed zamknieciem/restartem systemu
nazwa, tekst : String;
// przechowuja: nazwe zdlanego komputera, tekst zawierajacy
// parametry polecenia 'shutdown'
begin
ile_sek := 0; czy_zdalny := 'N';
Write('Podaj polecenie dotyczace komputera'#13#10'(r - restart '
+ 's - wylaczenie l - wylogowanie (lokalnie), a - anulowanie): ');
Readln(polecenie);
// Uzytkownik musi wpisac jedna z liter: l, r, s, a, L, R, S, A.
if Pos(polecenie, 'lrsaLRSA')=0 then Exit;
// Jesli nie wybrano anulowania restartu/zamkniecia systemu i wylogowania...
if (UpCase(polecenie)<>'A')and(UpCase(polecenie)<>'L') then
begin
Write('Za ile sekund wykonac polecenie: '); Readln(ile_sek);
if ile_sek<0 then ile_sek := 0; // liczba sekund nie moze byc ujemna
end;
// Jesli nie wybrano wylogowania to mozna odwolac sie do komputera w sieci...
if UpCase(polecenie)<>'L' then
begin
Write('Czy polecenie wykonac na zdalnym komputerze [T/N]: ');
Readln(czy_zdalny);
end;
// Jesli nie odwolano sie do komputera w sieci...
if UpCase(czy_zdalny)<>'T' then
begin
if UpCase(polecenie)='A' then tekst := '-' + polecenie
else tekst := '-' + polecenie + ' -f -t ' + IntToStr(ile_sek);
Write('Czy napewno chcesz wykonac te operacje [T/N]? ');
Readln(znak);
if UpCase(znak)<>'T' then Exit;
end
else
begin
Write('Podaj nazwe komputera w sieci LAN: ');
Readln(nazwa);
if UpCase(polecenie)='A' then tekst := '-a -m ' + nazwa
else tekst := '-' + polecenie + ' -f -m ' + nazwa + ' -t '
+ IntToStr(ile_sek);
end;
// Funkcja WinApi uruchamiajaca polecenie systemowe shutdown
// z wybranymi wczesniej parametrami
ShellExecute(0, 'open', PChar('shutdown'), PChar(tekst), nil, 0);
end.
Kodu nie opisywalem, bo wydaje mi sie zbyt banalny. W koncu jest w Delphi pomoc... :)
Ale jakby cos bylo niejasne do dajcie znac - dopisze...
Pozdrawiam, BcbMan.
Jak zrobic aby wylogowanie nie bylo lokalne tylko przez LAN ?
w starszych windowsach uzywano polecenia
rundll32.exe User,ExitWindows
ze strony sysinternals mozna zrzucic darmowe narzedzie
psshutdown - ktore jest lepsze niz shoutdown bo moze zestartowac zdalny komp
z DOWOLNYMI poswiadczeniami uzytkownika
pozdrawiam Syzer
A nie lepiej zrobić tak?
lub po prostu Start >> Uruchom >> shutdown -i ?
Coś od Microsoft Corporation, i to okienkowe :D
Dodaj przynajmniej obsługę kodów przyczyny. Jeśli nie wiesz co to to w command line wpisz shutdown -?
Niby na takie programy mówiło się "polecenia zewnętrzne", ale to było za czasów DOSa.
Nom niezly niezly ale jak go wkleje na delphi to co mam potem robic moze szczegolowo bo ja jestem poczatkujacy mam delphi dopiero 4 dni
tylko uruchomic :) i czytac wyswietlajace sie napisy - w koncu to gotowiec... (jesli dalej jest cos niejasne to musisz dokladniej okreslic problem)
Nie wiem jak to napisac, ale poszukam rozwiazania... a moze Ty dopiszesz taki kawalek? Byloby to z korzyscia dla wszystkich odwiedzajacych i podniosloby poziom tego artykulu.
Nie wypominaj innym, ze robia cos nie tak, jesli sam robisz dokladnie tak samo. Poza tym sprawdzalem, czy jest tu juz taki artykul i nic takiego nie znalazlem. Moze podasz mi link do swojego artykulu?
Pomoc w Delphi ma sluzyc do zrozumienia kodu dla tych, ktorzy go nie zrozumieli (a zakladam, ze wiekszosc osob go rozumie). Kodu z nikad nie zerznalem - napisalem go sam.
Zamiast znacznikow 'delphi' stosuje znaczniki 'code'. Te pierwsze powodowaly przy ktoryms z moich artykulow, ze kod kopiowal sie wniewlasciwy sposob, uniemozliwiajac kompilacje programu. Totez wole ich nie stosowac.
Przyznaje, troche mnie lenistwo ogarnelo, ale problem naprawiam. Komentarze pojawia sie w artykule.
Chcialbym jeszcze zaznaczyc, ze moze artykul nie jest zbyt odkrywczy to zaznaczylem to wpisujac, ze jest dla poczatkujacych. Z pewnoscia wsrod wielu internautow odwiedzajacych te witryne znalazlo sie co najmniej kilku, ktorych ta wskazowka nie tylko wzbogacila o nowa wiedze, ale moze rowniez popchala do lepszego poznania dostepnych polecen konsoli systemowej.
Ciesze sie, ze jest zainteresowanie nawet tak "banalnym" artykulem. Czekam na dalsze komentarze :)
jesli ktos nie zamiescil komentarzy to nie znaczy od razu ze to nie jego kod !
inna sprawa ze powinien zamiescic
Czyli kod skads zernales, taki wniosek sie nasuwa
Dokladnie, artukuły w stylu "uruchom program z parametrem" sa mało odkrywczę, każdy powinien to znać, mniejsza o to iż takie wskazówki nie dotycza programowania. Sam dawałem tutaj podobną -> duplikat
no artykul to to IMO nie jest ... <_< zreszta malo odkrywcze ...