C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: API関数sendinputについて


(過去ログ 70 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■40912 / inTopicNo.1)  API関数sendinputについて
  
□投稿者/ たぬき (28回)-(2009/09/07(Mon) 12:23:12)

分類:[.NET 全般] 

いつもお世話になっています。今回の質問です。
directinputからキーボードの入力を受取り、その値をkybd_eventへ渡し、出力したいのですが・・・
値の渡し方がうまくできません。directinputはByte型で渡すのでしょうか?それをkybd_eventは何型でもらえばいいのでしょうか?

それと、kybd_eventの代わりにsendinput関数を使おうと思ったのですが、宣言の仕方がいまいちわかりません。
詳しく教えてくれないでしょうか???


よろしくお願いします!
引用返信 編集キー/
■40935 / inTopicNo.2)  Re[1]: API関数sendinputについて
□投稿者/ Jitta on the way (424回)-(2009/09/07(Mon) 18:27:34)
2009/09/08(Tue) 12:30:04 編集(投稿者)

No40912 (たぬき さん) に返信

> それと、kybd_eventの代わりにsendinput関数を使おうと思ったのですが、宣言の仕方がいまいちわかりません。
http://www.pinvoke.net


って書いたつもりだったorz
引用返信 編集キー/
■40943 / inTopicNo.3)  Re[1]: API関数sendinputについて
□投稿者/ やじゅ (1314回)-(2009/09/07(Mon) 21:22:21)
やじゅ さんの Web サイト
No40912 (たぬき さん) に返信
> それと、kybd_eventの代わりにsendinput関数を使おうと思ったのですが、宣言の仕方がいまいちわかりません。

検索すれば、宣言の仕方は出てくると思うんだけど、何がどう分からないのかまで書かないとダメだよね。
ただ分からないで簡易的に質問されるより、ここをこうやったけどと提示された上で質問できるようになればいいなー


'押されているキーの判定
Dim ss As New System.Text.StringBuilder
For Each kk As DirectInput.Key In [Enum].GetValues(GetType(DirectInput.Key))
If keystate(kk) Then
'キーkkが押されている
ss.AppendFormat("{0} ", kk)
End If
Next

DirectInputで、上記ではどのキーが押されたかが文字列で取れている。
SendInputに渡すキーは、DirectInputとの変換マップを作成(文字列検索してコードを渡すなど)
するなりしてコードを渡すようにするとか
もっと簡易的な方法があるかも知れないけど・・・

Key 列挙型
http://msdn.microsoft.com/ja-jp/library/ms835979.aspx

DirectInputを使う方法
http://www.geocities.co.jp/SiliconValley/7406/tips/mouse/mouse3.html
スクリーンキーボードを作る
http://homepage1.nifty.com/yasunari/VB/VB2005/ScreenKeyBoardMaking.htm

スクリーンキーボードのシフトキー
http://dobon.net/vb/bbs/log3-36/22123.html
引用返信 編集キー/
■40948 / inTopicNo.4)  Re[2]: API関数sendinputについて
□投稿者/ たぬき (29回)-(2009/09/07(Mon) 22:08:30)
No40943 (やじゅ さん) に返信
いつも回答ありがとうございます!

すみません!!質問の仕方が悪かったです。

やじゅさんが示してくれたコードを

> Dim ss As byte
> For Each kk As DirectInput.Key In [Enum].GetValues(GetType(DirectInput.Key))
> If keystate(kk) Then
> ss=kk
> End If
そして、If文を抜けた後でssを配列に追加してるのですが・・・
その配列をsendinput関数でキーボード入力したいのですが、上の方法だと10進数?で配列に追加されます。
でも、sendinputは仮想キーコード(16進数?)を使うのでうまくできません。
うまく関数に渡すにはどうすればいいのでしょうか?

またわかりにくくなっちゃいましたが、よろしくお願いします!!!


引用返信 編集キー/
■40949 / inTopicNo.5)  Re[3]: API関数sendinputについて
□投稿者/ たぬき (30回)-(2009/09/07(Mon) 22:08:59)
No40948 (たぬき さん) に返信
> ■No40943 (やじゅ さん) に返信
> いつも回答ありがとうございます!
>
> すみません!!質問の仕方が悪かったです。
>
> やじゅさんが示してくれたコードを
>
>>Dim ss As byte
>>For Each kk As DirectInput.Key In [Enum].GetValues(GetType(DirectInput.Key))
>> If keystate(kk) Then
>> ss=kk
>> End If
> そして、If文を抜けた後でssを配列に追加してるのですが・・・
> その配列をsendinput関数でキーボード入力したいのですが、上の方法だと10進数?で配列に追加されます。
> でも、sendinputは仮想キーコード(16進数?)を使うのでうまくできません。
> うまく関数に渡すにはどうすればいいのでしょうか?
>
> またわかりにくくなっちゃいましたが、よろしくお願いします!!!
>
>
引用返信 編集キー/
■40957 / inTopicNo.6)  Re[3]: API関数sendinputについて
□投稿者/ やじゅ (1317回)-(2009/09/08(Tue) 00:26:00)
やじゅ さんの Web サイト
No40948 (たぬき さん) に返信

前回コメントした意味が理解されてないみたいですね、変換マップを作成するのがいいかどうかは別として

DirectInput キー識別コード表を見ると、仮想キーとコード値が違うみたいなんだよねー
http://gcc.ne.jp/~narita/prog/other/dinput.html

なので、例えば kk.ToString とすれば、Aキーを押した時に、"A"って文字列になるんじゃないかな(推測)
SendKeyInputに渡す仮想キー情報は、VK_A = &H41 'A key なので、"A"って文字列なら&H41になるように
変換する連想配列なりを作るとか。
ここらへんは、「スクリーンキーボードを作る」を参考にしてください。
引用返信 編集キー/
■40977 / inTopicNo.7)  Re[4]: API関数sendinputについて
□投稿者/ たぬき (31回)-(2009/09/08(Tue) 16:12:43)
No40957 (やじゅ さん) に返信

ありがとうございます。わかりました!
理想配列に挑戦してみます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -