VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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などで公開されているソフトではゲームにもキーが送られているのですが
> どうやって送っているのでしょうか?

作者に聞いてみては如何でしょう。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -