evinben
Goto Top

Wenn der Schlüssel des Kontextmenü-Eintrages bzw. sein Anzeigename in der Registry umbenannt wurde, dann diesen im IE sofort aktualisiert anzeigen

Verwendet wird IE10 unter Windows 7 x32

Hallo,

ich möchte ein Kontextmenü-Eintrag einbauen, der je nach aktuellem Zustand z. B. "Deaktivieren" und "Aktivieren" heißen sollen. Wenn der Schlüssel in der Registry von "Deaktivieren" auf "Aktivieren" umbenannt und IE mit der Taste F5 aktualisiert wird, dann aktualisiert sich das Kontextmenü leider nicht mit, sodass der eigene Kontextmenü-Eintrag weiterhin als "Deaktivieren" angezeigt.

- Wie kann das Kontextmenü im Internet Explorer ohne IE-Neustart aktualisiert werden? Gibt es hierfür ein VB-Skript?

- Wie kann ein Symbol für eigene Kontextmenü-Einträge eingebaut werden?

Ich habe sehr viel recherchiert, aber nichts Relevantes war im Netz zu finden.

Wenn ich folgendes Skript von Desktop aus ausführe, dann wird das aktive Fenster von IE aktualisiert:
set ws = CreateObject("Wscript.shell")  
 ws.AppActivate ("Internet Explorer")  
 ws.sendkeys("{f5}")  

Wenn ich das Skript in einer htm-Datei einbaue und ihr Pfad in der Registry in Standard REG_SZ für den jeweiligen Kontextmenü-Eintrag einfüge, dann aktualisiert sich das IE-Fenster beim Aufruf des Eintrages über das Kontextmenü leider nicht. So sieht die htm-Datei aus:
<HTML>
 < SCRIPT LANGUAGE="VBSCRIPT">   
 set ws = CreateObject("Wscript.shell")  
 ws.AppActivate ("Internet Explorer")  
 ws.sendkeys("{f5}")  
 < /SCRIPT>
 < /HTML>

Ansonsten andere Codes, z. B. zum Ausführen einer Datei, funktionieren dagegen:
<HTML>
 < SCRIPT LANGUAGE="VBSCRIPT">   
set Wshshell = CreateObject("Shell.Application")  
Wshshell.ShellExecute "cmd.exe", "/c ""TEST.vbs"" " & str,"", "runas", 0  
</SCRIPT>
 < /HTML>

Würde das Aktualisieren eventuell ohne RunAs möglich sein (also ohne UAC/Kontensteuerungsabfrage) und wie?


Vielen Dank für eure Hilfe

Gruß
Evinben

Content-ID: 207775

Url: https://administrator.de/forum/wenn-der-schluessel-des-kontextmenue-eintrages-bzw-sein-anzeigename-in-der-registry-umbenannt-wurde-dann-207775.html

Ausgedruckt am: 25.12.2024 um 18:12 Uhr

Biber
Biber 10.06.2013 um 21:39:35 Uhr
Goto Top
Moin evinben,

was eventuell funktionieren könnte :

mit VBS inetcpl.cpl öffnen, per Sendkeys
ALT-F TAB TAB TAB ENTER ESC
(Register Allgemein > Farben > OK > ESC schließt Fenster, danach lädt der IE offenbar seine Konfiguration, die er sich sonst NUR BEIM ProgrammSTART holt neu.

ausführen lassen, das funktioniert im IE8 unter XP und wird wohl auf ähnliche Art und Weise auch beim IE10 funktionieren.

Allerdings gibt es sicherlich Punktabzug bei der B-Note (Ästhetik und Eleganz).

Grüße
Biber
P.S. & OT:
Zusatzfrage an dich: Gäbe es bei deiner Idee auch irgendwann den Punkt, an dem du sagen würdest: "ja nee, da ist nur eine Frickellösung möglich.. ich stell mal das Projekt ein?"-

Ich meine, wenn inzwischen sogar schon Drohnen-Projekte nach wenigen Arbeitsjahrhunderten und ein paar hundert Milliarden verbrannten Steuereuronen gestoppt werden, dann solltest auch du erwägen....

Oder wie das Tao und Angies Imageberater immer sagen: Lerne, dich von Dingen zu trennen, die dir wichtig sind..
evinben
evinben 11.06.2013 um 06:55:53 Uhr
Goto Top
Hallo Biber,

Allerdings gibt es sicherlich Punktabzug bei der B-Note (Ästhetik und Eleganz).
leider hast du Recht ;-(

Jedoch habe ich nun zumindest eine funktionelle Lösung, bis einer hier den internen Befehl zur Aktualisierung von IE verrät.

Gruß
Evinben
Biber
Biber 11.06.2013 um 16:36:00 Uhr
Goto Top
Moin evinben,

eine kleine Vereinfachung kann ich noch anbieten.

' IE_RefreshKrams.vbs  
' für %windir% korrekten Pfad einsetzen oder expandieren:  
set oShell = CreateObject("Shell.Application")  
set wshell = CreateObject("Wscript.shell")  
oShell.ShellExecute "%windir%\System32\RUNDLL32.EXE", "inetcpl.cpl, ShowLanguageDialog"  
wscript.sleep(100)
wShell.Sendkeys "{ENTER}"  
wscript.quit
 


Voila. ;)

Aber nicht getestet unter Win8/IE 10 oder höher.

Grüße
Biber
evinben
evinben 11.06.2013 um 19:18:00 Uhr
Goto Top
Hallo Biber,

jepp, das funktioniert, auch wenn es etwa Animationen „merkwürdig erscheinender Fenster“ abspielt.

Ich frage mich nur, in welcher Hinsicht deine letzte Lösung gegenüber deiner vorherstehenden besonders gut sein sollte. Sieht sie scriptisch wegen ShowLanguageDialog etwa stylischer aus?
OK, oben sind es (habe ich nun gezählt: 1.ALT-F, 2.TAB, 3.TAB, 4.TAB, 5ENTER und 6.ESC) genau sechs Schritte erforderlich.
Nun sind es (1.ShowLanguageDialog und 2.ENTER für OK) nur 2 Schritte.

Nicht schlecht.. Fein du Füchsle face-wink
O.. sorry Biber natürlich bist du.

Die Namen der Kontextmenü-Einträge werden wie gewollt aktualisiert - klasse!
Nun können die erstellten Kontext-Optionen als Switcher gehandhabt werden, da der Eintrag mal so (z. B. deaktivieren) und mal so (z. B. aktivieren) heißt, und muss daher nicht mehr doppelt vorhanden sein.


Gruß
Evinben
rubberman
rubberman 11.06.2013 aktualisiert um 19:35:50 Uhr
Goto Top
Hallo evinben.
Zitat von @evinben:
...bis einer hier den internen Befehl zur Aktualisierung von IE verrät.
Location.Reload?

*.vbs
Option Explicit
Dim objShell, colWindows, objWindow, objDoc

Set objShell = CreateObject("Shell.Application")  
Set colWindows = objShell.Windows
For Each objWindow In colWindows
  If InStr(1, objWindow.FullName, "iexplore.exe", vbTextCompare) Then  
    Set objDoc = objWindow.Document
    objDoc.Location.Reload(True)
    WScript.Sleep 500
    Set objDoc = Nothing
  End if
Next
Set objWindow = Nothing
Set colWindows = Nothing
Set objShell = Nothing
Bibers Version sollte aber trotzdem die bessere Wahl sein. In meinem Code wird jede Seite neu geladen. Nicht im Sinne des Erfinders ...

Grüße
rubberman
evinben
evinben 11.06.2013 um 19:52:08 Uhr
Goto Top
Hallo rubberman,

...bis einer hier den internen Befehl zur Aktualisierung von IE verrät.
ich habe hier nicht gemeint die Webseite zu aktualisieren, sondern das IE-Fenster systemintern.

Die Reload-Methode war mir lang bekannt, was in diesem Falle leider nicht weiter hilft.

Danke für's Mitmachen natürlich!

Und um das hier noch zu verfeinern, veröffentliche ich nachfolgend die Kommentare zu diesem Biber-Skript:

'Falls sich z. B. die Namen der Kontextmenü-Einträge in der Registrierung geändert haben, kann mit diesem Skript 
'der Explorer aktualisiert werden, um die neuen Namen anzuzeigen. 
'Diese Lösung wird insbesondere dann nützlich, wenn Einträge im Kontextmenü des Internet Explorers 
'hinzugefügt werden, die als Umschalter (Switcher) arbeiten. 
'D. h. der Eintrag heißt einmal z. B. "Flash Player deaktivieren" und einmal "Flash Player aktivieren". 
'Vor der hier gefundenen Lösung zur Aktualisierung von IE, waren die Einträge im Kontextmenü daher doppelt vorhanden,  
'was nicht nur mehr Platz genommen hat und auch sehr unübersichtlich war, sondern vor allem zur Verwirrung gestiftet hat,  
'da für den Anwender der Stand der letzten Aktion nicht immer bekannt war. 


'[content:207775#846821] 

Achtung: bei mir hat der Skript erst dann angesprochen, sobald ich den Pfad zu der RUNDLL32.EXE-Datei im Skript expandiert habe (so wie der Biber es im Vorfeld - "im Falle eines Problems" - empfohlen hatte).

Gruß
Evinben
rubberman
rubberman 11.06.2013 um 20:35:41 Uhr
Goto Top
Oh, da bin ich meilenweit am Ziel vorbei.

Intern wird sicher die API bemüht (InternetSetOption mit INTERNET_OPTION_SETTINGS_CHANGED und/oder INTERNET_OPTION_REFRESH als zweiten Parameter). Da bekommst du aber keinen Zugang per J-/VBScript face-sad

Grüße
rubberman