VB6を使用してますが、
たとえば、マウスのボタンを押すのにmouse_eventなどがありますが、
ジョイスティックのボタンを押すような方法はありますか?
私はやったことありませんが・・・
ジョイスティック用APIが用意されていますので、
SDK等で探してもられては?
以上。
オショウさんありがとうございます。
DirectXのDirectInputを使用して、ジョイスティックの情報を
取得することはできるのですが、それを改変できることが
できないかと考えていました。
Aボタンを押したのを認知したらBボタンを押したことにして
送信するなど。
DirectInputでデータを送信するような項目が見つからなくて…。
ええ〜と・・・
JOYSTICKの処理はVB6側で行うのだから、Aボタン押下時
にBボタン処理も呼ぶようにしたらダメなんですか?
WindowsAPI側では処理が遅いと言う記述を見かけました
ので、実用的ではないのでしょう。
※ 詳しくなくて申し訳ない〜
以上。
joyシリーズのAPIには、そういう機能は無いでしょう。
一般的な HID ドライバには、状態を変化させる機能はありません。
無難且つ汎用性のあるところで、PPJoyなどの仮想ジョイスティック
などを用いるとか。
http://www.geocities.com/deonvdw/Docs/PPJoyMain.htm
これならば、ドライバに状態変化を起こさせるコマンドを DeviceIoControl
で送ることができますので。
オショウさん、K.J.Kさん どうもありがとうございました。
早速、PPJoyをインストールして、PPJoy自体の動作は確認できたのですが
PPJoyへPostMessageやSendMessageでキー送信してみたのですが
反応してくれませんでした。
PostMessageでWM_CLOSEは受信されたのですが、
WM_CHARやWM_KEYDOWNなどキー送信関係は一切受け付けませんでした。
なかなか難しいです・・・
DeviceIoControl で送る、と先の投稿に書きましたよね?
とりあえず、日本語によるC言語でのサンプルは、
http://chihara.naist.jp/people/STAFF/imura/computer/misc/virtual_joystick/disp_content
などにあるようです。
K.J.Kさん ありがとうございます。そして、すみません。
DeviceIoControlの部分を見落としていて今朝になって
気がついて、色々と検索してみていました。
教えていただいたサンプルもみて、作ってみて
また報告したいと思います。
教えて頂いたC++のソースをVBに変換してみて、テストしてみましたが、
最初のCreateFileですら動かず悪戦苦闘です。
Const GENERIC_WRITE = &H40000000
Const FILE_SHARE_WRITE = &H2
Const OPEN_EXISTING = 3
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpCommName As String, ByVal dwDesiredAccess As _
Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal _
dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Dim h As Long
h = CreateFile("\\.\PPJoyIOCTL1", GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
これで実行すると h=-1 となります。
試しに "\\\\.\\PPJoyIOCTL1"などもしてみましたが、結果は同じでした。
PPJoyIOCTL1が存在するのか調べる方法などありますか?
まず、Err.LastDllErro の値を調べて、エラーの原因を特定しましょう。
デバイスがないとされているのであれば、
コントロールパネルでの設定はどうなっているのでしょうか。
デバイスがあるとされているのであれば、"\\.\PPJoyIOCTL1"に自信が
無いのならば、"\\.\PPJoyIOCTL1"から"\\.\PPJoyIOCTL16"まで、
試しに開いてみて、それのうちのどれが有効な値を示すのかを力ずくで
調べる、ということもできますし。
なお、公式の最新サンプルは
http://www.geocities.com/deonvdw/Docs/PPJoyMain.htm
http://www.geocities.com/deonvdw/Docs/Diagrams/Virtual/IOCTL.htm
などにあります。(英語版)
というより、VBからの使用サンプルもあったような。
Err.LastDllErrorの値は87でした。
パラメータがおかしいらしいのですが、調べてもわかりませんでした。
コントロールパネルではPPJoyで作成したジョイパッドは表示されています。
デバイスを1〜16まで試してみましたけど、全部-1が戻ってきます。
これ以上は私の知識では無理そうなのであきらめます。
オショウさん、K.J.Kさん ご丁寧に教えて頂きありがとうございました。
パラメータがおかしい、ですか。
となると、デバイスの名前かアクセスモードか共有モードか、辺りでしょうか。
とりあえず、名前でないとして、
アクセスモードに
GENERIC_READ Or GENERIC_WRITE
共有モードで
FILE_SHARE_READ Or FILE_SHARE_WRITE
を指定してみるとどうなります?
K.J.Kさん ありがとうございます。
アクセスモード、共有モードともに指定してみましたが、
結果は変わりませんでした。
PPJoyに直接送信はあきらめて、今度はPPJoyKeyに
キーストロークを送れないかなど、挑戦しています。
できていませんが・・・。
なかなか難しいですね。
お忙しいなか、ご教授ありがとうございました。
ツイート | ![]() |