Delphi-PRAXiS
Seite 1 von 2  1 2      

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

devidespe 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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
Seite 1 von 2  1 2      

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