Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Symbole der Systemsteuerung anzeigen (https://www.delphipraxis.net/103292-symbole-der-systemsteuerung-anzeigen.html)

ringli 13. Nov 2007 21:40


Symbole der Systemsteuerung anzeigen
 
Mit diesem Beitrag aus der Codelib und der CSIDL_CONTROL kann ich mir ja den Inhalt der Systemsteuerung anzeigen lassen. Das klappt auch wunderbar, aber jetzt meine Frage:

Wie kann ich beim Doppelklick auf eines der Symbole (z.B. Internetoptionen, Sicherheitscenter usw.) das entsprechende Systemsteuerungsapplet ausführen lassen?

Der Code für den Doppelklick auf das entsprechende Icon in einem ListView ist ja einfach und sieht so aus (zum Test lasse ich mir hier die Beschriftung des Symbols anzeigen):
Code:
procedure TForm1.lvDblClick(Sender: TObject);
var
  i : Integer;
begin
  if lv.Selected <> nil then
    begin
      i := lv.Selected.Index;
      showmessage(lv.Items.Item[i].Caption);
    end;
end;
Aber, wie komme ich an den Pfad des entsprechenden Systemsteuerungsapplets um dieses via ShellExecute ausführen zu können?

soulies 14. Nov 2007 08:20

Re: Symbole der Systemsteuerung anzeigen
 
Delphi-Quellcode:
uses shellapi ;

procedure RunControlPanelApplet(Applet:string);
begin
     shellexecute(handle, 'open', pchar('rundll32.exe'), pchar('shell32.dll,Control_RunDLL ' + Applet), nil, SW_ShowNormal);
end;
applets:

access.cpl --> Hardware Dialog
appwiz.cpl --> Software Dialog
desk.cpl --> Anzeige
intl.cpl --> Ländereinstellungen
main.cpl --> Maus
sysdm.cpl --> System
...


ich hoffe es hilft ....


cya

marabu 14. Nov 2007 09:26

Re: Symbole der Systemsteuerung anzeigen
 
Hallo,

vielleicht hilft auch dieser Microsoft Artikel:

How to enumerate and run available Control Panel applications

Grüße vom marabu

DevidEspenschied 14. Nov 2007 09:45

Re: Symbole der Systemsteuerung anzeigen
 
Also ich rufe Systemsteuerungs-Applets folgendermaßen auf:

Delphi-Quellcode:
PROCEDURE RunCPL(CPLName : STRING);
BEGIN
  WinExec(PChar('rundll32.exe shell32.dll,Control_RunDLL '+CPLName), SW_SHOWNORMAL);
END;
Die einzelnen CPL's sind unter bspw. foldermaßen dokumentiert:

ACCESS.CPL = Eingabehilfen
APPWIZ.CPL = Software
BTHPROBS.CPL = Bluetooth-Geräte
DESK.CPL = Anzeige
FIREWALL.CPL = Firewall
HDWWIZ.CPL = Hardware-Assistent
INETCPL.CPL = Vorgabeet
INTL.CPL = Region/Sprache
IRPROBS.CPL = Infrarot
JOY.CPL = Gamecontroller
MAIN.CPL = Maus
MMSYS.CPL = Sound/Audio
NCPA.CPL = Netzwerk
NETSETUP.CPL = Netzwerk-Installation
NUSRMGR.CPL = Benutzerkonten
POWERCFG.CPL = Energie
SYSDM.CPL = System
TELEPHON.CPL = Telefon/Modem
TIMEDATE.CPL = Datum/Uhrzeit
WSCUI.CPL = Sicherheitscenter
WUAUCPL.CPL = Automatische Updates

ringli 14. Nov 2007 10:15

Re: Symbole der Systemsteuerung anzeigen
 
Danke für eure Antworten. Mein Problem ist nicht wie ich ein Systemsteuerungsapplet via ShellExecute aufrufe, das weiß ich. Vielleicht habe ich mich nicht richtig verständlich ausgedrückt. Ich versuche es mal besser zu erklären:

Mit dem Code aus der Codelib lasse ich mir die verfügbaren Systemsteuerungsapplets auf dem jeweiligen Rechner anzeigen. Dies beinhaltet ja auch Systemsteuerungsapplets von Fremdherstellern (z.B. von Antivirenprogrammen oder Soundkartentreibern). Das heisst hier würde mir die Liste der bekannten Applets nicht weiterhelfen.

Ich muss also durch Auswahl auf eines der aufgelisteten Icons im Listview irgendwie auf den kompletten Pfad des dazugehörigen Applets (z.B. C:\Program Files\Realtek\InstallShield\RTSndMgr.cpl) kommen um dieses ausführen zu können.

Hoffe ich habe mein Problem jetzt besser beschrieben. :gruebel:

soulies 14. Nov 2007 10:53

Re: Symbole der Systemsteuerung anzeigen
 
alle *.cpl Dateien, also von M$ und Fremdanbietern befinden sich im System-Verzeichnis ['system32'] ...

dadurch das du weißt welche zu M$ gehören - weißt du auch welche von Fremdanbietern stammen ...

vllt. kommt man so zu einer logik um die entsprechenden applets auszuführen ...



cya

ringli 14. Nov 2007 10:57

Re: Symbole der Systemsteuerung anzeigen
 
Zitat:

Zitat von soulies
alle *.cpl Dateien, also von M$ und Fremdanbietern befinden sich im System-Verzeichnis ['system32'] ...

Stimmt so nicht. Das Systemsteuerungsapplet für das LiveUpdate von Symantec befindet sich bspw. im Verzeichnis C:\Program Files\Symantec\LiveUpdate\S32LUCP2.CPL

Ausserdem komme ich davon immer noch nicht vom ausgewählten Icon zum dazugehörigen Applet.

bitsetter 14. Nov 2007 11:34

Re: Symbole der Systemsteuerung anzeigen
 
Hallo,

mit der Prozedur GetCPLCaptions() aus der Code-Lib kannst du den Anzeige-Namen auslesen. Das ist also der Name den die einzelnen Items im Listview haben.
Unter Windows XP stehen die cpl Dateien von Fremdanbietern unter dem Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Control Panel\Cpls und unter Win9X in der Control.ini unter [MMCPL].
Du könntest dann mit der Prozedur GetCPLCaptions() wo du den Pfad zu den einzelnen .cpl Dateien übergibst die Namen auslesen und mit den Items des Listview vergleichen.

EDIT: Dann könnte man eigentlich gleich mit LoadImage() das entsprechende Icon aus der cpl Datei laden und im Listview anzeigen. Der Index dazu steht in der Variable CPLInfo.idIcon.

ringli 14. Nov 2007 12:58

Re: Symbole der Systemsteuerung anzeigen
 
Der Tipp mit GetCPLCaptions ist schon mal nicht schlecht und auch der Tipp mit dem Ort in der Registry ist sehr hilfreich. ABER, es gibt noch ein ganz anderes Problem wie ich grade feststellen muss.

Mit dem Code aus der CodeLib erhalte ich 52 Einträge die sich in der Systemsteuerung befinden. Das stimmt auch mit der Anzeige in der Windows-Systemsteuerung überein. Wenn ich aber meine Festplatte nach CPL-Dateien durchsuchen lasse, komme ich ohne Dubletten nur auf 23 Dateien. In der Registry unter HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Con trol Panel\Cpls habe ich gesehen das dort auch ein paar DLL-Dateien eingetragen sind, aber selbst mit denen zusammen komme ich noch nicht mal auf die Hälfte der tatsächlich in der Systemsteuerung vorhandenen Einträge.

Da muss es doch noch irgendeine Funktion oder einen Trick geben mit dem Windows das realisiert. :gruebel:

marabu 14. Nov 2007 13:02

Re: Symbole der Systemsteuerung anzeigen
 
Die von mir verlinkte MS Support Seite erklärt diese Einzelheiten eigentlich genau.

SirThornberry 14. Nov 2007 13:38

Re: Symbole der Systemsteuerung anzeigen
 
@devidespe: WinExec solltest du schleunigst ersetzen. Dies ist schon seit einigen jahren depricated. Wenn du es weiterhin verwendest darfst du dich nicht wundern wenn mit dem nächsten Update die Funktion im Betriebssystem beseitigt ist.

bitsetter 14. Nov 2007 14:23

Re: Symbole der Systemsteuerung anzeigen
 
Zitat:

Zitat von ringli
Da muss es doch noch irgendeine Funktion oder einen Trick geben mit dem Windows das realisiert. :gruebel:

Du kannst dir auch mal Punkt 6.3. in Luckie seinen Win32-API Tutorials für Delphi durchlesen, da steht es auch ganz gut beschrieben drin.

DevidEspenschied 14. Nov 2007 17:53

Re: Symbole der Systemsteuerung anzeigen
 
Zitat:

Zitat von SirThornberry
@devidespe: WinExec solltest du schleunigst ersetzen. Dies ist schon seit einigen jahren depricated. Wenn du es weiterhin verwendest darfst du dich nicht wundern wenn mit dem nächsten Update die Funktion im Betriebssystem beseitigt ist.

Ich glaube, bisher hat Borland/CodeGear die Funktion immer noch unterstützt, und unter Vista und den ganzen Serverversionen läuft das auch problemfrei. Aber mit "obsolete" erkenne ich schon die Vorzeichen dafür, dass der Support tatsächlich bald wegfällt. Die Routinen werden deswegen wohl demnächst durch ShellExecute ersetzt. Danke für den Tipp.

ringli 14. Nov 2007 20:18

Re: Symbole der Systemsteuerung anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So nachdem ich noch eine ganze Weile herumprobiert und gesucht habe, habe ich die Lösung des Problems gefunden. Ich hänge das Testprojekt mal an, vielleicht kann es ja nochmal jemand gebrauchen oder hat Verbesserungsvorschläge.

Danke allen nochmal für die Unterstützung. :)

bitsetter 14. Nov 2007 21:14

Re: Symbole der Systemsteuerung anzeigen
 
Deine Demo habe ich gerade getestet, bei mir lassen sich allerdings nur einige Systemsteuerungsapplet unter WindowsXP ausführen. Der Rest funktioniert nicht, in der Variable .rAppletPath steht dann nur der Name des Applet drin.

ringli 15. Nov 2007 10:47

Re: Symbole der Systemsteuerung anzeigen
 
Ja du hast recht. :cry:

Scheinbar hat die verwendete Funktion unter Windows XP (vermutlich auch noch kleinere Windowsversionen) ein Problem die GUID's zu ermitteln. Unter Windows Vista funktioniert es nämlich problemlos. Leider habe ich im Moment keine Ahnung woran das liegen könnte. :(

soulies 16. Nov 2007 12:36

Re: Symbole der Systemsteuerung anzeigen
 
hoi,

falls du die JEDI's installiert hast, dann hilft dir vllt. die Komponente

'JvAppletDialog'

zur Lösung des Problems auf XP Systemen.



cya

ringli 16. Nov 2007 22:03

Re: Symbole der Systemsteuerung anzeigen
 
Nein habe die Jedis nicht installiert. Aber werde ich wohl mal machen müssen wenn sonst keiner eine Idee hat.

Aremo 30. Dez 2011 15:54

AW: BTHPROBS.CPL - Symbole der Systemsteuerung anzeigen
 
Die Liste der Applets *.CPL ist ja ganz hilfreich, nur, der Aufruf mit BTHPROBS.CPL als Parameter funktioniert nicht - weder mit WinExec noch mit shellExecute.
Die Gegenprobe mit TIMEDATE.CPL funktioniert hingegen.

Weiteres Indiz: Ruft man unter START -> Ausführen TIMEDATE.CPL auf, funktioniert der Aufruf,
mit BTHPROBS.CPL funktioniert dieser Aufruf jedoch nicht. Fehlermeldung (auf mehreren Rechner unter Win XP und Win Vista): "bthprobs.cpl konnte nicht gefunden werden. ...", obwohl unter Windows/system32/ gleichermaßen vorhanden.

Es scheint so zu sein, dass der programmgesteuerte Aufruf der Bluetooth-Einstellungen unter Windows irgendwie geschützt ist. Auch eine Suche auf den Windows support-seiten und googeln brachte keinen Hinweis auf Abhilfe.

Hat jemand Erfahrungen damit ?

Aremo 30. Dez 2011 16:43

AW: Symbole der Systemsteuerung anzeigen
 
Die schweren Fehler findet man sofort, die Suche nach Lösungen für die kleinen Fehler dauert oft Stunden.

Das CPL (Control Panel Applet) für Bluetooth-Geräte heißt nicht BTHPROBS.CPL wie oben in der Liste vom 14.11.2007 aufgelistet sondern BTHPROPS.CPL , damit klappt es jetzt auch.

Der Tippfehler müsste/sollte wohl auch in der obigen Liste korrigiert werden, oder ? um Nachahmerfehler zu vermeiden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr.

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