Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   STSD - Den Computer mit nur einem Klick herunterfahren... (https://www.delphipraxis.net/99032-stsd-den-computer-mit-nur-einem-klick-herunterfahren.html)

T.E. 5. Sep 2007 20:23


STSD - Den Computer mit nur einem Klick herunterfahren...
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!

Ich habe mal überlegt, wie man den PC mit nur einem Klick herunterfahren kann... also hab ich mich mal hingesetzt, und mit einem simplen code, und der zu hilfe nahme der LMDTrayIcon Komponente eine kleine Anwendung geschrieben...

hier einmal der sourcecode:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, LMDContainerComponent, LMDBaseDialog, LMDAboutDlg,
  LMDCustomComponent, LMDWndProcComponent, LMDTrayIcon;

type
  TForm1 = class(TForm)
    LMDTrayIcon4: TLMDTrayIcon;
    LMDTrayIcon5: TLMDTrayIcon;
    LMDTrayIcon6: TLMDTrayIcon;
    About: TLMDTrayIcon;
    About1: TLMDAboutDlg;
    procedure LMDTrayIcon4Click(Sender: TObject);
    procedure LMDTrayIcon6Click(Sender: TObject);
    procedure LMDTrayIcon5Click(Sender: TObject);
    procedure AboutClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
type
 TAutorunKind = (akUserRun, akUserRunOnce, akRun, akRunOnce, akRunServices, akRunServicesOnce);

implementation
uses
 Registry;

{$R *.dfm}
function ExWindows(const AFlag: Word): Boolean;
var
  vi    : TOSVersionInfo;
  hToken : THandle;
  tp    : TTokenPrivileges;
  h     : DWord;
begin
  result:= false;

  vi.dwOSVersionInfoSize:=SizeOf(vi);

  if GetVersionEx(vi) then
  begin
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
      // Windows NT
      // Achtung bei Delphi 2 muß @hToken stehen ...
      if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
      begin
        LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
        tp.PrivilegeCount := 1;
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        h := 0;
        AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^, h);
        CloseHandle(hToken);
        result := ExitWindowsEx(Aflag, 0);
      end;
    end
    else
    begin // Windows 95
      Result := ExitWindowsEx(Aflag, 0);
    end;
  end;
end;
function CreateAutorunEntry(const AName, AFilename: String; const AKind: TAutorunKind): Boolean;
var
 Reg: TRegistry;
begin
 Result:=False;
 Reg := TRegistry.create;
 try
   if (AKind=akUserRun) or (AKind=akUserRunOnce) then
     Reg.Rootkey:= HKEY_CURRENT_USER
   else
     Reg.RootKey := HKEY_LOCAL_MACHINE;

   case AKind of
     akRun, akUserRun       : Result:=Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
     akRunOnce, akUserRunOnce: Result:=Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', True);
     akRunServices          : Result:=Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunServices', True);
     akRunServicesOnce      : Result:=Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\RunServicesOnce', True);
   end;
   Reg.WriteString(AName, AFilename);
 finally
   Reg.Free;
 end;
end;
procedure TForm1.LMDTrayIcon4Click(Sender: TObject);
begin
Exwindows(EWX_Shutdown);
end;

procedure TForm1.LMDTrayIcon6Click(Sender: TObject);
begin
Exwindows(EWX_Logoff);
end;

procedure TForm1.LMDTrayIcon5Click(Sender: TObject);
begin
Exwindows(EWX_Reboot);
end;

procedure TForm1.AboutClick(Sender: TObject);
begin
About1.Execute;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CreateAutorunEntry(Application.Title, ParamStr(0), akUserRunOnce);

end;

end.
Also bitte mal anschauen und vielleicht verbessern, falls das möglich ist...

PS: ich habe leider keine icons gefunden, die die typischen abmelden/neustarten und herunterfahren buttons von Windows zieren; vllt kann mir ja jemand malwelche zukommen lassen;D

PPS: Wer eine etwas umfangreichere Version sucht, kann die vllt. hier finden...

BrunoT 5. Sep 2007 20:53

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Hallo T.E.

ich hatte mir das auch schon überlegt und das ganze mit Windows gelöst (als Batch-Datei) :zwinker: :zwinker:

Inhalt der "Ende.bat"
Code:
shutdown -s -f -t 01
Das Runterfahren geht ratz-faz

bei Vista ist die Zeitangabe überigens überflüssig.

mfg

calculon 5. Sep 2007 21:13

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Dann schlägt T.E.'s Lösung deine aber um einen Klick ;-)

Zitat:

Zitat von T.E
[..] mit nur einem Klick herunterfahren kann [..]

Gruß

Calculon
--

markusj 5. Sep 2007 21:22

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Hast du schonmal auf den großen Knopf an deinem PC gedrückt, wenn er nicht aus war? Zum Runterfahren braucht man idr. kein solches Tool ... Auschaltknopf antippen und zusehen, wie die "Welt" untergeht.

mfG
Markus

Alien426 5. Sep 2007 21:28

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Verknüpfung erstellen:
Code:
%windir%\system32\shutdown.exe -s -t 3
In die Schnellstartleiste ziehen und mit 1 Klick ausführen. Man kann sich aus der shell32.dll noch den roten Knopf als Symbol dafür raussuchen.

Luckie 5. Sep 2007 22:39

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Zitat:

Zitat von BrunoT
Inhalt der "Ende.bat"
Code:
shutdown -s -f -t 01

Aber nur bei denen die nicht wissen warum es eine Benutzerverwaltung gibt und standardmäßig als Administrator am Rechner arbeiten. Hast du deine Lösung schon mal als normaler Benutzer ausprobiert?

Code:
C:\Dokumente und Einstellungen\Michael>shutdown -r
Der Vorgang wurde erfolgreich beendet.
Der Client besitzt ein erforderliches Recht nicht.

RavenIV 6. Sep 2007 08:29

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Zitat:

Zitat von T.E.
Hallo!

Ich habe mal überlegt, wie man den PC mit nur einem Klick herunterfahren kann... also hab ich mich mal hingesetzt, und mit einem simplen code, und der zu hilfe nahme der LMDTrayIcon Komponente eine kleine Anwendung geschrieben...

Hab mir das Programm mal angesehen.
Und mir sind gleich einige Dinge aufgefallen:
- Quellcode: auch bei so kleinen Projekten kann man die Dateien und Variablem anständig benennen. Projekt1 ist kein Projektname, Unit1 ist kein Unitname, Button1 Label1 Edit1 sind keine Namen für Komponenten
- TrayIcons: warum muss mir das Programm die Tray mit 4 Icons zumüllen? Für Hilfe braucht es kein Icon. Und die anderen drei Funktionen kann man zu einem Icon zusammenfassen und per Konfiguration auswählen, welche Funktion das Icon bei Click haben soll.

Dann noch eine Anregung:
Bei einem Kollegen hab ich ein Programm gesehen, das das Ausschalten sehr viel schneller macht. Klick auf TrayIcon und EINE Sekunde später ist der PC aus. Also nix mit Runterfahren, sondern SOFORT Ausschalten.
Der Kollege wollte mir aber nicht sagen, wie er das gemacht hat und das Programm auch nicht geben. Sein KOmmentar: "mach das selber, Du bist doch Programmierer".

Luckie 6. Sep 2007 09:21

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Zitat:

Zitat von RavenIV
Klick auf TrayIcon und EINE Sekunde später ist der PC aus.

Wenn ich mit einem Auto vor eine Betonmauer fahre, dann steht es auch sofort. :?

RavenIV 6. Sep 2007 09:26

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von RavenIV
Klick auf TrayIcon und EINE Sekunde später ist der PC aus.

Wenn ich mit einem Auto vor eine Betonmauer fahre, dann steht es auch sofort. :?

Dann ist das Auto aber kaputt.
Bei SOFORT Ausschalten ist der PC aber nicht kaputt, sondern ausgeschaltet.
Das wäre beim Auto so, wie "Auf die Bremse stehen und mit einem Ruck die Kupplung kommen lassen". Dann steht der Motor aber das Auto kann weiterhin benutzt werden.

Dass dies dem Auto (Motor, Kupplung) und dem PC (Windows) nicht auf Dauer gut tut ist klar.
Aber manchmal muss es eben schnell gehen und man hat nicht die Zeit, um den PC anständig runterzufahren.

angos 6. Sep 2007 09:29

Re: STSD - Den Computer mit nur einem Klick herunterfahren..
 
Zitat:

Zitat von RavenIV
Dann ist das Auto aber kaputt.

ja, da hast du recht

Zitat:

Bei SOFORT Ausschalten ist der PC aber nicht kaputt, sondern ausgeschaltet.
nicht zwangsläufig, aber er kann dadurch schaden nehmen, speziell kannst du dir damit dein windows zerschiessen. Das wurde auch schonmal hier und auch in anderen Foren durchgekaut ;)

Zitat:

Dass dies dem Auto (Motor, Kupplung) und dem PC (Windows) nicht auf Dauer gut tut ist klar.
Aber manchmal muss es eben schnell gehen und man hat nicht die Zeit, um den PC anständig runterzufahren.
Na wenigstens weist du um das Risiko... wichtig ist halt: Diese Aktion kann dir auch beim ersten ausführen (wenn´s unglücklich kommt) dein windows zerstören


Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz