Seite 1 von 2

Systemsteuerungsicon, Windows-Dienste und Umgebungsvariablen

Verfasst: 01.09.2011 11:27
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

Re: zwei windows fragen und eine cross-frage

Verfasst: 01.09.2011 11:30
von NicTheQuick
Die Antwort zu der Dienste-Frage findest du hier im Forum. Einfach mal suchen.

Re: zwei windows fragen und eine cross-frage

Verfasst: 01.09.2011 11:43
von Kiffi
AdHoc zu Deiner ersten Frage:

Eigene Programme oder fremde CPLs in die Systemsteuerung einbinden

Grüße ... Kiffi

Re: zwei windows fragen und eine cross-frage

Verfasst: 01.09.2011 11:51
von delikanli_19_82
vielen danke für eure tipps :-)

Re: zwei windows fragen und eine cross-frage

Verfasst: 01.09.2011 12:26
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.

Re: zwei windows fragen und eine cross-frage

Verfasst: 02.09.2011 01:11
von delikanli_19_82
hmm. das ist ja sehr interessant. das werde ich auch mal ausprobieren. danke für den tipp rsbasic. :-)

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Verfasst: 07.09.2011 23:25
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 ....

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Verfasst: 07.09.2011 23:41
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

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Verfasst: 08.09.2011 00:22
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:

Re: Systemsteuerungsicon, Windows-Dienste und Umgebungsvaria

Verfasst: 30.10.2015 23:20
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. :)