Entwickler-Ecke

Windows API - beenden menü


kad_we - Mo 01.12.03 12:45
Titel: beenden menü
wie lasse ich per buttonklick das ausschalten menü einblenden?
(bei win 2000) oder NT oder am besten bei beiden...

thx 4 help kad_we


Simon Joker - Mo 01.12.03 13:00

Hi Kad_we

nutze dazu ShellExecute und die entsprechenden Befehle der RunDLL.

DenShutdawn-Dialog habe ich jetzt nicht parat, deshalb für weitere -> Google.

Beispiele für Rundll - Kommandos:

· rundll32.exe user,exitwindowsexec - Windows neustarten

· rundll32.exe user,exitwindows - Windows herunterfahren

· rundll32.exe krnl386.exe,exitkernel - Windows herunterfahren

· rundll32.exe Shell32.dll,SHExitWindowsEx - aktiven Benutzer abmelden

· rundll32.exe user,wnetconnectdialog - Netzlaufwerke verbinden

· rundll32.exe user,wnetdisconnectdialog - Netzlaufwerke trennen

· rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl - Netzlaufwerke konfiguratieren

· rundll32.exe shell32.dll,Control_RunDLL password.cpl - Kennwortkonfiguration

· rundll32.exe shell32.dll,SHFormatDrive - Diskette formatieren

· rundll32.exe user,repaintscreen - Aktualisiert den Bildschirminhalt

· rundll32.exe shell32.dll,Control_RunDLL - Systemsteuerung aufrufen

· rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 - Anzeige-Eigenschaften

· rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1 - Sound-Eigenschaften

· rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0 - System-Eigenschaften

· rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3 - Leistungsmerkmale
(System- Eigenschaften)

· rundll32.exe shell32.dll,Control_RunDLL joy.cpl - Joystic/Gamepad Eigenschaften

· rundll32.exe shell32.dll,Control_RunDLL modem.cpl - Modem Eigenschaften

· rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl - Software Eigenschaften


kad_we - Mo 01.12.03 15:02

aja kannst du mir nen beispiel geben, oder es mir nochmal auf deutsch erklären???


Simon Joker - Mo 01.12.03 16:29

nun dann habe ich halt mal für dich gegoogelt:

Runndll32-befehl für Shutdown von win2k ist:

Shell32.dll,SHExitWindowsEx 1

Aufruf:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
//ShutDown:
ShellExecute(Application.Handle, 'open' ,PChar('rundll32.exe'),
               PChar('Shell32.dll,SHExitWindowsEx 1'),nil, sw_ShowNormal)
//Uhrzeit einstellen:
ShellExecute(Application.Handle, 'open' ,PChar('rundll32.exe'),
               PChar('shell32.dll,Control_RunDLL timedate.cpl,,0'),nil, sw_ShowNormal)
usw.

Vergiss nicht die ShellApi einzubinden.

Die Befehle sind OS abhängig, also vorhert prüfen.

eine kleine Auflistung:
http://www.faqweb.de/tip0564.htm


Delete - Mo 01.12.03 20:50

Getestet unter 98, 2000 und XP, also so gut wie OS-unabhängig, damit siehst du den Dialog, den du bei Start->Beenden siehst:

Delphi-Quelltext
1:
PostMessage(findwindow('Shell_TrayWnd',nil),WM_CLOSE,0,0);                    



@Simon: Es gibt vernünftige Befehle zum Beenden von Windows und zum Abmelden. Der Weg über die RunDLL ist -wie du selbst bemerkt hast!- ein wenig unsicher. Die FAQs enthalten mehr Informationen dazu.


Quisius - Mo 10.10.05 10:28

Hallo allerseits


Delphi-Quelltext
1:
PostMessage(findwindow('Shell_TrayWnd',nil),WM_CLOSE,0,0);                    

dieser Befehl funktioniert bei mir

Delphi-Quelltext
1:
2:
ShellExecute(Application.Handle, 'open' ,PChar('rundll32.exe'),
      PChar('Shell32.dll,SHExitWindowsEx 1'),nil, sw_ShowNormal);

allerdings leider nicht.
Bekomme folgende Fehlermeldung:
Fehler in Shell32.dll
Folgender Eintrag fehlt SHExitWindowsEx

Kennt einer die Lösung für mein Problem ? Ist meine DLL unvollständig bzw. lässt sie sich um den betroffenen Eintrag erweitern oder gibt es einen weiteren Befehl bzw. Möglichkeit den PC herunterzufahren?

By the way, benutze Win2k und Delphi 7

Bin dankbar für jede Hilfe

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


Quisius - Mo 10.10.05 14:49

Habe die Lösung selbst gefunden.
Es liegt an Win2k.

Wer ein ähnliches Problem hat, siehe http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/initiatesystemshutdown.asp
Da wird man geholfen ;-D


Delete - Mo 10.10.05 14:59

Äh und warum nicht Suche in: Delphi-Forum, Delphi-Library EXITWINDOWSEX? Diese Funktion hättest du übrigens gefunden, wenn du den Hinweis beachtet hättest, dass es besseren Code gibt, als es mit der run32.dll zu tun.