Seite 1 von 1

Registry - Eintrag löschen?

Verfasst: 15.09.2008 06:52
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!

Verfasst: 15.09.2008 07:24
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

Verfasst: 15.09.2008 08:18
von rolaf
OT
ts-soft Signatur hat geschrieben:) : (
Müßte das nicht so aussehen? :wink:

(. | .)
.) . (.

Verfasst: 15.09.2008 12:02
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)

Verfasst: 16.09.2008 22:47
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)

Verfasst: 16.09.2008 22:54
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:

Verfasst: 16.09.2008 23:04
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.