投稿日 | : 2007/06/30(Sat) 09:42 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : 回答にあらず |
> 最近、他のウィンドウにキーを送るプログラムを作成したのですが、
> ゲームなどの一部のウィンドウにキーが送れないことに気がつきました。。
DirectInput を使用している相手なら、SendInput かな。keybd_event だと駄目かも。
ゲーム相手にではなく、実験用に以下のような DirectX アプリを作成してみて、
そこに対して、期待する結果を送出できるかどうかを調べてみる、とか。
'=======
Option Explicit
Private mDX As DxVBLibA.DirectX8
Private mDI As DxVBLibA.DirectInput8
Private mDIDevKeyboard As DxVBLibA.DirectInputDevice8
Private mhEventKeyboard As Long
Implements DxVBLibA.DirectXEvent8
Private Sub DirectXEvent8_DXCallback(ByVal eventid As Long)
If eventid <> mhEventKeyboard Then
Exit Sub
End If
Dim keyState As DIKEYBOARDSTATE
mDIDevKeyboard.GetDeviceStateKeyboard keyState
Dim keyMsg As String
keyMsg = ""
Dim n As Integer
For n = 0 To 255
If keyState.Key(n) And &H80 Then
keyMsg = keyMsg & " " & Right("00" + Hex(n), 2)
End If
Next
If keyMsg <> "" Then
List1.AddItem "KeyDown" & keyMsg, 0
End If
End Sub
Private Sub Form_Load()
Caption = "キー入力監視"
Set mDX = New DxVBLibA.DirectX8
Set mDI = mDX.DirectInputCreate()
Set mDIDevKeyboard = mDI.CreateDevice("GUID_SysKeyboard")
mDIDevKeyboard.SetCommonDataFormat DIFORMAT_KEYBOARD
mDIDevKeyboard.SetCooperativeLevel Me.hWnd, DISCL_BACKGROUND Or DISCL_NONEXCLUSIVE
mhEventKeyboard = mDX.CreateEvent(Me)
mDIDevKeyboard.SetEventNotification mhEventKeyboard
mDIDevKeyboard.Acquire
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
mDIDevKeyboard.Unacquire
End Sub
'=======
> Vectorなどで公開されているソフトではゲームにもキーが送られているのですが
> どうやって送っているのでしょうか?
作者に聞いてみては如何でしょう。