neues Tool, neue Probleme.
Ich hatte das mit den Fenstern schonmal im alten Forum angesprochen aber so ganz wills nicht funktionieren.
Daher hier nochmal.
Problem: Wir nutzen einige Tools im Webbrowser. Eins davon besonders oft. Es darf nicht mehrmals im gleichen Browser geöffnet sein da es sonst zur vermischung von Kundendaten kommen kann. Daher nutzen wir die drei gängigen Browser IE, Chrome und FireFox.
Ich möchte nun ein Tool schreiben welches diese Browser steuert. Kundendaten öffnet etc. Dazu will ich dem User über eine GUI die Möglichkeit geben zu entscheiden welcher Browser aktuell genutzt werden soll. Man klickt also auf den Namen des gewünschten Browsers. Dann soll geprüft werden ob dieser schon aktiv ist und wenn nicht soll er neu gestartet werden mit dem Link des Tools.
Nun, die Sache ist die... Beim IE haben alle Instanzen die gleiche ProzessID nur die HWND ändert sich. Beim Chrome hat jede Instanz eine eigene PID und jeder Tab eine eigene HWND. Beim FireFox ist es wie beim IE.
Ich weiß jetzt nicht wie ich da weiter vorgehen kann. Ich will es so eindeutig wie möglich haben. Sehe aber keinen Weg den vom Tool aus gestarteten Browser zu 100% zu identifizieren.
Nebenbei, wie kann man beim FF per RUN eine neue instanz öffnen?
Folgendes Szenario: User klickt auf IE, IE öffnet sich und die Arbeiten werden durchgeführt. Nun kommt ein weiteres Kundenkonto zum bearbeiten, der User ist im alten aber noch nicht fertig. Also klickt er auf Chrome um dort den 2. Kunden zu bearbeiten. Dann ist er mit dem ersten fertig und schließt dieses IE Fenster. Nun kommt ein 3. Kunde Klickt man nun im Tool wieder auf IE passiert nix... es passiert nix weil im Hintergrund noch ein IE Fenster auf ist indem sich andere Tools befinden die aber weniger oft genutzt werden.
Ich hoffe das ist einigermaßen verständlich...
![Smile :)](./images/smilies/icon_e_smile.gif)
Hier mein Script:
Code: Select all
#SingleInstance force
OnMessage(0x201, "WM_LBUTTONDOWN")
PIDIE:=0
PIDCH:=0
PIDFF:=0
IEPfad:="C:\Program Files (x86)\Internet Explorer\iexplore.exe"
ChromePfad:="C:\Users\fump\Desktop\GoogleChromePortable\App\Chrome-bin\chrome.exe"
FireFoxPfad:="C:\Users\fump\Desktop\FirefoxPortable\Portable_Firefox_9.0\Firefox\firefox.exe"
UseLink:="http://google.de"
Menu, AAXcom, Add, Reload, ReloadAAXcom
Menu, AAXcom, Add, Schließen, CloseAAXcom
Gui, AAXcom:Font, S8 CBlack, Candara
Gui, AAXcom:Color, fff875
Gui, AAXcom:+AlwaysOnTop -caption +Border +ToolWindow +LastFound
Gui, AAXcom:Add, Text, x5 y2 w50 h14 Border Center vBrowser1 gBrowserChange HWNDh_IE, IE
Gui, AAXcom:Add, Text, x60 y2 w20 h14 Center, ID:
Gui, AAXcom:Add, Text, x80 y2 w40 h14 Center vID1,
Gui, AAXcom:Add, Text, x125 y2 w50 h14 Border Center vBrowser2 gBrowserChange HWNDh_CH, Chrome
Gui, AAXcom:Add, Text, x180 y2 w20 h14 Center, ID:
Gui, AAXcom:Add, Text, x200 y2 w40 h14 Center vID2,
Gui, AAXcom:Add, Text, x245 y2 w50 h14 Border Center vBrowser3 gBrowserChange HWNDh_FF, FireFox
Gui, AAXcom:Add, Text, x300 y2 w20 h14 Center, ID:
Gui, AAXcom:Add, Text, x320 y2 w40 h14 Center vID3,
Gui, AAXcom:Show, x0 y0 h18 w365, New GUI Window
WinSet, Transparent, 220
Return
BrowserChange:
If (A_GuiControl="Browser1")
{
If (BrowserInUse!="IE")
{
Process, Exist, %PIDIE%
If (Errorlevel=0)
{
Matchmode:=A_TitleMatchMode
SetTitleMatchMode, RegEx
Run,%IEPfad% %UseLink%
WinWaitActive,ahk_class IEFrame,,5
if (Errorlevel=1)
{
SetTitleMatchMode, %Matchmode%
msgbox, 4144, Fehler beim Browserstart, Leider konnnte der Browser innerhalb von 5 Sekunden nicht korrekt gestartet/erkannt werden. Bitte versuche es erneut.
Return
}
else
{
SetTitleMatchMode, %Matchmode%
WinGet, PIDIE , PID
WinGet, HWNDIE , ID
msgbox %HWNDIE%
GuiControl, AAXcom:, ID1, %PIDIE%
CTLCOLORS.Detach(h_CH%ClipNum%)
CTLCOLORS.Detach(h_FF%ClipNum%)
CTLCOLORS.Attach(h_IE, "FFFFFF", "000000")
}
}
else
{
CTLCOLORS.Detach(h_CH%ClipNum%)
CTLCOLORS.Detach(h_FF%ClipNum%)
CTLCOLORS.Attach(h_IE, "FFFFFF", "000000")
}
BrowserInUse:="IE"
}
else
{
Process, Exist, %PIDIE%
If (Errorlevel=0)
{
Run,%IEPfad% %UseLink%,,,PIDIE
GuiControl, AAXcom:, ID1, %PIDIE%
}
}
}
If (A_GuiControl="Browser2")
{
If (BrowserInUse!="CH")
{
Process, Exist, %PIDCH%
If (Errorlevel=0)
{
Matchmode:=A_TitleMatchMode
SetTitleMatchMode, RegEx
Run,%ChromePfad% %UseLink%
WinWaitActive,ahk_class Chrome_WidgetWin,,5
if (Errorlevel=1)
{
SetTitleMatchMode, %Matchmode%
msgbox, 4144, Fehler beim Browserstart, Leider konnnte der Browser innerhalb von 5 Sekunden nicht korrekt gestartet/erkannt werden. Bitte versuche es erneut.
Return
}
else
{
SetTitleMatchMode, %Matchmode%
WinGet, PIDCH , PID
WinGet, HWNDCH , ID
msgbox %HWNDCH%
GuiControl, AAXcom:, ID2, %PIDCH%
CTLCOLORS.Detach(h_IE%ClipNum%)
CTLCOLORS.Detach(h_FF%ClipNum%)
CTLCOLORS.Attach(h_CH, "FFFFFF", "000000")
}
}
else
{
CTLCOLORS.Detach(h_IE%ClipNum%)
CTLCOLORS.Detach(h_FF%ClipNum%)
CTLCOLORS.Attach(h_CH, "FFFFFF", "000000")
}
BrowserInUse:="CH"
}
else
{
Process, Exist, %PIDCH%
If (Errorlevel=0)
{
Run,%ChromePfad% %UseLink%,,,PIDCH
GuiControl, AAXcom:, ID2, %PIDCH%
}
}
}
If (A_GuiControl="Browser3")
{
If (BrowserInUse!="FF")
{
Process, Exist, %PIDFF%
If (Errorlevel=0)
{
Matchmode:=A_TitleMatchMode
SetTitleMatchMode, RegEx
Run,%FireFoxPfad% %UseLink%
WinWaitActive,ahk_class MozillaWindowClass,,5
if (Errorlevel=1)
{
SetTitleMatchMode, %Matchmode%
msgbox, 4144, Fehler beim Browserstart, Leider konnnte der Browser innerhalb von 5 Sekunden nicht korrekt gestartet/erkannt werden. Bitte versuche es erneut.
Return
}
else
{
SetTitleMatchMode, %Matchmode%
WinGet, PIDFF , PID
WinGet, HWNDFF , ID
msgbox %HWNDFF%
GuiControl, AAXcom:, ID3, %PIDFF%
CTLCOLORS.Detach(h_IE%ClipNum%)
CTLCOLORS.Detach(h_CH%ClipNum%)
CTLCOLORS.Attach(h_FF, "FFFFFF", "000000")
}
}
else
{
CTLCOLORS.Detach(h_IE%ClipNum%)
CTLCOLORS.Detach(h_CH%ClipNum%)
CTLCOLORS.Attach(h_FF, "FFFFFF", "000000")
}
BrowserInUse:="FF"
}
else
{
Process, Exist, %PIDFF%
If (Errorlevel=0)
{
Run,%FireFoxPfad% %UseLink%,,,PIDFF
GuiControl, AAXcom:, ID3, %PIDFF%
}
}
}
Return
AAXcomGuiContextMenu:
Menu, AAXcom, Show, %A_GuiX%, %A_GuiY%
Return
CloseAAXcom:
ExitApp
ReloadAAXcom:
OnExit,
Reload
Return
WM_LBUTTONDOWN()
{
if (A_Gui="AAXcom")
{
If (A_GuiControl = "") ; Klick auf den Hintergrund der GUI
PostMessage, 0xA1, 2, 0 ; sehr sehr alter Trick von SKAN: 0xA1 = WM_NCLBUTTONDOWN
}
}
; Classe um Controls Farbig zu gestalten
#Include Class_CTLCOLORS.ahk
MfG
fump