Ich verwende die WinAPI-Funktion SendInput (MSDN) um Maus und Tastatur zu steuern. Dabei öffne ich die Bildschirmtastatur von Windows 10, indem ich einen Prozess mit dem Pfad
Das Problem ist folgendes:
Wenn ich per SendInput auf einen Button der Bildschirmtastatur klicken will, reagiert die Bildschirmtastatur nicht. Das heißt: Der Button wird gehighlightet, wenn die Maus darüberbewegt wird, aber wenn die Maustaste mit SendInput gedrückt wird, wird der Button nicht geklickt.
Ich verwende folgenden Code, um Mausklicks zu simulieren:
Der Code hält sich mehr oder weniger an das Schema auf pinvoke.net:
pinvoke.net/default.aspx/user32/SendInput.html
pinvoke.net/default.aspx/Structures/INPUT.html
Und es funktioniert in anderen Anwendungen. Also ich kann z.B. im Explorer Dateien markieren oder im Browser navigieren. Nur bei der Bildschirmtastatur funktioniert es nicht.
Ich habe gerade nochwas herausgefunden:
Wenn ich das Programm, das die Maus steuert, mit Administratorrechten starte (und damit auch die Bildschirmtastatur), dann funktioniert es.
Wenn ich das Programm normal starte, die Bildschirmtastatur mit normalen Rechten öffne, das Programm dann schließe und mit Administratorrechten neu starte, dann funktioniert es auch.
Ich vermute also, dass es was mit den Rechten von Prozessen zu tun hat.
Wenn es keine andere Möglichkeit gibt, starte ich mein Programm immer im Administratormodus, aber ich möchte das gerne verhindern.
C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe
starte.Das Problem ist folgendes:
Wenn ich per SendInput auf einen Button der Bildschirmtastatur klicken will, reagiert die Bildschirmtastatur nicht. Das heißt: Der Button wird gehighlightet, wenn die Maus darüberbewegt wird, aber wenn die Maustaste mit SendInput gedrückt wird, wird der Button nicht geklickt.
Ich verwende folgenden Code, um Mausklicks zu simulieren:
VB.NET-Quellcode
- Dim Flags As MouseEventFlags
- Select Case Button
- Case MouseButton.Left
- Flags = If(IsButtonDown, MouseEventFlags.LEFTDOWN, MouseEventFlags.LEFTUP)
- Case MouseButton.Right
- Flags = If(IsButtonDown, MouseEventFlags.RIGHTDOWN, MouseEventFlags.RIGHTUP)
- Case MouseButton.Middle
- Flags = If(IsButtonDown, MouseEventFlags.MIDDLEDOWN, MouseEventFlags.MIDDLEUP)
- Case Else
- Throw New NopeException
- End Select
- NativeMethods.SendInput( _
- New Input With _
- {
- .Type = InputType.Mouse, _
- .Data = New Data With _
- {
- .MouseInput = New MouseInput With _
- {
- .dwFlags = Flags
- }
- }
- })
Der Code hält sich mehr oder weniger an das Schema auf pinvoke.net:
pinvoke.net/default.aspx/user32/SendInput.html
pinvoke.net/default.aspx/Structures/INPUT.html
Und es funktioniert in anderen Anwendungen. Also ich kann z.B. im Explorer Dateien markieren oder im Browser navigieren. Nur bei der Bildschirmtastatur funktioniert es nicht.
Ich habe gerade nochwas herausgefunden:
Wenn ich das Programm, das die Maus steuert, mit Administratorrechten starte (und damit auch die Bildschirmtastatur), dann funktioniert es.
Wenn ich das Programm normal starte, die Bildschirmtastatur mit normalen Rechten öffne, das Programm dann schließe und mit Administratorrechten neu starte, dann funktioniert es auch.
Ich vermute also, dass es was mit den Rechten von Prozessen zu tun hat.
Wenn es keine andere Möglichkeit gibt, starte ich mein Programm immer im Administratormodus, aber ich möchte das gerne verhindern.
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils