Bildschirmtastatur trotz Handle nicht ansprechbar

  • Hallo,

    ich nehme hier Bezug auf folgenden Thread, bei dem es um das Starten der Bildschirmtastatur unter Windows 7 (64bit) ging: https://autoit.de/index.php?page=Thread&threadID=27697
    Das Starten klappt nun also. Jedoch kann ich mit dem Fenster leider nicht weiterarbeiten (verschieben, ein- und ausblenden, etc.). Zu meiner Verwirrung liefern die entsprechenden Funktionen jedoch das Handle bzw. eine 1 (also alles erfolgreich) zurück.

    Hat jemad eine Idee, wie das zu lösen ist?

    Danke
    Trainer

    Hier der Code zu Testen:

    Spoiler anzeigen
    [autoit]

    #include-once
    #include "Array.au3"

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

    $handle = run_osk()
    ConsoleWrite($handle & @CRLF)

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

    $test = WinMove($handle, "Bildschirmtastatur", 0, 0)
    ConsoleWrite($test & @CRLF)

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

    $test = WinSetState($handle, "Bildschirmtastatur", @SW_HIDE)
    ConsoleWrite($test & @CRLF)

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

    $test = WinSetState($handle, "Bildschirmtastatur", @SW_SHOW)
    ConsoleWrite($test & @CRLF)

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

    ;----------------------------------------------------------------------------------------------------------------------------------
    Func Run_osk()

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

    Local $iState, $handle

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

    If @CPUArch = "X64" And Not @AutoItX64 Then
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", $iState)
    EndIf

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

    ShellExecute("osk.exe")

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

    $handle = WinHandFromPID(ProcessExists("osk.exe"), "Bildschirmtastatur")
    $handle = $handle[1][1]

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

    If @CPUArch = "X64" And Not @AutoItX64 Then
    DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "dword", $iState)
    EndIf

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

    Return $handle

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

    EndFunc

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

    ;----------------------------------------------------------------------------------------------------------------------------------
    Func WinHandFromPID($pid, $winTitle = "", $timeout = 8)
    Local $secs = TimerInit()
    Do
    $wins = WinList($winTitle)
    For $i = UBound($wins) - 1 To 1 Step -1
    If (WinGetProcess($wins[$i][1]) <> $pid) Or (BitAND(WinGetState($wins[$i][1]), 2) = 0) Then _ArrayDelete($wins, $i)
    Next
    $wins[0][0] = UBound($wins) - 1
    If $wins[0][0] Then Return SetError(0, 0, $wins)
    Sleep(1000)
    Until TimerDiff($secs) >= $timeout * 1000
    Return SetError(1, 0, $wins)
    EndFunc

    [/autoit]
  • Funktioniert hier bei mir unter Vista und Win7 wie zuvor fehlerfrei.

    Rückgabewerte:

    Code
    0x00000000000409D8
    0x00000000000409D8
    1
    1

    Fenster wird verschoben, unsichtbar und sichtbar gemacht, wie gewünscht. Durch kurze sleeps dazwischen ist das btw auch vernünftig zu sehen. Keine Ahnung warum du solche Probleme bei dir hast. Verwendest du eine Beta Version von Autoit / Scite ?