Systemsteuerungsicon, Windows-Dienste und Umgebungsvariablen

Anfängerfragen zum Programmieren mit PureBasic.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Systemsteuerungsicon, Windows-Dienste und Umgebungsvariablen

Beitrag von delikanli_19_82 »

hallo leute,

diesmal habe ich mal wieder paar windows-spezifische frage:

wie bekomme ich ein in pb geschriebenes programm mit einem erwünschten programm-symbol in die systemsteuerung hinzugefügt? ich meine so, das die anwendung über die systemsteuerung geladen werden kann, als ob es ein bestandteil der systemsteuerung wäre?

wie kann man das eigene programm, das in pb gecodet wurde, als windows-dienst einrichten? geht das? und wenn ja wie?

und die cross-frage:

ich würde gerne globale umgebungsvariablen unter win, lin und mac einrichten und diese sollen dann bis zum herunterfahren des systems bzw. bis zum nächsten systemstart bestehen bleiben und von externen anwendungen abgerufen werden können, wie das so mit umgebungsvariablen üblich ist. wie kann ich das mittels pb machen?

mfg

kurt

Thread-Titel aussagenkräftiger gemacht von NicTheQuick
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: zwei windows fragen und eine cross-frage

Beitrag von NicTheQuick »

Die Antwort zu der Dienste-Frage findest du hier im Forum. Einfach mal suchen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: zwei windows fragen und eine cross-frage

Beitrag von Kiffi »

AdHoc zu Deiner ersten Frage:

Eigene Programme oder fremde CPLs in die Systemsteuerung einbinden

Grüße ... Kiffi
a²+b²=mc²
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: zwei windows fragen und eine cross-frage

Beitrag von delikanli_19_82 »

vielen danke für eure tipps :-)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: zwei windows fragen und eine cross-frage

Beitrag von RSBasic »

Kiffi hat geschrieben:AdHoc zu Deiner ersten Frage:

Eigene Programme oder fremde CPLs in die Systemsteuerung einbinden

Grüße ... Kiffi
Zusatz: Wenn du nicht unbedingt über die Registry machen möchtest, kannst du auch eigene CPL-Dateien mit PB erstellen, indem du einfach DLL-Dateien erstellst und diese einfach umbenennst. (*.dll -> *.cpl)
Das habe ich damals unter Windows XP ausprobiert und hat funktioniert. Aber ob es mit Vista/7 funktioniert, weiß ich leider nicht.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: zwei windows fragen und eine cross-frage

Beitrag von delikanli_19_82 »

hmm. das ist ja sehr interessant. das werde ich auch mal ausprobieren. danke für den tipp rsbasic. :-)
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Beitrag von TheCube »

hmm. das ist ja sehr interessant. das werde ich auch mal ausprobieren. danke für den tipp rsbasic. :-)
Und ? .... Funktionierts als .DLL->.CPL? Bei mir nämlich nicht. (Win7 32)
Auch nach Benutzung der Infos von Kiffis Link gibt´s bei mir kein Icon.

Benutzter Testcode, als DLL compiliert:

Code: Alles auswählen

ProcedureDLL AttachProcess(Instance)  ; *** Wird ausgeführt
    MessageRequester("DLL Info", "AttachProcess " + "DLL loaded.")
    EndProcedure
  
  
    ; Called when the program release (free) the DLL
    ProcedureDLL DetachProcess(Instance) ; *** Wird ausgeführt
    MessageRequester("DLL Info", "DetachProcess ")
    EndProcedure
  
  
    ; Both are called when a thread in a program call or release (free) the DLL
    ProcedureDLL AttachThread(Instance)
    MessageRequester("DLL Info", "AttachThread ")
    EndProcedure
  
    ProcedureDLL DetachThread(Instance)
    MessageRequester("DLL Info", "DetachThread ")
    EndProcedure

ProcedureDLL TryIt() 
  OpenWindow(1,300,300,300,200,"TryIt",#PB_Window_SystemMenu) 
  
  Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndProcedure 
Machmal beim Booten und immer beim Aufruf der Systemsteuerung gibts Attachprocess und Detachprocess, und dann schmiert der Explorer ab. Win 7 berappelt sich dann wieder und beim zweiten Aufruf geht Systemsteuerung auf, aber eben ohne (neues) Icon.
Werde das gelegentlich nochmal mit einer "echten" EXE probieren ....
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Beitrag von RSBasic »

Da war doch irgendwas mit CPlApplet()...
Vielleicht hilft dir diese Seite weiter: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

\\Edit:
http://www.purearea.net/pb/CodeArchiv/W ... Example.pb

\\Edit2:
Funktioniert auch unter Windows 7:
Bild
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Beitrag von TheCube »

\\Edit:
http://www.purearea.net/pb/CodeArchiv/W ... Example.pb
\\Edit2:
Funktioniert auch unter Windows 7
Danke für den Link an RSBasic und natürlich an den Autor Andreas ...
funktioniert super und das ohne Registryfummelei :allright:
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Beitrag von TheCube »

Ist zwar schon 4 Jahre her, aber ich denke es passt einfach gut hierhin ... obwohl in Anfänger.
Mein(e) betroffenen System(e) sind Win7 64Bit, aber im Moment alles mit PB5.30 32bit gemacht.

Hier erst mal der Testcode, dann meine Fragen:

Code: Alles auswählen

;###################### 
;Author : Andreas 
;###################### 
;Compiler-Option: DLL 
;nach Erstellen in CPL umbenennen und in 
;den Windows System-Ordner kopieren 
;Danach erscheint das icon in der Systemsteuerung 
;###################### 
;Das Beispiel öffnet lediglich Notepad und zeigt die 
;Autoexec.bat an. 
;###################### 

ProcedureDLL.l CPlApplet(hwndCPI.l,uMsg.l,lParam1.l,lParam2.l) 
  Shared Name.s,Info.s 
  
  #CPL_DBLCLK  = 5 
  #CPL_EXIT = 7 
  #CPL_GETCOUNT = 2 
  #CPL_INIT = 1 
  #CPL_INQUIRE = 3 
  #CPL_STOP = 6 
  #CPL_NEWINQUIRE = 8 
  
  Structure NEWCPLINFO 
    dwSize.l 
    dwFlags.l 
    dwHelpContext.l 
    lData.l 
    hIcon.l 
    szName.b[32] 
    szInfo.b[64] 
    szHelpFile.b[128] 
  EndStructure 
  
  Select uMsg 
    Case #CPL_INIT 
      ;beim Initieren die Variablen füllen 
      Name = "CPL-Test"             ;Name der unter dem Icon erscheint   (max. 32) 
      Info = "Ruft nur Notepad auf" ;Info die in der Statusbar erscheint (max. 64) 
      result = 1 
    Case #CPL_GETCOUNT 
      result = 1 ;1 Icon 
    Case #CPL_NEWINQUIRE 
      ;Informationen setzen 
      *cp.NEWCPLINFO = lParam2 
      *cp\dwSize = SizeOf(NEWCPLINFO) 
      *cp\hIcon = ExtractIcon_(0,"CPL-Test.cpl",0) 
      PokeS(@*cp\szName[0], Name) 
      PokeS(@*cp\szInfo[0], Info) 
      result = 0 
    Case  #CPL_DBLCLK 
      ;hier passiert alles was beim Doppelklick auf das Icon passieren soll 
      ;in diesem Fall wird Notepad gestartet 
      RunProgram("Notepad.exe","c:\autoexec.bat", "c:\", 0) 
      result = 0 
    Case #CPL_STOP 
      result = 0 
    Case #CPL_EXIT 
      result = 0 
  EndSelect 
  ProcedureReturn result 
EndProcedure  
Der Code wird als DLL compiliert, in .cpl umbenannt und als "CPL-Test.cpl" nach Windows/System32 kopiert.
In den Compiler Options ist bei "use Icon" ein .ico angegeben. Unicode an/aus habe ich durchprobiert.

[1]
Unter einer embedded-Version von Win7 sehe ich nach öffnen der Systemsteuerung folgenden Fehler:
Bei Name (dem Text am Icon) wird "C (32-bit)" angezeigt, und bei Info (Mauszeiger über auf Icon z.B.) nur "R",
also jeweils nur der erste Buchstabe. Auf einem standard Win7 ist es aber richtig angezeigt, könnte aber Zufall sein.
Was ist da vielleicht mittlerweile nicht mehr Win7-konform an dem älteren Codebeispiel ?
[2]
Das Icon in der Systemsteuerung ist nur das "leere Blatt", also scheint die Icon-Extraktion aus sich selbst nicht geklappt zu haben.
Wie kann ich das besser machen mit einer Datei ? (Also die .ico-Daten in der .cpl Datei integrieren, oder so ...)
Weil späteres Ziel ist natürlich statt dem Aufruf von Notepad.exe dort eigenen Code arbeiten zu lassen.
[3]
Kann ich in der Struktur oder sonstwo einen Wert angeben, um die Kategorie-Zugehörigkeit mit anzugeben ?
("Hardware und Sound", "Programme", "Darstellung und Anpassung", etc. gibt es ja da.)

Wäre toll, wenn da jemand die ein oder andere Idee hätte. :)
Antworten