Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

All the troubles you have will pass away very quickly.


rocksolid / de.comp.lang.vbclassic / RegOpenKeyEx Explorer Kontext Menü Erweiterung

SubjectAuthor
o RegOpenKeyEx Explorer Kontext Menü ErweiterungWendelin Uez

1
Subject: RegOpenKeyEx Explorer Kontext Menü Erweiterung
From: Wendelin Uez
Newsgroups: de.comp.lang.vbclassic
Organization: A noiseless patient Spider
Date: Sun, 5 Nov 2023 16:37 UTC
Path: i2pn2.org!i2pn.org!eternal-september.org!feeder2.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: wue...@online.de (Wendelin Uez)
Newsgroups: de.comp.lang.vbclassic
Subject: RegOpenKeyEx__Explorer_Kontext_Menü_Erweiterung
Date: Sun, 5 Nov 2023 17:37:44 +0100
Organization: A noiseless patient Spider
Lines: 88
Message-ID: <ui8gdj$2g3n$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain;
format=flowed;
charset="iso-8859-1";
reply-type=original
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 5 Nov 2023 16:38:11 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="f7b9a69516cd82156cb346326b36d941";
logging-data="82039"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19qJ8W2RAzp6IJ5VvvHtv06"
Cancel-Lock: sha1:X1a88x6Umts6xdGMl9JiAZaFGeY=
X-MSMail-Priority: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.3.9600.20671
X-Newsreader: Microsoft Windows Mail 6.0.6002.18005
X-Priority: 3
View all headers

Ich möchte das Explorer-Kontextmenü per Code um einen Eintrag erweitern und
habe im Netz dazu nur genau den einen untenstehenden Beispielcode gefunden.
Der Men+eintrag soll per Code angelegt und wieder entfernt werden können.

Anlegen funktioniert immer und wiederholungstolerant (d.h. auch mehrfaches
Anlegen ergibt immer nur einen Eintrag), aber die Löschfunktion verhält sich
merkwürdig:

Wenn z.B. der angelegte Beitrag versehentlich ein zweites Mal gelöscht
werden soll und danach wieder angelegt wird, dann klappt das zwar mit dem
erneut anlegen, aber der folgende Löschversuch schlägt fehl.

Konkret liefert in diesem Fall bereits der erste Aufruf von RegOpenKeyEx in
der Function Delete_ContextItem den Fehlercode 2 und damit kein Handle hKey
auf den Eintrag, selbst wenn das Programm neu gestartet wurde, im Explorer
der Menüeintrag angezeigt wird und eigentlich alles auf Neustart steht.

Wieso verhält sich RegOpenKeyEx dann unterschiedlich bei dennselben
Ausgangsbedingungen bez. Existenz des Eintrags?

Hier der Code aus dem Netz:

Public Function Delete_ContextItem( _
ByVal strText As String) As Boolean

Dim lResult As Long
Dim hKey As Long
Dim strKey As String

' Registry-Zweig öffnen
strKey = "*\shell\" + strText
'**** hier geht's manchmal schief: ***
lResult = RegOpenKeyEx(HKEY_CLASSES_ROOT, strKey, _
0, KEY_SET_VALUE, hKey)

If lResult = 0 Then
' SubKey \Command löschen
lResult = RegDeleteKey(hKey, "Command")
If lResult = 0 Then
' Registry-Zweig schliessen
Call RegCloseKey(hKey)

' Registry-Zweig öffnen "*\shell)"
strKey = "*\shell"
lResult = RegOpenKeyEx(HKEY_CLASSES_ROOT, strKey, _
0, KEY_SET_VALUE, hKey)

If lResult = 0 Then
' SubKey "strText" löschen
lResult = RegDeleteKey(hKey, strText)
Delete_ContextItem = (lResult = 0)

' Registry-Zweig schliessen
Call RegCloseKey(hKey)
End If

Else
' Registry-Zugriff schliessen
Call RegCloseKey(hKey)
End If
End If
End Function

Und für den, den's interessiert, die Sub um den Eintrag anzulegen:

Public Sub ProgrammRegistrierung(ByVal strMenuText As String, _
ByVal strAnwendung As String)

Const HKEY_CLASSES_ROOT = &H80000000
Const REG_SZ = 1

Dim Key As String
Dim Result As Long
Dim phkResult As Long
Dim strText As String

Key = "*\shell\" + strMenuText + "\command"
Result = RegCreateKey(HKEY_CLASSES_ROOT, Key, phkResult)

strText = strAnwendung + " %1"
Result = RegSetValue(HKEY_CLASSES_ROOT, Key, REG_SZ, _
strText, Len(strText))
End Sub


rocksolid / de.comp.lang.vbclassic / RegOpenKeyEx Explorer Kontext Menü Erweiterung

1
server_pubkey.txt

rocksolid light 0.9.12
clearnet tor