Jump to content

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

IfWinActive


  • Please log in to reply
17 replies to this topic
D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Hallo,
 
Ich würde gerne ein Script schreiben wo ich Mehere Fenster habe, die aber je nach Nutzer durcheinander auftauchen.
 
z.B. ich Aktiviere Fenster 1 dann wird eine Aktion in diesem Fenster ausgeführt.
ich aktiviere danach Fenster 3 und dann wird dort die aktion für dieses Fenster ausgeführt.
 
Mein Problem ist das er mit Meinem Script nur das Erste Fenster macht und alle anderen Ignoriert.
Habt ihr eine Idee?

Schonmal Danke

;#notrayicon
Menu, Tray, NoStandard
Menu, Tray, add, Refresh
Menu, Tray, add,
Menu, Tray, Add, Beenden

WinWait, Fenster 1
IfWinNotActive, Fenster 1 WinActivate, Fenster 1
WinWaitActive, Fenster 1
{

MsgBox, 49, Bestätigen, Test Fenster 1

IfMSGbox OK
	{
	; Meine Aktionen danach Reload
	Reload
	}
else
	{
	return
	}
}

WinWait, Fenster 2
IfWinNotActive, Fenster 2, WinActivate, Fenster 2
WinWaitActive, Fenster 2
{

MsgBox, 49, Bestätigen, Test Fenster 2
IfMSGbox OK
	{
	; Meine Aktionen danach Reload
	Reload
	}
else
	{
	return
	}
}

WinWait, Fenster 3
IfWinNotActive, Fenster 3 WinActivate, Fenster 3
WinWaitActive, Fenster 3
{

MsgBox, 49, Bestätigen, Test Fenster 3

IfMSGbox OK
	{
	; Meine Aktionen danach Reload
	Reload
	}
else
	{
	return
	}
}

;####### Tasten eingaben ######

Beenden:
Exitapp

Guiclose:
gui, destroy
return

Refresh:
Reload


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

Ich kann zwischen dem Script und dem, was du beschreibst, eigentlich keinen Zusammenhang sehen.

 

Das Script wird bis in alle Ewigkeit auf ein Fenster mit dem Titel "Fenster 1" warten und sonst nichts.

Es sind aber auch keine anderen erkennbaren Funktionen da, die auf eine Zufälligkeit oder Nutzerabhängigkeit deuten.

Und was du mit "wo ich Mehere Fenster habe" oder "er mit Meinem Script nur das Erste Fenster macht" sagen möchtest, ist mir auch unklar.


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Das ist ja mein Problem das er im 1. Fenster hängt. Und das zweite nicht erkennen will, ich habe schon alle Win und Ifwin Funktionen versucht und komme einfach nicht dahinter,  Es soll genauso funktionieren wie #ifwinaktive.

 

Ich würde gerne das wenn ich Fenster 1 öffne, dass das Script in diesem Fenster eine Aktion ausführt. Wenn ich Fenster 3 öffne, dass das Script für Fenster 3 eine Aktion ausführt.



Seidenweber
  • Moderators
  • 638 posts
  • Last active: Sep 06 2015 01:51 PM
  • Joined: 10 May 2011
;   AHK Version ...: AHK_L 1.1.13.01 x64 Unicode
;   Win Version ...: Windows 7 Ultimate x64 SP1

; =='GLOBALE EINSTELLUNGEN'===============================================================

    #NoEnv
    #SingleInstance force
    SetTitleMatchMode, 2

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

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

; =='ENDE DER AUTOEXEC-SEKTION'===========================================================
    Return                    ; Ab hier werden Funktionen, Sub-Label und HotKeys definiert
; ========================================================================================

;// Funktion, die beim Erscheinen jedes neuen Hauptfensters ausgeführt wird
    ShellMessage(wParam,lParam) {
        If ( wParam = 1 ) {
            WinHWND := lParam
            WinGetTitle, WinTitle, ahk_id %WinHWND%

            If (WinTitle = "Fenster 1") {
                ;
                ;
                ; Deine Aktionen für Fenster 1
                ;
                ;
            } Else If (WinTitle = "Fenster 2") {
                ;
                ;
                ; Deine Aktionen für Fenster 2
                ;
                ;
            } Else If (WinTitle = "Fenster 3") {
                ;
                ;
                ; Deine Aktionen für Fenster 3
                ;
                ;
            }

        }
    }

;// Beenden des Scriptes
    Escape::
        ExitApp
    Return

All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Okey.... dh also es ist nicht möglich mit einer Normalen Funktion wie IfWinActive dies zu bewerkstelligen?

 

dann werde ich mir das mal Anschauen, danke dir erstmal :) :D



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

Okey.... dh also es ist nicht möglich mit einer Normalen Funktion wie IfWinActive dies zu bewerkstelligen?

 

Doch. Das geht schon. Du kannst das z.B. auch mit einer Schleife machen.

    #NoEnv
    #SingleInstance force
    SetTitleMatchMode, 2        ; 1:start  2:anywhere  3:exactly  RegEx:Regular-Expressions

    Loop {
        If WinExist("Fenster 1") {
            ;
            ;
            ; Deine Aktionen für Fenster 1
            ;
            ;
        } Else If WinExist("Fenster 2") {
            ;
            ;
            ; Deine Aktionen für Fenster 2
            ;
            ;
        } Else If WinExist("Fenster 3") {
            ;
            ;
            ; Deine Aktionen für Fenster 3
            ;
            ;
        }
        Sleep, 500
    }

Oder mit einem Timer.

    #NoEnv
    #SingleInstance force
    SetTitleMatchMode, 2        ; 1:start  2:anywhere  3:exactly  RegEx:Regular-Expressions

    Timer, CheckWindows, 1000
    Return

    CheckWindows:
        If WinExist("Fenster 1") {
            ;
            ;
            ; Deine Aktionen für Fenster 1
            ;
            ;
        } Else If WinExist("Fenster 2") {
            ;
            ;
            ; Deine Aktionen für Fenster 2
            ;
            ;
        } Else If WinExist("Fenster 3") {
            ;
            ;
            ; Deine Aktionen für Fenster 3
            ;
            ;
        }
    Return

All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Aha,... mit dem Timer hatte ich das auch schon Probiert gehabt, da ging es aber genauso wenig. So wie du es gelöst hast scheint es mir Plausibel aber was ist am Folgenden Beispiel falsch das es nicht geht? Da ja hier 2 Timer eigentlich Arbeiten sollte er doch beides Erkennen oder?

 

Erstmal noch danke für die 2 Schönen Beispiele :)

SetTimer, Fenster1, 1000
SetTimer, Fenster2, 1000


Fenster1:
{
IfWinExist, Fenster1
{
;Aktion
}
return
}




Fenster2: 
{
ifWInExist, Fenster2
{
;Aktion
}
Return
}


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

jo. ist so. Jedenfalls, wenn der Fenstertitel korrekt ist und auch der Einstellung von SetTitleMatchMode entspricht. Jedenfalls war dein Script nicht wirklich falsch.

SetTimer, Fenster1, 1000
SetTimer, Fenster2, 1000

Fenster1:
    IfWinExist, Fenster1
    {
        ;Aktionen
    }
Return

Fenster2: 
    IfWinExist, Fenster2
    {
        ;Aktionen
    }
Return

Was ich übrigens immer mal fragen wollte und immer vergessen habe ... Jetzt musst du eben dafür herhalten :)

Woher stammt diese Unart, an allen möglichen und unmöglichen Stellen überflüssige geschweifte Klammern zu setzen?

Hast du das irgendwo gesehen? Oder denkst du, paar mehr Klammern sind besser, als zu wenige?


All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


SikAxe
  • Members
  • 71 posts
  • Last active: Apr 03 2014 11:29 AM
  • Joined: 08 Oct 2013

die { werden durch nur in Blöcken gesetzte oder ? zu. bei if spielchen

If
{ 
bla blub
bal blub
}
else
{ 
bla blib
blib blu
}
return

oder nicht ?



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

jepp. Und wenn es sich nur um eine Anweisung handelt, kann man die auch weglassen.

If wasauchimmer
   bla blub
else
   blib blu

würde also in dem Fall auch reichen.

Bei mehr als einer Anweisung müssen da allerdings Klammern hin.

If wasauchimmer {
   bla blub
   bal blubber
} else
   blib blu

Bei Labeln (und HotKeys/HotStrings) übernehmen das Label und das Return die Funktion der Klammern - also das Zusammenfassen in einen Anweisungs-Block.

MeinLabel:
   ; Mein Code
Return

All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Zu deiner Frage, kann ich dir garnicht so richtig beantworten :)

 

Ich mach es meist weil es für mich so Übersichtlicher ist, das mit Return usw. ist mir ja klar.

 

Und dann hab ich mir es Wahrscheinlich angewöhnt, weil er(AHK) immer beim testen bei den IF und else dies bemängelt hatte.

 

Aber Trotzdem mal gut zu Wissen, da ich bei Label dies auch mache obwohl ich ein return dort habe :O

 

Auf jedenfall hat mir dein Beitrag geholfen, :)



D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Zu deiner Frage, kann ich dir garnicht so richtig beantworten :)

 

Ich mach es meist weil es für mich so Übersichtlicher ist, das mit Return usw. ist mir ja klar.

 

Und dann hab ich mir es Wahrscheinlich angewöhnt, weil er(AHK) immer beim testen bei den IF und else dies bemängelt hatte.

 

Aber Trotzdem mal gut zu Wissen, da ich bei Label dies auch mache obwohl ich ein return dort habe :O

 

Auf jedenfall hat mir dein Beitrag geholfen, :)

 

Habe jetzt aber wieder folgendes problem.. habe mit AutoScriptWriter das fenster ausgelesen, mit

WinWait, , Enter Service Login 
IfWinNotActive, , Enter Service Login , WinActivate, , Enter Service Login 
WinWaitActive, , Enter Service Login 

funktioniert es.

 

aber mit

If WinExist("Enter Service Login") 

nicht. Warum? Es ist kein Hauptfenster, sondern nur ein Kleines wo ein PW und so eingegeben werden muss.



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

Weil das eine eine Abfrage auf den Text im Fenster und das andere eine Abfrage auf den Titel ist.

 

Kleines Komma, große Wirkung. Versuch mal:

If WinExist(,"Enter Service Login")

All questions & answers are related to AHK 1.1.19.03 x64 Unicode

 


D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Oh, man... bin ich blöd. Ja die doofen kommas :)

 

 

jetzt kommt

 

Error: Blank Parameters

If WinExist(,"Enter Service Login")

hab es auch schon vor der ( probiert. :(



D_FoX
  • Members
  • 77 posts
  • Last active: Oct 17 2013 11:26 PM
  • Joined: 08 May 2013

Habs :D

If WinExist("","Enter Service Login")

 Danke Nochmals für die guten Tips! 5***** ;)