Schachprogramm Fritz Schnellstart/Fensterkontrolle/Beenden Script

  • Für Schachfreunde stelle ich mein Fritz14 Script zur Verfügung.

    Damit kann ich mein Schachprogramm in ~3 Sekunden starten.
    Brettfenster, Datenbankfenster und Datenbank-laden-Fenster werden permanent auf die vorgegebenen Koordinaten geschoben.

    4 Fritz Layouts können automatisch geladen werden:
    Bildschirm Links(Halbbild)
    Bildschirm Rechts(Halbbild)
    Bildschirm Mitte(Vollbild)
    Bildschirm Media(Vollbild)

    Bildschirm Links und Rechts ist nützlich wenn zbs. neben dem Schachprogramm ein Trainingsvideo(Windows Media Player, VLC Player, usw.) läuft.

    Version 1.8

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.12.0
    Author: m47
    Version: 1.8

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Template AutoIt script.

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <Misc.au3>
    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("MustDeclareVars", 1) ;1 = Variable muss deklariert werden
    Opt("TrayMenuMode",1) ;1 = Tray Funktion Pause und Exit wird nicht gezeigt
    Opt("SendKeyDelay", 0) ;Bestimmt die Länge der Anweisungspause zwischen dem Senden von Tastaturanschlägen. Ein Wert von 0 entfernt die Verzögerung komplett.

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $Script_Name = "Fritz14"
    Global $i
    Global $Timer
    Global $_0_bis_3[4] = [0,1,2,3]
    Global $ProcessClose_ChessEngine
    Global $ProcessClose_AutoIt3_x64

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $WinGetPos_Fritz_Class_1
    Global $TrayMsg
    Global $SwitchWinmove = 1 ;1 = Winmove aktiviert ;0 = Winmove pausiert
    Global $Winmove_Links = TrayCreateItem("Winmove Links")
    Global $Winmove_Mitte = TrayCreateItem("Winmove Mitte")
    Global $Winmove_Rechts = TrayCreateItem("Winmove Rechts")
    Global $Winmove_Media = TrayCreateItem("Winmove Media")
    Global $EIN_AUS_Media_Fenster = TrayCreateItem("EIN/AUS Media Fenster")
    Global $EIN_AUS_Winmove = TrayCreateItem("EIN/AUS Winmove")
    Global $Alles_Beenden = TrayCreateItem("Alles Beenden")
    Global $WinList_Fritz_Class_1_GUI
    Global $WinList_Winmove_Fritz_GUI

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If _Singleton($Script_Name,1) = 0 Then
    Sound() ;
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Fritz14
    Dim $Fritz_Path = "C:\Program Files\ChessBase\ChessProgram14\"
    Dim $Fritz_exe = "ChessProgram14.exe"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Window[Fritz14_offline/Fritz14_online/Database/Exit]
    Dim $Fritz_Title_1 = "Deep Fritz 14"
    Dim $Fritz_Class_1 = "[CLASS:Afx:0000000140000000:0]" ;Main_Window
    Dim $Fritz_Class_1_ControlID = 59398 ;Loading Window

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Window[Select Database]
    Dim $Fritz_Datenbank_auswaehlen = "Datenbank auswählen" ;Datenbank auswählen

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Window[Load Layout]
    Dim $Fritz_Layout_laden = "Layout laden"
    Dim $Fritz_Layout_laden_Edit = "[CLASS:Edit; INSTANCE:1]"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Window[Media]
    Dim $Fritz_Media = "[CLASS:AtlAxWin100; INSTANCE:1]"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Tastenkombination
    Dim $Tastenkombination_Media_Fenster_EIN_AUS = "^!v" ;CTRL+ALT+V
    Dim $Tastenkombination_Layout_laden = "+^l" ;SHIFT+CTRL+L

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Process_ChessEngine
    Dim $Process_ChessEngine[4]
    $Process_ChessEngine[0] = "ChessProgram14.exe"
    $Process_ChessEngine[1] = "Houdini_4_Pro_x64B.exe"
    $Process_ChessEngine[2] = "stockfish-6-sse42.exe"
    $Process_ChessEngine[3] = "komodo-8-64bit.exe"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Process_AutoIt
    Dim $Process_AutoIt = "AutoIt3_x64.exe"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;$WinMove_Fritz_Class_1
    Dim $WinMove_Fritz_Class_1_x = 58
    Dim $WinMove_Fritz_Class_1_y = 0
    Dim $WinMove_Fritz_Class_1_width = 1862
    Dim $WinMove_Fritz_Class_1_height = 1080

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;$WinMove_Fritz_Datenbank_auswaehlen
    ;~ Dim $WinMove_Fritz_Datenbank_auswaehlen_x = 548
    ;~ Dim $WinMove_Fritz_Datenbank_auswaehlen_y = 268
    ;~ Dim $WinMove_Fritz_Datenbank_auswaehlen_width = 1000
    ;~ Dim $WinMove_Fritz_Datenbank_auswaehlen__height = 569

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Layout
    Dim $Layout_LinksRechts = "LinksRechts.cblay{Enter}"
    Dim $Layout_Mitte = "Mitte.cblay{Enter}"
    Dim $Layout_Media = "Media.cblay{Enter}"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Tooltip
    Dim $Tooltip_Text[4]
    $Tooltip_Text[0] = $Fritz_Title_1 & " GUI "
    $Tooltip_Text[1] = "closed in "
    $Tooltip_Text[2] = "opened in "
    $Tooltip_Text[3] = " seconds"
    Dim $Tooltip_Sleep_Delay = 1000 ;Millisekunden warten um die Tooltipanzeige aufrecht zu halten

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Start
    Local $Tooltip_Timer_opened_closed = TimerInit()
    TrayItemSetState($EIN_AUS_Winmove, $TRAY_CHECKED)
    Fritz_Process_check() ;
    Fritz_start() ;
    Tooltip_opened_closed($Tooltip_Text[2]) ;
    MouseClick("left",100,750,1,0)
    While 1
    If $SwitchWinmove = 1 Then
    Check_Winmove_Fritz_GUI() ;
    Sleep(20)
    EndIf
    $TrayMsg = TrayGetMsg() ;Tray
    Select
    Case $TrayMsg = 0
    ContinueLoop
    Case $TrayMsg = $Winmove_Links
    $WinMove_Fritz_Class_1_x = 58
    $WinMove_Fritz_Class_1_y = 0
    $WinMove_Fritz_Class_1_width = 931
    $WinMove_Fritz_Class_1_height = 1080
    Lade_Layout_($Layout_LinksRechts) ;
    TrayItemSetState($Winmove_Links, $TRAY_CHECKED)
    TrayItemSetState($Winmove_Mitte, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Rechts, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Media, $TRAY_UNCHECKED)
    Sound() ;
    Case $TrayMsg = $Winmove_Mitte
    $WinMove_Fritz_Class_1_x = 58
    $WinMove_Fritz_Class_1_y = 0
    $WinMove_Fritz_Class_1_width = 1862
    $WinMove_Fritz_Class_1_height = 1080
    Lade_Layout_($Layout_Mitte) ;
    TrayItemSetState($Winmove_Links, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Mitte, $TRAY_CHECKED)
    TrayItemSetState($Winmove_Rechts, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Media, $TRAY_UNCHECKED)
    Sound() ;
    Case $TrayMsg = $Winmove_Rechts
    $WinMove_Fritz_Class_1_x = 989
    $WinMove_Fritz_Class_1_y = 0
    $WinMove_Fritz_Class_1_width = 931
    $WinMove_Fritz_Class_1_height = 1080
    Lade_Layout_($Layout_LinksRechts) ;
    TrayItemSetState($Winmove_Links, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Mitte, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Rechts, $TRAY_CHECKED)
    TrayItemSetState($Winmove_Media, $TRAY_UNCHECKED)
    Sound() ;
    Case $TrayMsg = $Winmove_Media
    $WinMove_Fritz_Class_1_x = 58
    $WinMove_Fritz_Class_1_y = 0
    $WinMove_Fritz_Class_1_width = 1862
    $WinMove_Fritz_Class_1_height = 1080
    Lade_Layout_($Layout_Media) ;
    TrayItemSetState($Winmove_Links, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Mitte, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Rechts, $TRAY_UNCHECKED)
    TrayItemSetState($Winmove_Media, $TRAY_CHECKED)
    Sound() ;
    Case $TrayMsg = $EIN_AUS_Media_Fenster
    WinActivate($WinList_Fritz_Class_1_GUI[1][1])
    If ControlCommand($WinList_Fritz_Class_1_GUI[1][1], "", $Fritz_Media, "IsVisible") Then
    TrayItemSetState($EIN_AUS_Media_Fenster, $TRAY_UNCHECKED)
    ;~ Consolewrite("AUS"&@LF)
    Else
    TrayItemSetState($EIN_AUS_Media_Fenster, $TRAY_CHECKED)
    ;~ Consolewrite("EIN"&@LF)
    EndIf
    Send($Tastenkombination_Media_Fenster_EIN_AUS)
    Sound() ;
    Case $TrayMsg = $EIN_AUS_Winmove
    If $SwitchWinmove = 1 Then
    $SwitchWinmove = 0
    TrayItemSetState($EIN_AUS_Winmove, $TRAY_UNCHECKED)
    Else
    $SwitchWinmove = 1
    TrayItemSetState($EIN_AUS_Winmove, $TRAY_CHECKED)
    EndIf
    Sound() ;
    Case $TrayMsg = $Alles_Beenden
    Sound() ;
    Fritz_Process_check() ;
    Exit
    EndSelect
    WEnd
    Exit
    ;Ende

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Funktionen
    Func Fritz_Process_check()
    For $i In $_0_bis_3
    If ProcessExists($Process_ChessEngine[$i]) Then
    While 1
    If ProcessExists($Process_ChessEngine[$i]) Then
    $ProcessClose_ChessEngine = ProcessClose($Process_ChessEngine[$i])
    If $ProcessClose_ChessEngine Then ProcessClose($ProcessClose_ChessEngine)
    ElseIf ProcessExists($Process_AutoIt) Then
    $ProcessClose_AutoIt3_x64 = ProcessClose($Process_AutoIt)
    If $ProcessClose_AutoIt3_x64 Then ProcessClose($ProcessClose_AutoIt3_x64)
    ;~ Else
    ;~ Tooltip_opened_closed($Tooltip_Text[1]) ;
    ;~ Exit
    EndIf
    WEnd
    EndIf
    Next
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Fritz_start()
    BlockInput(1) ;Sperrt Eingaben des Users

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Run($Fritz_Path & $Fritz_exe, $Fritz_Path)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Timer = TimerInit()
    Do
    Exit_Timer(5000) ;
    Until WinExists($Fritz_Class_1)
    WinSetOnTop($Fritz_Title_1, "", 1)
    Activate_Window($Fritz_Title_1) ;
    Send("{SPACE 2}") ;dadurch wird beim Anmeldefenster die "Deep Fritz (Offline)" Auswahl betätigt

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Timer = TimerInit()
    Do
    Exit_Timer(5000) ;
    Until ControlCommand($Fritz_Class_1, "", $Fritz_Class_1_ControlID, "IsVisible") ;solange warten bis ControlID 59398 sichtbar ist

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $WinList_Fritz_Class_1_GUI = WinList($Fritz_Class_1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Winmove_Fritz_GUI() ;

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ Send("^n") ;neue Partie
    ;~ Activate_Window("Neue Partie") ;
    ;~ Send("!{F2}") ;Daueranalyse aktivieren

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    BlockInput(0) ;Entsperrt Eingaben des Users
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Tooltip_opened_closed($i)
    ToolTip($Tooltip_Text[0] & $i & Round(TimerDiff($Tooltip_Timer_opened_closed)/1000, 1) & $Tooltip_Text[3], @DesktopWidth/2, @DesktopHeight/2)
    Sleep($Tooltip_Sleep_Delay)
    ToolTip("")
    Sound() ;
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Check_Winmove_Fritz_GUI()
    $WinGetPos_Fritz_Class_1 = WinGetPos($Fritz_Class_1)
    If @error Then
    Sound() ;
    Fritz_Process_check() ;
    Exit
    EndIf
    If $WinGetPos_Fritz_Class_1[0] <> $WinMove_Fritz_Class_1_x Or $WinGetPos_Fritz_Class_1[1] <> $WinMove_Fritz_Class_1_y Or $WinGetPos_Fritz_Class_1[2] <> $WinMove_Fritz_Class_1_width Or $WinGetPos_Fritz_Class_1[3] <> $WinMove_Fritz_Class_1_height Then
    Winmove_Fritz_GUI() ;
    EndIf
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Winmove_Fritz_GUI()
    $WinList_Winmove_Fritz_GUI = WinList($Fritz_Class_1)
    For $i = 1 To $WinList_Winmove_Fritz_GUI[0][0]
    WinMove($WinList_Winmove_Fritz_GUI[$i][1], "",$WinMove_Fritz_Class_1_x, $WinMove_Fritz_Class_1_y, $WinMove_Fritz_Class_1_width, $WinMove_Fritz_Class_1_height)
    Next
    ;~ WinMove($Fritz_Datenbank_auswaehlen, "",$WinMove_Fritz_Datenbank_auswaehlen_x, $WinMove_Fritz_Datenbank_auswaehlen_y, $WinMove_Fritz_Datenbank_auswaehlen_width, $WinMove_Fritz_Datenbank_auswaehlen__height)
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Lade_Layout_($i)
    $SwitchWinmove = 1
    TrayItemSetState($EIN_AUS_Winmove, $TRAY_CHECKED)
    Check_Winmove_Fritz_GUI() ;
    Local $WinGetPos_Fritz_Class_1_GUI = WinGetPos($WinList_Fritz_Class_1_GUI[1][1])
    If $WinGetPos_Fritz_Class_1_GUI[0] <> $WinMove_Fritz_Class_1_x Or $WinGetPos_Fritz_Class_1_GUI[1] <> $WinMove_Fritz_Class_1_y Or $WinGetPos_Fritz_Class_1_GUI[2] <> $WinMove_Fritz_Class_1_width Or $WinGetPos_Fritz_Class_1_GUI[3] <> $WinMove_Fritz_Class_1_height Then
    WinMove($WinList_Fritz_Class_1_GUI[1][1], "",$WinMove_Fritz_Class_1_x, $WinMove_Fritz_Class_1_y, $WinMove_Fritz_Class_1_width, $WinMove_Fritz_Class_1_height)
    EndIf
    If $i = $Layout_Media Then
    WinActivate($WinList_Fritz_Class_1_GUI[1][1])
    If Not ControlCommand($WinList_Fritz_Class_1_GUI[1][1], "", $Fritz_Media, "IsVisible") Then
    Send($Tastenkombination_Media_Fenster_EIN_AUS)
    TrayItemSetState($EIN_AUS_Media_Fenster, $TRAY_CHECKED)
    EndIf
    Else
    WinActivate($WinList_Fritz_Class_1_GUI[1][1])
    If ControlCommand($WinList_Fritz_Class_1_GUI[1][1], "", $Fritz_Media, "IsVisible") Then
    Send($Tastenkombination_Media_Fenster_EIN_AUS)
    TrayItemSetState($EIN_AUS_Media_Fenster, $TRAY_UNCHECKED)
    EndIf
    EndIf
    Do
    Activate_Window($WinList_Fritz_Class_1_GUI[1][1])
    Send($Tastenkombination_Layout_laden)
    Until WinExists($Fritz_Layout_laden)
    Activate_Window($Fritz_Layout_laden)
    WinSetOnTop($Fritz_Layout_laden, "", 1)
    ControlSend($Fritz_Layout_laden,"",$Fritz_Layout_laden_Edit,$i)
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Activate_Window($i)
    WinActivate($i)
    WinWaitActive($i)
    Endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Exit_Timer($i) ;sind zuletzt $i Millisekunden überschritten worden dann beende das Script
    If TimerDiff($Timer) > $i Then
    Sound() ;
    Exit
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Sound()
    Beep(200,200)
    EndFunc

    [/autoit]