Sprawdzenie czy komputer został wyłączony ręcznie czy zdalnie.

0

Witam

Ostatnio w szkole moi kochani koledzy odkryli nową metodę poprawiania sobie humoru na lekcji. Otóż metoda ta nosi bardzo przyjemną nazwę - Shutdown. Jest to dosyć problematyczne dla tych co jednak wolą pracować na lekcji, gdyż po długiej ciężkiej pracy nagle wszystko zaczyna gasnąć, a efekty ciężkiej pracy odchodzą w niebyt, na co reakcja jest w postaci śmiechu nadawców. Postanowiłem popsuć im trochę zabawę i próbuję stworzyć program który byłby ostatnim tchnieniem komputera wyłączonego w ten sposób i odwdzięczał się w ten sam sposób. Pomyślałem, że najlepszym sposobem byłoby żeby program przy wyłączaniu sprawdzał, czy został zamknięty ręcznie tylko on (np. przez naciśnięcie buttona zamykającego program), czy został zamknięty w trakcie zamykania systemu, a przy tym sprawdzał czy komputer został zamknięty przez użytkownika, czy został zamknięty zdalnie. Tylko w przypadku zdalnego zamknięcia systemu program wysyłałby do odpowiednich komputerów shutdowna. Jest tylko jeden mały problem - w ogóle nie mam pojęcia jak sprawdzić czy komputer został zamknięty zdalnie czy przez użytkownika i czy w ogóle istnieje możliwość by to sprawdzić.

0

Ostatnio w szkole moi kochani koledzy odkryli nową metodę poprawiania sobie humoru na lekcji.
To admin sieci (nauczyciel?) powinien ustawić tak uprawnienia użytkowników, żeby nie mogli sobie wzajemnie wyłączać komputerów.

0

Często zapisuj swoją pracę a frustracja będzie mniejsza.
Przed zdalnym wyłączeniem może uchronić AV a jak to jest za trudne - odłączenie skrętki. Na wyłączenie komputera przez button na obudowie może poradzić metalowa rurka fi 25 mm wypełniona cementem przetrącająca gnaty delikwentowi.
Za moich czasów w sali siedział jeszcze nauczyciel który miał na wszystko oko a u was?

0

Nauczyciel nie jest w stanie wszystkiego zauważyć i w sumie nie wiem czemu tego nie zablokuje. Ale dopóki to działa chciałbym mieć tą duchową satysfakcję widząc, że kiedy na moim komputerze wszystko gaśnie to wtedy to samo dzieje sią na komputerze tego co mi to puścił :)

0

Skoro uczniowie mogą zdalnie wyłączyć Ci komputer, to idź do działu "Uprawnienia w systemach Windows".
A może każdy komputer w twojej pracowni ma mieć najwyższe uprawnienia?
Jeśli tak, to możesz sprawdzać, który komputer wywołał polecenie zamknięcia poprzez procesy (w tym przypadku szukanym będzie "shutdown.exe").
Tak samo jest możliwe sprawdzenie, czy komputer jest zamykany normalnie, czy nieoczekiwanie np.: przez odłączenie wtyczki.

0

Właściwie rozwiązałem już ten problem w trochę inny sposób - ustawiłem sobie timer na głównej formie który włącza mi shutdown ustawiony na bardzo długi czas (wyłącza się automatycznie po zamknięciu programu) działający jako blokada (bo jak wiadomo kiedy działa jeden drugiego nie mozna włączyć ;) ). Wiadomo - nie uchroni mnie to przed bat-em (-a potem -s...), więc kiedy odkryje delikwenta zawsze mogę mu sie z tym programem odwdzięczyć ;)

1

Jeśli chodzi o zdalne wyłączenie kompa, to możesz spróbować je przyblokować, tzn. musisz przechwycić próbę zamknięcia systemu przechwytując komunikat WM_QUERYENDSESSION. Ustawiasz rezultat komunikatu na 0 informując w ten sposób system, że nie zgadzasz się na shutdown. Przykład:

type
  TForm1 = class(TForm)
  private
    { Private declarations }
    procedure WMQueryEndSession(var Message: TMessage); message WM_QUERYENDSESSION; 

  public
    { Public declarations }
  end;

implementation

procedure TForm1.WMQueryEndSession(var Message: TMessage);
Begin
  If BlokujShutDown then Message.Result:=0 //nie pozwala na zamknięcie systemu
  else Message.Result:=1; //pozwolenie na zamknięcie systemu
End; 

Edit:
Na LogOff też zadziała.:)

0

Ooooo!! Fajnie :D Chciałbym już zobaczyć miny tych żartownisiów na widok tego, że ich próby kończą się fiaskiem :D A da się też sprawdzić z którego komputera poszedł sygnał??

0

weź nóż, oderżnij etherneta i po sprawie

0

Marogo - niby się ucieszyłem z tego co mi podałeś, ale tak teraz tego popróbowałem i mi wywala błąd przy BlokujShutDown, a gdy zostawię samo result na 0 to nie daje to żadnego efektu

0
type
  TForm1 = class(TForm)
  private
    procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION; 
  end;

implementation

procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
  if Message.source=ENDSESSION_LOGOFF then ....
  else if Message.source=ENDSESSION_CRITICAL then ....
  else if Message.source=ENDSESSION_CLOSEAPP then ....
  Message.Result:=0 //nie pozwala na zamknięcie systemu
end;

http://msdn.microsoft.com/en-us/library/windows/desktop/aa376890%28v=vs.85%29.aspx

0

Dla CRITICAL i CLOSEAPP wyskakuje mi undeclarated identifer

0

To je zdefiniuj tak jak podane w linku.

0

Ale tam jest kod dla c++ :(

2
Pytacz napisał(a):

Ale tam jest kod dla c++ :(

Niestety, tutaj oczekuje się myślenia od osób na forum (od pytaczy również). Spróbuj użyć komponentu TBrain, może pomoże.

0
Pytacz napisał(a):

Ale tam jest kod dla c++ :(

Mogę Ci to przepisać na Delphi jeśli chcesz, choć prościej byłoby to zrobić w TurboPascalu (też mogę).
Zależy który język wybierzesz.

0
Opi napisał(a):
Pytacz napisał(a):

Ale tam jest kod dla c++ :(

Mogę Ci to przepisać na Delphi jeśli chcesz, choć prościej byłoby to zrobić w TurboPascalu (też mogę).
Zależy który język wybierzesz.

Mi też napiszesz program?

0

Opi - byłbym bardzo wdzięczny

0
Pytacz napisał(a):

Opi - byłbym bardzo wdzięczny

rusz pałą.

1
Pytacz napisał(a):

Opi - byłbym bardzo wdzięczny

Co z tego nie rozumiesz? Tłumacz google nie działa u ciebie?

ENDSESSION_CLOSEAPP
0x00000001
The application is using a file that must be replaced, the system is being serviced, or system resources are exhausted. For more information, see Guidelines for Applications.

ENDSESSION_CRITICAL
0x40000000
The application is forced to shut down.

ENDSESSION_LOGOFF
0x80000000
The user is logging off. For more information, see Logging Off.

1 użytkowników online, w tym zalogowanych: 0, gości: 1