WinSetTitle Problem

  • Also ich bastel grad an nem kleinen Programm, dass mir anzeigt, wie lange ein Spiel von mit schon ausgeführt wird. Die Zeit gebe ich dabei mit WinSetTitle beim Fenstertitel aus. Das Problem jetzt:

    Das Spiel ändert den Text von selbst, wenn man eine bestimmt Aktion macht, das heißt am Anfang heißt das Fenster z.B. "Mein Spiel", und wenn man dann eine Aktion ausführt heißt das Fenster "Mein Spiel - Gegenstand aufgenommen" oder so.

    Mein erster Versuch:

    [autoit]

    $title = WinGetTitle ( "Mein Spiel" )
    .
    .
    .
    WinSetTitle ( "Mein Spiel", "", $title & " ----- " & $hour & " : " & $min & " : " & $count )

    [/autoit]

    Nun steht als Fenstertext aber IMMER "Mein Spiel ---- und die Zeit".

    Ich hätte aber gerne, dass wenn der Text vom Spiel selbst geändert wird, dass er die Zeit hinten anfügt und der Text nicht immer gleich bleibt ?(


    MfG eMkay

    Einmal editiert, zuletzt von eMkay (26. Juli 2009 um 20:28)

  • Brauchste Opt("WinTitleMatchMode",2) damit er immer das Fenster findet mit "Mein Spiel".

    Dann in eine Schleife noch, müsste glaubich ungefair so aussehen:

    [autoit]

    Opt("WinTitleMatchMode",2)

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

    $title=WinGetTitle("Mein Spiel")
    WinSetTitle("Mein Spiel","",$title& " ----- " & $hour & " : " & $min & " : " & $count)

    [/autoit]
  • Ich bin mir nicht sicher (und sicherlich auch voreilig), aber was ist das denn für ein Spiel?

    Zitat

    "Mein Spiel - Gegenstand aufgenommen"

    Nur so zur Info Bots werden NICHT unterstützt KLICK MICH
    (korrigiere mich bitte wenn ich mich irren sollte)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Thx für die schnelle Antwort, aber das funzt immer noch nich -.-

    Also er fügt ja immer die Zeit wieder mit an, aber dann steht da "Mein Spiel ---- 0 : 0 : 1 ---- 0 : 0 : 2 ---- 0 : 0 : 3 ---- usw.

    Er muss ja sozusagen die alte Zeit löschen und eine neue hinschreiben, der wenn möglich die alte aktualisieren

    Edit: Achso ja ein Bot ist es definitiv NICHT, ich will nur wissen, wie lange ich das Spiel schon spiele. Wenn jemand sich dafür interessiert welches Spiel, hier ein Link: http://osu.ppy.sh/
    MfG eMkay

  • so sollte es gehen ...

    Spoiler anzeigen
    [autoit]

    Opt("WinTitleMatchMode",2)
    #Include <Date.au3>
    $title=WinGetTitle("Mein Spiel")
    $timestart = _NowTime()
    AdlibEnable("_SetTimeInTitle",1000)

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

    #include <GUIConstants.au3>
    GUICreate('')
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _SetTimeInTitle()
    $timeset = _DateDiff('s',"1970/01/01 "&$timestart, "1970/01/01 "&_NowTime())
    $hour = Round($timeset/3600,0)
    $min = Round(($timeset-($hour*3600))/60,0)
    $sec = $timeset-($hour*3600)-($min*60)/60
    If $hour < 10 Then $hour = "0" & $hour
    If $min <10 Then $min = "0" & $min
    If $sec < 10 Then $sec = "0" & $sec
    WinSetTitle($title,"",$title& " ----- " & $hour&":"&$min&":"&$sec)
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Das Funktioniert dann immer nur bei einem Title und wenn man WinGetTitle noch rein macht verdoppelt sich das dann die ganze Zeit.
    Man muss das glaubich irgendwie mit den String Funktionen Trimen oder so.

    Hab mir das auch schnell für ein Spiel geschrieben.

    Spoiler anzeigen
    [autoit]

    Opt("WinTitleMatchMode",2)

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

    Global $title[5]=["Diablo II - Gegenstand aufgehoben","Diablo II - Monster in Sicht","Diablo II - Leben leer","Diablo II - Mana leer","Diablo II - Sie sind gestorben"]

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

    While 1
    Sleep ( 3000 )
    WinSetTitle("Diablo II","",$title[Random(0,4,1)])
    WEnd

    [/autoit]

    Komm aber jetzt auch nicht drauf...

  • Also man müsste es irgendwie hinbekommen, dass man den Titel nicht verändert, sondern nur einen Text dahinter hängt. Vielleicht einn transparentes Gui mit einem Label, das immer mit guictrlsetdata aktualisiert wird. ?(

  • einen versuch ich noch ;)
    das Script schließt sich, wenn das betreffende Fenster nicht mehr vorhanden ist.
    Kann man ja alles anpassen ...

    Spoiler anzeigen
    [autoit]

    Opt("WinTitleMatchMode",2)
    #Include <Date.au3>
    #Include<Misc.au3>
    _Singleton("fjrcikszrubcrzknsrcxiks")

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

    $title="Mein Spiel" ; Name Deines Spieles oder ein Teil daraus, der sich nicht ändert

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

    $timestart = _NowTime()
    AdlibEnable("_SetTimeInTitle",1000)
    While 1

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

    WEnd
    Func _SetTimeInTitle()
    Local $hour, $min, $sec
    $stit_title = WinGetTitle($title)
    If $stit_title = "0" Then
    Exit
    Else
    $stit_split = StringSplit($stit_title," |=- ",1)
    $timeset = _DateDiff('s',"1970/01/01 "&$timestart, "1970/01/01 "&_NowTime())
    _TicksToTime($timeset*1000,$hour,$min,$sec)
    If $hour < 10 Then $hour = "0" & $hour
    If $min < 10 Then $min = "0" & $min
    If $sec < 10 Then $sec = "0" & $sec
    WinSetTitle($title,"",$stit_split[1] & " |=- " & $hour&":"&$min&":"&$sec)
    EndIf
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    • Offizieller Beitrag

    Ich hab auch noch eine Möglichkeit:

    Spoiler anzeigen
    [autoit]


    Opt('WinTitleMatchMode',2)
    $sTitle = 'Solitär'
    ShellExecute('sol.exe')
    WinWait($sTitle)
    $iTimer = TimerInit()
    AdlibEnable('_TimeUpdate', 1000)
    While WinExists($sTitle)
    Sleep(100)
    WEnd

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

    Func _TimeUpdate()
    WinSetTitle($sTitle, '', StringRegExpReplace(WinGetTitle($sTitle), ' \d{2}:\d{2}:\d{2}', '') & ' ' & _TicksToTime(TimerDiff($iTimer)))
    EndFunc

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

    Func _TicksToTime($iTicks)
    Local $iHours, $iMins, $iSecs = Int($iTicks / 1000)
    $iHours = Int($iSecs / 3600)
    $iSecs = Mod($iSecs, 3600)
    $iMins = Int($iSecs / 60)
    $iSecs = Mod($iSecs, 60)
    Return StringFormat('%02i:%02i:%02i', $iHours, $iMins, $iSecs)
    EndFunc ;==>_TicksToTime

    [/autoit]
  • Vielen Dank Schnuffel, funktioniert jetzt prima ;)

    Oscar hab deinen Weg auch probiert funktioniert ebenfalls sehr gut ^^

    MfG eMkay :)

  • Oscar's Weg ist die perfekte Optimierung :thumbup:

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • So funktioniert jetzt ja alles wunderbar. Einziges Manko ist, dass er bei jedem Fenster mit dem Text die Zeit dahinter anzeigt :rofl:. Hat vielleicht jemand dafür ne Lösung? Am besten sowas wie den Fenstertitel eines Prozesses ändern. So würde es sich auf einen Prozess beschränken ;) Ist nicht unbedingt wichtig aber wäre schön 8)

    MfG eMkay

    • Offizieller Beitrag

    Dafür muss man das Fenster eindeutiger identifizieren, z.B. mit dem Handle:

    Spoiler anzeigen
    [autoit]


    Opt('WinTitleMatchMode', 2)
    $sTitle = 'Solitär'
    ShellExecute('sol.exe')
    WinWait($sTitle)
    $handle = WinGetHandle($sTitle)
    $iTimer = TimerInit()
    AdlibEnable('_TimeUpdate', 1000)
    While WinExists($handle)
    Sleep(100)
    WEnd

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

    Func _TimeUpdate()
    WinSetTitle($handle, '', StringRegExpReplace(WinGetTitle($handle), ' \d{2}:\d{2}:\d{2}', '') & ' ' & _TicksToTime(TimerDiff($iTimer)))
    EndFunc ;==>_TimeUpdate

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

    Func _TicksToTime($iTicks)
    Local $iHours, $iMins, $iSecs = Int($iTicks / 1000)
    $iHours = Int($iSecs / 3600)
    $iSecs = Mod($iSecs, 3600)
    $iMins = Int($iSecs / 60)
    $iSecs = Mod($iSecs, 60)
    Return StringFormat('%02i:%02i:%02i', $iHours, $iMins, $iSecs)
    EndFunc ;==>_TicksToTime

    [/autoit]