Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

IE in einem AHK Fenster nutzen



  • Please log in to reply
13 replies to this topic
fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Hallo zusammen,

 

wir nutzen täglich Systeme auf der Arbeit die im Browser keinen Titel haben. Nun lassen sich solche Fenster leider nicht immer korrekt ansprechen.

 

Gibt es eine Möglichkeit ein AHK Fenster zu bauen in dem man den IE einbinden kann? Quasi EXE starten, es kommt direkt die passende Anwendung, das Fenster hat einen Titel man kann evtl. noch Buttons hinzufügen um weitere Funktionen im Zusammenhang mit dieser Anwendung zu bieten integrieren etc.

 

Ist sowas machbar oder verlangt es zu viel von AHK?

 

Es gibt ja einige solcher Programme die dennoch die Engine vom IE nutzen. Z. B. der SlimBrowser der nutzt den IE und fügt weitere Funktionen hinzu.

 

Hoffe ihr habt ne idee dazu happy.png

 

MfG

fump



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011
✓  Best Answer

Meist du so etwas?

Gui Add, ActiveX, w1024 h800 vMyBrowser, Shell.Explorer
	MyBrowser.Navigate("http://www.heise.de/ct")
Gui Show

Kucks du hier


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Gibts da mehr Infos zu als das bisschen aus der hilfe?

 

Die angesprochene Anwendung läuft aufgrund verschiedener JAVA Fehler nicht korrekt in diesem Shell.Explorer Fenster. POPUps öffnen sich nicht etc.



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Ich habe mich noch nie damit beschäftigt. Ganz besonders nicht mit dem IE.

 

Aber dafür habe ich zumindest gerade gefunden, wie man die Scriptfehler unterdrücken kann, die z.B. mit dieser URL bei mir auftreten

Gui Add, ActiveX, w1024 h800 vMyBrowser, Shell.Explorer
	MyBrowser.Silent := True
	MyBrowser.Navigate("http://www.autohotkey.com/board/topic/96615-ie-in-einem-ahk-fenster-nutzen/#entry608611")
Gui Show

Quelle


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Was mir noch eingefallen ist...

 

wir nutzen täglich Systeme auf der Arbeit die im Browser keinen Titel haben. Nun lassen sich solche Fenster leider nicht immer korrekt ansprechen.

 

Wieso eigentlich nicht?

 

IE hat die URL in der Titelleiste und für FF gibt es AddOns, die ebenfalls die URL in die Titelleiste schreiben.

 

Damit hast du doch einen eindeutigen Bezug?!


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Ja stimmt... Dadurch das die Loginseite keinen Titel hat macht der IE automatisch die URL rein. Passt schon. Jedoch ist danach auf allen Seiten der Titel der gleiche.Auch bei PopUps. Bedeutet wenn ich das Fenster aktivieren will um Kundendaten aufzurufen und dann in einem PopUp lande dann rennt das vor die Wand. Daher dachte ich mir, versuch docch mal so ne GUI zu erstellen.

 

Aber ich fürchte, das System wird nicht mit dieser art ActiveX klar kommen.

 

Die Scriptfehler auszuschalten verhindert ja nicht, dass sie dennoch passieren. Warum passieren sie in diesem ActiveX Fenster aber nicht im richtigen IE?



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Kein Plan, warum die Scriptfehler da auftauchen und bei einem 'regulären' IE-Fenster nicht.

 

 

Ich bin aber auch der Meinung, dass es einen einfachen Weg gibt, auch wenn ich keine Idee habe, was du da genau machen willst.

 

Zu irgendeinem Zeitpunkt bist du ja sicher, dass du das richtige Fenster hast. Wenn du dann das Handle feststellst, hast du einen eindeutigen Bezug, weil das Handle solange gültig bleibt, wie das Fenster existiert.

 

Und PopUps sind IMO keine ChildWindows, sondern qualifizierte Browserinstanzen, die man mit der hier beschriebenen Methode genauso im Blick behalten kann, wie dein Hauptfenster.


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Kannst du mir das was die Methode macht etwas näher erklären? Ich versteh es leider nicht so gut.

Wäre dir für deine Hilfe sehr dankbar!



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Einfach ausgedrückt?

 

Windows kommuniziert intern mit Messages, von denen selbst in Ruhe irgendwas um die 3.000 pro Sekunde erzeugt werden.

 

Mit dem, was SKAN da ausgetüftelt hat, wird ein leeres unsichtbares GUI erzeugt, was als "Empfänger" für hauptsächlich die Messages arbeitet, die anzeigen, dass ein Fenster erzeugt, verändert oder geschlossen wurde. Es werden zwar auch andere Nachrichten empfangen, die kann man ja ausfiltern.

 

 

Fake-Fenster (Empfänger) am Anfang des Scriptes erzeugen

	Gui, New, +HwndFakeWinHwnd
	DllCall( "RegisterShellHookWindow", UInt, FakeWinHwnd)
	OnMessage( DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" ), "ShellMessage" )

Nun wird beim Eintreffen einer der Messages die Funktion ShellMessage() aufgerufen

	ShellMessage(wParam,lParam) {
            ; Code zur Auswertung der Message
        }

Aus dem wParam erfährst du, was mit dem Fenster passiert ist und aus dem lParam (in aller Regel) erfährst du das Handle (entspricht der ahk_id).

vgl. dazu die Liste im Thread.

 

Wenn z.B. wParam = 1 ist, wurde ein Fenster erzeugt und das Handle aus lParam kann direkt in den meisten AHK-Befehlen benutzt werden.

 

Bei mir sieht das so aus:

WinHWND := lParam ; Windows-Handle
WinGetPos , WinX, WinY, WinWidth, WinHeight, ahk_id %WinHWND% ; Koordinaten, Höhe und Breite
WinGetTitle, WinTitle, ahk_id %WinHWND%	; Fenstertitel
WinGetText, WinText, ahk_id %WinHWND% ; Textinhalt
WinGetClass, WinClass, ahk_id %WinHWND%	; Klasse (ahk_class)
WinGet, WinControlList, ControlList, ahk_id %WinHWND% ; Liste der Controls
WinGet, WinStyle, Style, ahk_id %WinHWND% ; Style
WinGet, WinExStyle, ExStyle, ahk_id %WinHWND% ; Extended Style
WinGet, WinPID, PID, ahk_id %WinHWND% ; Prozess-ID

Damit hast du in dem Augenblick, in dem ein Fenster erzeugt wird, alle relevanten Informationen.

 

Da die Funktion jedes Mal aufgerufen wird, wenn sich etwas an einem Fenster ändert (z.B. auch beim einem Redraw, weil sich die Anzeige in der TitleBar des Browsers geändert hat), kannst du so eigentlich so gut wie alles im Blick behalten, was du willst.

 

Der Ressourcenverbrauch eines solchen Scriptes bewegt sich übrigens in der Nähe von NULL.

 

 

Einfaches Beispiel, um zu sehen, auf welche sichtbaren und unsichtbaren Fenster ein Redraw ausgeführt wurde (z.B. weil sich der Titel geändert hat):

; ===============================================================================================================================
;   AHK Version ...: AHK_L 1.1.12.00 x64 Unicode
;   Win Version ...: Windows 7 Ultimate x64 SP1
; ===============================================================================================================================
    #NoEnv                      ; Nicht nachsehen, ob leere Varibalen evtl. Umgebungsvariablen sind
    #SingleInstance force       ; Bei Neustart des Scriptes die alte Instanz ohne Nachfrage ersetzen
    SetBatchLines -1            ; Das Script läuft ohne Zwangspausen. (nur für schnelle Rechner empfohlen)
    SetControlDelay, -1         ; Wartezeit beim Zugriff auf langsame Controls abschalten. (nur für schnelle Rechner empfohlen)
    SetWinDelay, -1             ; Verzögerung bei allen Fensteroperationen abschalten. (nur für schnelle Rechner empfohlen)

; =='AUTOEXEC-SEKTION'===========================================================================================================

    Gui, New, +HwndFakeWinHwnd
    DllCall( "RegisterShellHookWindow", UInt, FakeWinHwnd)
    OnMessage( DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" ), "ShellMessage" )

; =='ENDE DER AUTOEXEC-SEKTION'==================================================================================================
    Return

    ShellMessage(wParam,lParam) {
        If ( wParam = 6 ) {
            HiddenWinState := A_DetectHiddenWindows
            HiddenTextState := A_DetectHiddenText
            DetectHiddenText, On
            DetectHiddenWindows, On
;           ----------------------------------------
            WinGet, ProzessID, PID, ahk_id %lParam%
            
            For Process In ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process where Handle=" . ProzessID)
                ExePath := Process.ExecutablePath

            WinGetTitle, WinTitle, ahk_id %lParam%
            
            ToolTip % "Programm: " ExePath "`n"
                    . "Fenstertitel: " WinTitle
;           ----------------------------------------
            DetectHiddenWindows, %HiddenWinState%
            DetectHiddenText, %HiddenTextState%
            }
    }


;   Beenden des Scriptes
    Escape::
        ExitApp
    Return

Ich hoffe, das war jetzt nicht nur wirres Zeug und es hilft ein Bisschen, den Beitrag von SKAN besser zu verstehen.


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

BTW wenn du AHK externe Befehle Programme etc. von Windows benutzt lohnt ein Blick in MSDN.

Ich bekomme von dort einen Grossteil meiner Informationen.


Visit the new forum ahkscript.org.

http://ahkscript.org


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Ich muss es irgendwie schaffen diese Anwendung besser in den Griff zu bekommen. So ganz verstanden habe ich diese Methode noch nicht aber ich werd versuchen es zu erlernen.

 

Problematisch ist eben auch, dass nicht jeder Kollege die Anwendung im gleichen Browser nutzt, der eine nimmt IE der andere FF oder Chrome. Einige nutzen Tabs andere einzelne Fenster.

 

Wie soll man das alles differenzieren!?



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011
Wie soll man das alles differenzieren!?

 

...überhaupt nicht?

 

Ich würde mir ansehen, warum der einzelne so arbeitet, wie er arbeitet und ob das gegenüber den anderen spezielle Vorteile hat.

 

Und dann würde ich mir mit einem Portable und AHK eine Lösung bauen, die ich brauche. Und wer das für sich ebenfalls praktisch findet, kann ja gerne eine Kopie haben...


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Unter meinen Kollegen sind einige Techniker. Diese empfinden bevormundung auf bestimmte Browser eher als bedrohung und würden es eher nicht nutzen.

 

Ich bin mir sicher, eine Integration eines solchen aufbereiteten Browser könnte einiges an Zeit sparen. Das Management beim aufrufen von Kunden funktioniert auch jetzt schon nur ist es eben nicht perfekt. Ich kann halt bisher nicht differenzieren ob sich ein PopUp geöffnet hat oder nicht.

 

Ich denke ich werde mich auf den IE und Chrome konzentrieren.

Wenn ich mich recht erinner haben alle Tabs im Browser dennoch den gleichen HWND somit muss ich dennoch versuchen den richtigen Tab zu finden bzw. zuverlässig die aufgerufene Seite zu erkennen ohnen nennswerten Zeitverlust.

 

Das ganze ist nicht sso leicht. Ich will hier eine erstklassige Arbeit abliefern die von der breiten Masse meiner Kollegen akzeptiert wird damit insgesammt die Pruktivität steigt. Bisher habe ich ein Tool geschaffen, dass sich um alle Logins kümmert, Zwischenablagen managen kann, Visuelle Zwischenablagen bietet sowie Hotstrings, alles per sauberer GUI. Zudem hab ich den Reminder geschaffen, dieser steigert jetzt schon (im Testteam) die Arbeitsgeschwindigkeit und bietet zudem Kontrolle über alle von Usern eingegeben Vorgängen.

 

Bisher steuer ich dieses besagte System per JavaScript. Das halte ich für überhaupt nicht zuverlässig, es ist schlicht nicht kontrollierbar. Ich bekomme 0 Feedback vom System ob die Eingabe nun geklappt hat oder nicht. Bisher ist es so, dass es mal klappt mal nicht klappt, mal werden die Kundendaten geladen mal eben nicht. Ein unhaltbarer Zustand.

 

Es muss besser werden.



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011

Ich rate mal, dass PopUp's einen anderen Style und/oder ExStyle haben, als ein normales Browserfenster

WinGet, WinStyle, Style, ahk_id %WinHWND%
WinGet, WinExStyle, ExStyle, ahk_id %WinHWND%

Hat der FullScreen-Modus des Browsers allerdings auch. Also muss man den auch berücksichtigen.

 

Wenn sich der Wert aber ändert, hat der User entweder auf FullScreen geschaltet oder es ist ein PopUp...

 

Habe ich aber nicht ausprobiert...


All questions & answers are related to AHK 1.1.19.03 x64 Unicode