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
#include-once
#include "Array.au3"
$handle = run_osk()
ConsoleWrite($handle & @CRLF)
$test = WinMove($handle, "Bildschirmtastatur", 0, 0)
ConsoleWrite($test & @CRLF)
$test = WinSetState($handle, "Bildschirmtastatur", @SW_HIDE)
ConsoleWrite($test & @CRLF)
$test = WinSetState($handle, "Bildschirmtastatur", @SW_SHOW)
ConsoleWrite($test & @CRLF)
;----------------------------------------------------------------------------------------------------------------------------------
Func Run_osk()
Local $iState, $handle
[/autoit] [autoit][/autoit] [autoit]If @CPUArch = "X64" And Not @AutoItX64 Then
DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", $iState)
EndIf
ShellExecute("osk.exe")
[/autoit] [autoit][/autoit] [autoit]$handle = WinHandFromPID(ProcessExists("osk.exe"), "Bildschirmtastatur")
$handle = $handle[1][1]
If @CPUArch = "X64" And Not @AutoItX64 Then
DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "dword", $iState)
EndIf
Return $handle
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];----------------------------------------------------------------------------------------------------------------------------------
Func WinHandFromPID($pid, $winTitle = "", $timeout =
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