lordofremixes
Goto Top

Internex Explorer beim Aufruf einer bestimmten Seite Icon ändern

Hallo zusammen,

ist es möglich, das Icon beim IE beim Aufruf einer bestimmten Seite zu ändern?
Betriebssystem ist Win 7 x64 mit IE11.

Hintergrund ist der: Ein Programm sagen wir mal 'xy' öffnet sich und läuft nur als Icon in der Taskleiste.
Um es zu starten, muss man dann auf das Icon draufklicken und dann öffnet sich der Internet Explorer mit http://xy

Das ist das ganze Programm. Da es ja dann im IE läuft, wird natürlich auch das IE Icon angezeigt.
Daher die Frage:
Kann man den IE dazu bringen, unter einer ausgeführten Bedingung (http://xy ist) geöffnet) sein Icon spezifisch zu ändern?

Hoffe die Fragestellung ist klar.

Gruß
lordofremixes

Content-Key: 272926

Url: https://administrator.de/contentid/272926

Printed on: April 19, 2024 at 03:04 o'clock

Member: Snowman25
Snowman25 May 26, 2015 at 08:40:23 (UTC)
Goto Top
Hallo @lordofremixes,

Nein, das ist nicht möglich.
Du könntest allerdings eine GUI erstellen, die einfach nur eine WebForm bereitstellt und das Icon von dieser ändern.
Dazu musst du dich allerdings mit den Windows COM-Objekten auseinandersetzen.

Gruß,
@Snowman25
Member: lordofremixes
lordofremixes May 26, 2015 at 09:02:51 (UTC)
Goto Top
Hallo snowman25,

gibt es dazu Anleitungen, wie man das macht?
Member: Snowman25
Snowman25 May 26, 2015 at 09:28:03 (UTC)
Goto Top
Unter Umständen gibt es das, aber falls ja, weiss ich nicht wo.
Es wäre auch besser, sich tiefer mit der Materie auseinander zu setzen, um ein Verständnis für die gesamte Umgebung zu bekommen.

Gruß,
@Snowman25
Mitglied: 114757
114757 May 26, 2015 at 18:40:01 (UTC)
Goto Top
Moin,
warum erstellst du dir nicht einfach eine Verknüpfung zu der Webseite und änderst über das Kontextmenü das zughörige Icon ?

Gruß jodel32
Member: Snowman25
Snowman25 May 27, 2015 at 08:45:06 (UTC)
Goto Top
Zitat von @114757:
warum erstellst du dir nicht einfach eine Verknüpfung zu der Webseite und änderst über das Kontextmenü das
zughörige Icon ?

Weil das auch nicht das Icon in der Taskleiste ändert?
Mitglied: 114757
114757 May 27, 2015 at 09:04:49 (UTC)
Goto Top
Weil das auch nicht das Icon in der Taskleiste ändert?
OK dann hab ich das falsch verstanden.
Member: colinardo
colinardo May 27, 2015, updated at May 28, 2015 at 15:01:59 (UTC)
Goto Top
Moin lordofremixes,
das lässt sich z.B. mit einer kleinen HTA-Applikation lösen:
(Das ganze speicherst du als *.hta-Datei,und in Zeile 8 des Scripts gibst du den Pfad zum Icon an. Den Pfad zu deiner Webseite welche aufgerufen werden soll gibst du in Zeile 17 an.)
<html>
<head>
<title>MyBrowserApp</title>
<HTA:APPLICATION
  APPLICATIONNAME="My FullScreen Window"  
  ID="myApp"  
  VERSION="1.0"  
  ICON="FullScreenApp.ico"  
  SCROLL="auto"  
  SCROLLFLAT="yes"  
  WINDOWSTATE="maximize"  
  NAVIGABLE="yes"/>  
</head>

<script language="VBScript">  
Sub Window_OnLoad
	window.location = "http://www.google.de"  
End Sub
</script>
<body>
</body>
</html>
Schon hast du deine Web-App mit deinem individuellen Icon.
back-to-topLösung für Powershell
Via Powershell und Win32-API gibts auch eine Möglichkeit anhand des Titels des Internet-Explorer-Fensters das Icon des IE zu ändern:
(Titel und Icon kann man in Zeile 36 und 37 anpassen)
$code = @"  
using System;
using System.Runtime.InteropServices;
using System.Drawing;
namespace util {
    public class window{
        [DllImport("user32.dll", CharSet=CharSet.Auto)]  
        private static extern IntPtr FindWindow(string strClassName, string strWindowName);

        [DllImport("user32.dll",CharSet=CharSet.Auto)]    
        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); 

        [DllImport("user32.dll")]   
        private static extern int DrawMenuBar(int currentWindow);

        const int WM_GETICON = 0x7F;
        const int WM_SETICON = 0x80;
        const int ICON_SMALL = 0; //16
        const int ICON_BIG = 1; //32

        public static void SetIcon(string ico, string title)
        {
            System.Drawing.Icon i = new System.Drawing.Icon(ico);
            IntPtr hwnd = FindWindow(null, title);
            SendMessage(hwnd, WM_SETICON, (IntPtr)ICON_SMALL, (IntPtr)i.Handle);
            DrawMenuBar((int)hwnd);
        }
    }
}
"@  
Add-Type -TypeDefinition $code -ReferencedAssemblies "System.Drawing"  

$ie = Get-Process iexplore -EA SilentlyContinue
if ($ie){
    $ie | %{
        if ($_.MainWindowTitle -eq 'Google - Windows Internet Explorer'){  
            [util.window]::SetIcon("C:\Icons\deinIcon.ico",$_.MainWindowTitle)  
        }
    }    
}
sleep(1)

Grüße Uwe
Member: lordofremixes
lordofremixes May 28, 2015 updated at 14:08:21 (UTC)
Goto Top
Hallo Uwe!!!

Coole Varianten face-smile

Variante 2 wäre natürlich perfekt, will das ja dann auf einem Citrix Server veröffentlichen und da wäre diese Variante am besten!
Variante 1 ist wahrscheinlich nicht möglich, ich ja erst auf Programm öffnen klicken muss und er dann automatisch den IE öffnet und ich keine Möglichkeit habe, statt dem IE das .hta File zu öffnen.
Habe es jetzt so gemacht:

In einer cmd eingegeben:

powershell.exe -ExecutionPolicy RemoteSigned -File "C:\install\icon.ps1"

in der Powershell Datei steht:

$code = @"  
using System;
using System.Runtime.InteropServices;
using System.Drawing;
namespace util {
    public class window{
        [DllImport("user32.dll", CharSet=CharSet.Auto)]  
        private static extern IntPtr FindWindow(string strClassName, string strWindowName);

        [DllImport("user32.dll",CharSet=CharSet.Auto)]    
        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); 

        [DllImport("user32.dll")]   
        private static extern int DrawMenuBar(int currentWindow);

        const int WM_GETICON = 0x7F;
        const int WM_SETICON = 0x80;
        const int ICON_SMALL = 0; //16
        const int ICON_BIG = 1; //32

        public static void SetIcon(string ico, string title)
        {
            System.Drawing.Icon i = new System.Drawing.Icon(ico);
            IntPtr hwnd = FindWindow(null, title);
            SendMessage(hwnd, WM_SETICON, (IntPtr)ICON_SMALL, (IntPtr)i.Handle);
            DrawMenuBar((int)hwnd);
        }
    }
}
"@  
Add-Type -TypeDefinition $code -ReferencedAssemblies "System.Drawing"  

$ie = Get-Process iexplore -EA SilentlyContinue
if ($ie){
    $ie | %{
        if ($_.MainWindowTitle -eq 'Stiftung Warentest'){  
            [util.window]::SetIcon("C:\install\url.ico",$_.MainWindowTitle)  
        }
    }    
}

Leider ändert es aber beim Aufruf von test.de das Icon nicht.

Hast du ne Idee woran das liegen könnte?

Gruß
lordofremixes
Mitglied: 114757
114757 May 28, 2015 updated at 14:16:29 (UTC)
Goto Top
Moin,
dein Titel scheint nicht korrekt zu sein.
Beim IE sieht das meistens so aus:
Stiftung Warentest - Windows Internet Explorer
Kann man sich aber auch anzeigen lassen
(Get-Process iexplore -EA SilentlyContinue).MainWindowTitle
Der Titel muss exakt überstimmen, ansonsten musst du einen -like Vergleich machen.

Gruß jodel32
Member: lordofremixes
lordofremixes May 28, 2015 at 14:16:04 (UTC)
Goto Top
Hallo jodel32,

stimmt!! Habe es aus der title Zeile im Quelltext von der Seite rauskopiert.
Habe jetzt Stiftung Warentest - Windows Internet Explorer eingefügt.

Das Icon ändert sich dennoch nicht.

Vielleicht noch ne Idee?
Mitglied: 114757
114757 May 28, 2015 updated at 14:23:11 (UTC)
Goto Top
So wie ich den Code sehe ändert der Code nur das 16x16 Icon und nicht das größere wenn die Taskleiste auf nur Symbole geschaltet ist. hier funktionierts zumindest. Vielleicht hat das was mit der Terminal-Server Umgebung zu tun...?
Member: lordofremixes
lordofremixes May 28, 2015 at 14:23:20 (UTC)
Goto Top
Ich werde gleich noch andere Seiten ausprobieren..
Member: lordofremixes
lordofremixes May 28, 2015 at 14:32:28 (UTC)
Goto Top
Hallo jodel,

habe es bisher nur lokal auf meinem Rechner getestet. Was meinst du mit " wenn die Taskleiste auf nur Symbole geschaltet ist "?`
Habe bei Schaltflächen der Symbolleiste : Nie gruppieren eingestellt. Welche Einstellung meinst du?
Mitglied: 114757
114757 May 28, 2015 at 14:35:03 (UTC)
Goto Top
Zitat von @lordofremixes:
habe es bisher nur lokal auf meinem Rechner getestet. Was meinst du mit " wenn die Taskleiste auf nur Symbole geschaltet ist
"?`
Ich meine wenn nur Symbole, und keine Titel angezeigt werden
Habe bei Schaltflächen der Symbolleiste : Nie gruppieren eingestellt. Welche Einstellung meinst du?
Jup so hab ichs hier auch. So wie beim alten Windows halt.
Member: lordofremixes
lordofremixes May 28, 2015 at 14:36:08 (UTC)
Goto Top
Probiere es gleich mal an nem anderen PC..
Member: lordofremixes
lordofremixes May 28, 2015 at 14:47:04 (UTC)
Goto Top
Geht auf einem anderen PC auch nicht. Irgendwo hab ich noch nen Fehler.
Was meint Uwe mit Win32-API , da muss ich aber nicht noch irgendwas installieren?
Member: colinardo
colinardo May 28, 2015 updated at 15:00:48 (UTC)
Goto Top
Zitat von @lordofremixes:

Geht auf einem anderen PC auch nicht. Irgendwo hab ich noch nen Fehler.
Was meint Uwe mit Win32-API , da muss ich aber nicht noch irgendwas installieren?
Hallo Lordo,
die Win32-API ist Windows selber bzw. dessen native Funktionen, du brauchst also nichts weiter zu installieren.

Bau in das Script am Ende mal ein
sleep(2)
ein. Manchmal ist die Windows-Message API nicht schnell genug.

Grüße Uwe
Member: lordofremixes
lordofremixes May 28, 2015 at 14:59:20 (UTC)
Goto Top
Hi!!

Nach den 3 eckigen Klammern am Schluss oder davor?
Member: colinardo
colinardo May 28, 2015 updated at 15:00:24 (UTC)
Goto Top
Zitat von @lordofremixes:
Nach den 3 eckigen Klammern am Schluss oder davor?
Ganz zum Schluss ..also eine neue Zeile 41
Member: colinardo
colinardo May 28, 2015 updated at 15:03:30 (UTC)
Goto Top
Hier die Demo das es läuft / WIN7 x64:
seticon_272926.mp4
Member: lordofremixes
lordofremixes May 28, 2015 at 15:06:57 (UTC)
Goto Top
Hallo Uwe,

geht bei mir leider nicht. Irgendwo hab ich den Fehler drin. Bei dir und jodel geht es ja..
Ich habe jetzt ca. 2 Stunden Autobahn vor mir, dann teste ich an meinem Rechner zuhause.

Kannst du mir mal bitte den Code deiner Zeile 36 senden?
Muss die Icon Datei irgendwelche Voraussetzungen erfüllen?
Member: colinardo
colinardo May 28, 2015 updated at 15:11:46 (UTC)
Goto Top
Zitat von @lordofremixes:
Kannst du mir mal bitte den Code deiner Zeile 36 senden?
Nix besonderes ...
if ($_.MainWindowTitle -eq 'Google - Windows Internet Explorer'){
Muss die Icon Datei irgendwelche Voraussetzungen erfüllen?
Ein 16x16er Icon sollte sie haben.

Ich habe jetzt ca. 2 Stunden Autobahn vor mir, dann teste ich an meinem Rechner zuhause.
Dann gute Fahrt face-smile
Member: lordofremixes
lordofremixes May 28, 2015 at 15:12:29 (UTC)
Goto Top
Hallo Uwe!

Es geht! War ein Error40. Nach dem sleep Befehl ging es!!

Was aber nicht so gut ist, wenn ich den IE schließe und wieder öffne, gilt der Befehl ja nicht mehr..
Gibt es eine Möglichkeit das für immer einzustellen, beim Aufruf z.B. von google.de?? Auch z.B. nach einem Serverneustart?

Gruß
Member: colinardo
Solution colinardo May 28, 2015, updated at Jun 02, 2015 at 07:41:29 (UTC)
Goto Top
Zitat von @lordofremixes:
Was aber nicht so gut ist, wenn ich den IE schließe und wieder öffne, gilt der Befehl ja nicht mehr..
Ist vom Script auch nicht beabsichtigt.
Gibt es eine Möglichkeit das für immer einzustellen, beim Aufruf z.B. von google.de?? Auch z.B. nach einem
Serverneustart?
Ein Script im Loop das die IE-Prozesse dauerhaft überwacht und bei auftauchen eines Fensters eben das Icon ändert.

Der Loop könnte dann so aussehen:
$code = @"  
using System;
using System.Runtime.InteropServices;
using System.Drawing;
namespace util {
    public class window{
        [DllImport("user32.dll", CharSet=CharSet.Auto)]  
        private static extern IntPtr FindWindow(string strClassName, string strWindowName);

        [DllImport("user32.dll",CharSet=CharSet.Auto)]    
        private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); 

        [DllImport("user32.dll")]   
        private static extern int DrawMenuBar(int currentWindow);

        const int WM_GETICON = 0x7F;
        const int WM_SETICON = 0x80;
        const int ICON_SMALL = 0; //16
        const int ICON_BIG = 1; //32

        public static void SetIcon(System.Drawing.Icon ico, string title)
        {
            IntPtr hwnd = FindWindow(null, title);
            SendMessage(hwnd, WM_SETICON, (IntPtr)ICON_SMALL, (IntPtr)ico.Handle);
            DrawMenuBar((int)hwnd);
        }
    }
}
"@  
Add-Type -TypeDefinition $code -ReferencedAssemblies "System.Drawing"  

$ICON = 'D:\DeinIcon.ico'  
$TITLE = 'Google - Windows Internet Explorer'  

# IE Icon extrahieren
$ie_icon = [System.Drawing.Icon]::ExtractAssociatedIcon("$($env:ProgramFiles)\Internet Explorer\iexplore.exe")  
# Instanz des neuen Icons erstellen
$new_icon = new-Object System.Drawing.Icon($ICON)

while($true){
    $ie = Get-Process iexplore -EA SilentlyContinue
    if ($ie){
        $ie | %{
            if ($_.MainWindowTitle -eq $TITLE){
                [util.window]::SetIcon($new_icon,$_.MainWindowTitle)
            }else{
                [util.window]::SetIcon($ie_icon,$_.MainWindowTitle)
            }
        }
    }
    sleep(2)
}

Den Abstand zwischen den Überprüfungen kannst du dann in der vorletzten Zeile ändern.

Das Script kannst du dann im Nicht-Interaktiven Modus und versteckt ausführen lassen:
powershell -ExecutionPolicy ByPass -NonInteractive -WindowStyle Hidden -File "C:\Pfad\script.ps1"
Grüße Uwe
Member: lordofremixes
lordofremixes May 29, 2015 updated at 11:50:15 (UTC)
Goto Top
Hallo Uwe!!!!

Erst einmal super Arbeit und vielen, vielen Dank!!!
Ich habe noch ein paar wenige Fragen:

- Wie bekommt man das Script wieder beendet, so dass keine Icons mehr geändert werden?
- Ich habe den Code ausgeführt wie beschrieben, jetzt passiert aber folgendes:

Wenn ich das Programm öffne, geht ja wie beschrieben der IE auf, das Icon ändert sich nicht.
Führe ich das Script dann nochmal aus, ändert sich das Icon.
Surfe ich dann eine andere Seite an, bleibt das Icon weiterhin verändert..

Hast du ne Idee woran das liegen kann?

Die Adressleiste spielt in dem Script ja eigentlich keine Rolle, aber könnte es sein,
dass das http://localhost/... in der Adressleiste vielleicht stört?

Gruß
lordofremixes
Member: lordofremixes
lordofremixes May 29, 2015 updated at 11:56:07 (UTC)
Goto Top
Ist es eigentlich auch möglich, abhängig von der Adresszeile http://localhost/.... das Icon zu ändern?
Weil das Programm irgendwie nichts in der Titelleiste stehen hat. Im Quelltext steht aber was unter <title> </title>

Gruß
lordofremixes
Member: colinardo
colinardo May 29, 2015 updated at 12:33:47 (UTC)
Goto Top
Zitat von @lordofremixes:
- Wie bekommt man das Script wieder beendet, so dass keine Icons mehr geändert werden?
Wenn du meine Zeile von oben benutzt hast, musst du den CMD-Prozess im Taskmanager killen.
Hast du ne Idee woran das liegen kann?
Ja, an mir face-smile hab ich nicht berücksichtigt :-P ... kommt wohl durch die Sonne hier in Frankreich face-smile
Member: colinardo
colinardo May 29, 2015 updated at 12:46:29 (UTC)
Goto Top
Code ist oben aktualisiert ...

Weitere Anpassung nur gegen Cash face-wink
Viel Spaß.
Grüße Uwe
Member: lordofremixes
lordofremixes May 29, 2015 updated at 12:53:50 (UTC)
Goto Top
Ach du liebes bisschen, bist du im Urlaub ??
Uwe, noch eine frage, wenn ich das Script dann auf mehreren citrix Servern veröffentliche , gilt das dann für alle User ? Und muss ich nach einem Server Neustart das Script erneut ausführen?
Member: colinardo
colinardo May 29, 2015 updated at 13:13:07 (UTC)
Goto Top
Zitat von @lordofremixes:
Ach du liebes bisschen, bist du im Urlaub ??
So halb halb face-smile mit Lappi auf dem SUP-Board, leider heut kein Wind zum Kiten (hoffentlich kommen jetzt keine großen Wellen face-smile) ...irgendwie ist man heute auch im Urlaub bei Arbeit face-confused
Uwe, noch eine frage, wenn ich das Script dann auf mehreren citrix Servern veröffentliche , gilt das dann für alle User
?
Hab mit Citrix leider nix am hut musst du bei dir testen. Wenns im Userkontext läuft bestimmt nicht.
Und muss ich nach einem Server Neustart das Script erneut ausführen?
Selbstverständlich (Taskplaner ?) ...
Member: lordofremixes
lordofremixes Jun 01, 2015 at 09:37:38 (UTC)
Goto Top
Hallo Uwe!!

Leider erst heute dazugekommen, dir ne Rückmeldung zu geben. Hatte keinen VPN Zugriff auf den Server von zuhause aus..
Hoffentlich hast noch ein wenig Wind abbekommen?

Habe noch folgendes getestet:

Nach Ausführung deines angepassten Scripts und dann über Programm öffnen ist der IE aufgegangen.
Erst ist das Icon garnicht erschienen, dann erschien es und blinkt/wechselt im 2 Sekunden Takt (erst individuelles Icon, dann IE Icon; immer im Wechsel).

Wenn ich dann z.B. auf google.de surfe, wechselt das Icon weiterhin zwischen individuellem Icon und dem original IE Icon.
Irgend ne Idee woran das liegen könnte?Soll ich vielleicht ein Video machen und hochladen?

Gruß
lordofremixes
Mitglied: 114757
114757 Jun 01, 2015 updated at 10:01:20 (UTC)
Goto Top
Das geht nur mit einem User, in einer Multi-Userumgebung geht das nicht, da es mehrere Fenster mit unterschiedlichen Titeln gibt, deswegen swingt das bei euch hin und her face-wink
Member: lordofremixes
lordofremixes Jun 01, 2015 at 11:07:30 (UTC)
Goto Top
Hallo jodel,

habe es aber noch nicht mit mehreren Usern getestet. Bin nur als ein einziger User (Admin) angemeldet, switcht trotzdem hin und her..
Mitglied: 114757
114757 Jun 01, 2015 at 11:14:34 (UTC)
Goto Top
Hmm hier geht's wieder problemlos, auch mit mehreren unterschiedlichen Fenstern scheint ein Fluch auf deinen Rechnern zu liegen ;-P
Member: lordofremixes
lordofremixes Jun 01, 2015 at 11:15:14 (UTC)
Goto Top
Was mir auch noch aufgefallen ist, wenn ich mich vom Betriebssystem nicht abmelden. Den IE schließe und dann wieder aufmache. Ändert sich das Icon erst nicht, erst wenn ich das Script wieder ausführe, ändert sich das Icon wieder und switcht hin und her...
Member: lordofremixes
lordofremixes Jun 01, 2015 at 11:15:57 (UTC)
Goto Top
Ich probiere es jetzt mal mit einem anderen PC...
Member: lordofremixes
lordofremixes Jun 01, 2015 at 12:09:03 (UTC)
Goto Top
Zum beenden welchen CMD Prozess killen? Da gibts soooooo vieeellllleee.......
Mitglied: 114757
Solution 114757 Jun 01, 2015, updated at Jun 02, 2015 at 07:41:08 (UTC)
Goto Top
Zitat von @lordofremixes:

Zum beenden welchen CMD Prozess killen? Da gibts soooooo vieeellllleee.......
Dann hast du es mehrfach laufen :-P kill sie alle, meld dich ab oder start den Rechner neu, meine Güte wo ist das Problem ??? Heut noch kein Kaffee gehabt ?
Member: Snowman25
Snowman25 Jun 01, 2015 at 14:05:28 (UTC)
Goto Top
Zitat von @114757:

Dann hast du es mehrfach laufen :-P kill sie alle, meld dich ab oder start den Rechner neu, meine Güte wo ist das Problem ???
Heut noch kein Kaffee gehabt ?

Meine Vermutung liegt eher auf "Verschleppter" bzw. "vererbter Administration".
Member: lordofremixes
lordofremixes Jun 02, 2015 at 07:41:52 (UTC)
Goto Top
Kaffee doch schon drei, aber heute nacht nur 3 Stunden schlaf gehabt..
Hab die Lösung!!
Member: lordofremixes
lordofremixes Jun 02, 2015 updated at 07:43:27 (UTC)
Goto Top
Ncohmal ne kjurze Rückmeldung:
Funktioniert alles super, Hatte nur Probleme mit Windows Server 2012 da gab es noch ausstehende Updates. Danach ging alles ohne Probleme..
Ganz DICKES LOB an UWE!!!! Frag mich grad eh die ganze Zeit, wieso es der Hersteeller nicht gebacken bekommt, aber UWE schon!!!!???!!!!