Registry - Eintrag löschen?

Anfängerfragen zum Programmieren mit PureBasic.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Registry - Eintrag löschen?

Beitrag von Ractur »

Hallo,

mit:

Code: Alles auswählen

  If RegCreateKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS 
    StringBuffer$ = Ergebnis$ + "Programm.exe"    ; change Path to a string with the full path to your program!!!
    RegSetValueEx_(NewKey, "Programm", 0, #REG_SZ,  StringBuffer$, Len(StringBuffer$)+1)   ; change "Programname" to your individual name
    RegCloseKey_(NewKey)
Habe ich einen neuen Eintrag angelegt! Das war weiter nicht tragisch, jedoch möchte ich wenn man das Programm deinstalliert den Schlüssel auch gerne wieder löschen:

Allerdings, bevor ich mir die ganze Registry zerballer wollt ich jemand mal drüber schauen lassen ob das so richtig geht:

Code: Alles auswählen

If RegDeleteKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS 
    StringBuffer$ = Ergebnis$ + "Programm.exe"    ; change Path to a string with the full path to your program!!!
    RegDeleteKeyValue_(NewKey, "Programm", 0, #REG_SZ,  StringBuffer$, Len(StringBuffer$)+1)   ; change "Programname" to your individual name
    RegCloseKey_(NewKey)
Danke!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Reicht denn keine Verknüpfung im Autostart-Ordner, dabei kannste weniger
"zerballern" und ist Anwenderfreundlicher.
Deine Registry-Einträge funktionieren nur mit Administrator-Rechten, diese
haben aber immer weniger Anwender, zumindest seit Vista und das ist auch
gut so :wink:

Code um eine Verknüpfung zu erstellen findest hier im Forum, genauso wie
Code um den Autostart-Ordner zu ermitteln.

Es sei denn, Du erstellst ein Setup-Programm...

Gruß
Thomas

// Nachtrag:
CreateShortcut
SpecialFolders
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

OT
ts-soft Signatur hat geschrieben:) : (
Müßte das nicht so aussehen? :wink:

(. | .)
.) . (.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag von Ractur »

Hi,
ts-soft hat geschrieben:Reicht denn keine Verknüpfung im Autostart-Ordner, dabei kannste weniger
"zerballern" und ist Anwenderfreundlicher.
Deine Registry-Einträge funktionieren nur mit Administrator-Rechten, diese
haben aber immer weniger Anwender, zumindest seit Vista und das ist auch
gut so :wink:
Danke für die prima Tips und den 2 Links! :allright: Hat mir sehr gut weitergeholfen! Sehe ich genauso wie Du wegen der Registry, allerdings habe ich nicht diese 2 Links gefunden, obwohl ich gestern noch eine ganze Weile gesucht hatte.

Hier noch das Beispiel, vielleicht kann es ja jemand gebrauchen oder jemand verbessern!

Grüsse Matthias

Code: Alles auswählen

#CSIDL_STARTUP=$07
Procedure.s SpecialFolder(folderno)
  listptr=0
  result$=Space(270)
  SHGetSpecialFolderLocation_(0,folderno,@listptr)
  SHGetPathFromIDList_(listptr,@result$)
  ProcedureReturn Trim(result$)
EndProcedure


;** CreateShortcut
;** .Path: for the Link ("c:\PureBasic\purebasic.exe")
;** .Link: "C:\Documents and Settings\User\Desktop\PureBasic.lnk"
;** .WorkingDir: "c:\PureBasic"
;** .Argument: "%1"
;** .ShowCommand: #SW_SHOWNORMAL or #SW_SHOWMAXIMIZED or #SW_SHOWMINIMIZED
;** .Description: "Start PureBasic"
;** .HotKey: no need to use this :)
;** .IconFile: "c:\PureBasic\purebasic.exe"
;** .IconIndex: 1

ProgrammPath$ = GetCurrentDirectory()
ProgrammPath$ + "MeinProgramm.exe"

ProgrammLink$ + SpecialFolder(#CSIDL_STARTUP) + "\MeinProgramm.lnk"

ProgrammWorking$ + GetCurrentDirectory()
ProgrammArgument$ + ""
ProgrammDescription$ + "Mein Programm starten"
ProgrammIndex = 1

Procedure CreateShortcut(Path.s, Link.s, WorkingDir.s = "", Argument.s = "", ShowCommand.l = #SW_SHOWNORMAL, Description.s = "", HotKey.l = #Null, IconFile.s = "|", IconIndex.l = 0) 
  Protected psl.IShellLinkA, ppf.IPersistFile, mem.s, hres.l, Result.l
  If IconFile = "|" : IconFile = Path : EndIf
  If Not WorkingDir : WorkingDir = GetPathPart(Path) : EndIf
  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_ShellLink,0,1,?IID_IShellLink,@psl) = 0
    Set_ShellLink_preferences:
    psl\SetPath(@Path)
    psl\SetArguments(@Argument)
    psl\SetWorkingDirectory(@WorkingDir)
    psl\SetDescription(@Description)
    psl\SetShowCmd(ShowCommand)
    psl\SetHotkey(HotKey)
    psl\SetIconLocation(@IconFile, IconIndex)
    ShellLink_SAVE:
    If psl\QueryInterface(?IID_IPersistFile,@ppf) = 0
      mem.s = Space(1000)
      MultiByteToWideChar_(#CP_ACP, 0, Link, -1, mem, 1000)
      hres = ppf\Save(@mem,#True)
      Result = 1
      ppf\Release()
    EndIf
    psl\Release()
  EndIf
  CoUninitialize_()
  ProcedureReturn Result
  DataSection
    CLSID_ShellLink:
    Data.l $00021401
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    IID_IShellLink:
    Data.l $000214EE
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    IID_IPersistFile:
    Data.l $0000010B
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
  EndDataSection
EndProcedure 

CreateShortcut(ProgrammPath$,ProgrammLink$,ProgrammWorking$,ProgrammArgument$,#SW_SHOWNORMAL,ProgrammDescription$,0,"|",1)
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

ts-soft hat geschrieben:Deine Registry-Einträge funktionieren nur mit Administrator-Rechten, diese
haben aber immer weniger Anwender, zumindest seit Vista und das ist auch
gut so :wink:
Gilt das auch für den HKEY_CURRENT_USER-Zweig ?
Wäre doch irgendwie seltsam, wenn mein Programm dort nichts mehr speichern dürfte. (Schliesslich gibts dort den gleichen Schlüssel, den ich bei Bedarf benutze)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

HeX0R hat geschrieben:
ts-soft hat geschrieben:Deine Registry-Einträge funktionieren nur mit Administrator-Rechten, diese
haben aber immer weniger Anwender, zumindest seit Vista und das ist auch
gut so :wink:
Gilt das auch für den HKEY_CURRENT_USER-Zweig ?
Wäre doch irgendwie seltsam, wenn mein Programm dort nichts mehr speichern dürfte. (Schliesslich gibts dort den gleichen Schlüssel, den ich bei Bedarf benutze)
Nein, ich bezog mich auf sein HKEY_LOCAL_MACHINE und wollte es nur kurz
machen, bevor er weiter auf Registry-Einträge pocht, gerade in der Run Section mag ich die nicht :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Naja, mir persönlich ist es einfach zuviel Overhead einen Shortcut anzulegen.
Den Registry-Eintrag mach ich mit nem 4-Zeiler.

Ich gehe einfach mal davon aus (was eigentlich Blödsinn ist, aber mein Gewissen beruhigt :mrgreen: ), dass der User so Dinge wie msconfig kennt.
Von daher ist das Entfernen aus dem Autostart auch nur ein Mausklick entfernt.

Es ist auch seltsam, dass kaum ein Programm den Autostart-Ordner heutzutage benutzt.
Entweder sind das alles genauso faule Schweine wie ich, oder die ahnen, dass dieser Ordner irgendwann in der Zukunft Geschichte sein wird.
Antworten