AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte STSD - Den Computer mit nur einem Klick herunterfahren...
Thema durchsuchen
Ansicht
Themen-Optionen

STSD - Den Computer mit nur einem Klick herunterfahren...

Ein Thema von T.E. · begonnen am 5. Sep 2007 · letzter Beitrag vom 25. Nov 2010
Antwort Antwort
Seite 1 von 3  1 23      
T.E.
Registriert seit: 27. Mai 2007
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...
Angehängte Dateien
Dateityp: rar stsd_703.rar (279,6 KB, 15x aufgerufen)
Dateityp: exe stsd_822.exe (564,0 KB, 15x aufgerufen)
Gruß Torben
 
Benutzerbild von BrunoT
BrunoT

 
Delphi 8 Professional
 
#2
  Alt 5. Sep 2007, 20:53
Hallo T.E.

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

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

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

mfg
Holger
  Mit Zitat antworten Zitat
Benutzerbild von calculon
calculon

 
Delphi 7 Personal
 
#3
  Alt 5. Sep 2007, 21:13
Dann schlägt T.E.'s Lösung deine aber um einen Klick

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

Calculon
--
  Mit Zitat antworten Zitat
markusj
 
#4
  Alt 5. Sep 2007, 21:22
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
Markus
  Mit Zitat antworten Zitat
Benutzerbild von Alien426
Alien426

 
Turbo Delphi für Win32
 
#5
  Alt 5. Sep 2007, 21:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#6
  Alt 5. Sep 2007, 22:39
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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#7
  Alt 6. Sep 2007, 08:29
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".
Klaus E.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#8
  Alt 6. Sep 2007, 09:21
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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

 
Delphi 2007 Enterprise
 
#9
  Alt 6. Sep 2007, 09:26
Zitat von Luckie:
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.
Klaus E.
  Mit Zitat antworten Zitat
angos

 
Delphi 11 Alexandria
 
#10
  Alt 6. Sep 2007, 09:29
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ß
Ansgar
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 Uhr.
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