質問者
プログラムからシフトキーのOn/Offを制御する方法について、教えてください。

質問
-
プログラムからシフトキーのOn/Offを制御する方法について、ご存知の方が見えましたら教えてください。APIのSendInputを使ってみたのですが、なかなかうまく行きません。以下のコードで試してみたのですが、動作しませんでした。
Imports System.Runtime.InteropServices
Imports System.Text
Public Class MainFormPrivate Sub Btn_R_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_R.Click
SendKeys.SendInput(&H10, 0)
End Sub
End ClassPublic Module SendKeys
'SendInput Function
<DllImport("user32.dll")> _
Private Function SendInput( _
ByVal nInputs As Integer, _
ByRef pInputs As INPUT, _
ByVal cbSize As Integer) _
As Integer
End Function'INPUT Structure
<StructLayout(LayoutKind.Explicit)> _
Private Structure INPUT
<FieldOffset(0)> Dim type As Integer
<FieldOffset(4)> Dim ki As KEYBDINPUT
End Structure'KEYBDINPUT Structure
<StructLayout(LayoutKind.Explicit)> _
Private Structure KEYBDINPUT
<FieldOffset(0)> Public wVk As Short
<FieldOffset(2)> Public wScan As Short
<FieldOffset(4)> Public dwFlags As Integer
<FieldOffset(8)> Public time As Integer
<FieldOffset(12)> Public dwExtraInfo As IntPtr
End Structure'MapVirtualKey Function
<DllImport("user32.dll")> _
Private Function MapVirtualKey( _
ByVal uCode As Integer, _
ByVal uMapType As Integer) _
As Integer
End Function'GetMessageExtraInfo Function
<DllImport("user32.dll")> _
Private Function GetMessageExtraInfo() _
As IntPtr
End FunctionPublic Sub SendInput(ByVal VirtualKeyCode As Short, ByVal Flag As Integer)
Dim inputevents As New INPUT
inputevents.type = 1
inputevents.ki.wVk = VirtualKeyCode
inputevents.ki.wScan = CShort(MapVirtualKey(CInt(VirtualKeyCode), 0))
inputevents.ki.dwFlags = 0
inputevents.ki.time = 0
inputevents.ki.dwExtraInfo = GetMessageExtraInfo()
SendInput(1, inputevents, Marshal.SizeOf(inputevents))
End Sub
End Module
すべての返信
-
どういう時にどう シフト キー を制御したいのかがわかりませんが、
API を使用せずとも .NET Framework では キーストロークをアプリケーションに対して送ることが可能です。こちらのサイトを参考にしてみてください。
キーストロークを送信する