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

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

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

Re[13]: キー割り込みの方法を教えてください


(過去ログ 56 を表示中)

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

■31444 / inTopicNo.1)  キー割り込みの方法を教えてください
  
□投稿者/ あいこ (4回)-(2009/01/22(Thu) 10:23:38)

分類:[C#] 

VisualStudio2008.C#の超初心者のあいこと申します。
Windowsプログラムに挑戦しています。”キー割り込み”を行いたいのですが
参考になるHPなどご助言を御願いします。
よろしく御願いします
引用返信 編集キー/
■31445 / inTopicNo.2)  Re[1]: キー割り込みの方法を教えてください
□投稿者/ επιστημη (1564回)-(2009/01/22(Thu) 10:29:11)
επιστημη さんの Web サイト
> ”キー割り込み”を行いたいのですが

”キー割り込み”ってグローバル・フック? C#でやれるっけ?

引用返信 編集キー/
■31446 / inTopicNo.3)  Re[2]: キー割り込みの方法を教えてください
□投稿者/ みきぬ (342回)-(2009/01/22(Thu) 10:32:06)
たぶん、このへんのお話ですよねぇ。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm

C# じゃ無理カモ?
引用返信 編集キー/
■31447 / inTopicNo.4)  Re[3]: キー割り込みの方法を教えてください
□投稿者/ .SHO (547回)-(2009/01/22(Thu) 10:37:26)
グローバル・フックがしたいのかな?
もう少しやりたいことを詳しく書いた方がいいですよ。。。
引用返信 編集キー/
■31448 / inTopicNo.5)  Re[4]: キー割り込みの方法を教えてください
□投稿者/ 774RR (298回)-(2009/01/22(Thu) 10:50:19)
いや単にキー入力イベントが見たいだけと思うの心
引用返信 編集キー/
■31449 / inTopicNo.6)  Re[5]: キー割り込みの方法を教えてください
□投稿者/ επιστημη (1565回)-(2009/01/22(Thu) 10:59:29)
επιστημη さんの Web サイト
> いや単にキー入力イベントが見たいだけと思うの心

ならばフツーにFormでKeyUp/KeyDownあるいはKeyPressイベントを捕まえるんでしょけど。
# スレ主がおでましにならんと外野がゴチャゴチャ能書きたれてもしゃーないけどねーwww

引用返信 編集キー/
■31450 / inTopicNo.7)  Re[4]: キー割り込みの方法を教えてください
□投稿者/ あいこ (6回)-(2009/01/22(Thu) 11:08:12)
No31447 (.SHO さん) に返信
> グローバル・フックがしたいのかな?
> もう少しやりたいことを詳しく書いた方がいいですよ。。。

たくさんのご回答、いただきましてありがとうございます。
”グローバルフック”っていうこともよくわからないので申し訳ありません。
具体的には複数のUSB機器を制御しています。処理途中でキー割り込みをかけて
一時停止、中断などができるようにしたいと考えています。
マウス操作ではカーソルの移動で時間がかかるのであえてキーで行います。
よろしく、御願いします
引用返信 編集キー/
■31451 / inTopicNo.8)  Re[5]: キー割り込みの方法を教えてください
□投稿者/ みきぬ (343回)-(2009/01/22(Thu) 11:12:30)
No31450 (あいこ さん) に返信
> 具体的には複数のUSB機器を制御しています。処理途中でキー割り込みをかけて
> 一時停止、中断などができるようにしたいと考えています。
> マウス操作ではカーソルの移動で時間がかかるのであえてキーで行います。
>
「USB機器の制御」「処理(途中)」「キー割り込み」「一時停止、中断」「マウス操作ではカーソルの移動で時間がかかる」が頭の中でうまく噛み合わず、どういうことがやりたいのかわかりません。
引用返信 編集キー/
■31453 / inTopicNo.9)  Re[5]: キー割り込みの方法を教えてください
□投稿者/ オショウ (79回)-(2009/01/22(Thu) 11:22:05)
> 具体的には複数のUSB機器を制御しています。処理途中でキー割り込みをかけて
> 一時停止、中断などができるようにしたいと考えています。
> マウス操作ではカーソルの移動で時間がかかるのであえてキーで行います。

  USB機器と非同期的に通信するような構造になっていないので
  キーボード入力しても待たされているように思えます。

  機器との通信方法を同期方式から非同期するか・・・
  もしくはスレッド・バックグランドワーカーで通信するように、
  変更が必要かと。

  これ以上はどんな機器なのか。
  提供されているDLL等が解りませんので、コメントできません。

以上。
引用返信 編集キー/
■31454 / inTopicNo.10)  Re[5]: キー割り込みの方法を教えてください
□投稿者/ επιστημη (1566回)-(2009/01/22(Thu) 11:26:39)
επιστημη さんの Web サイト
2009/01/22(Thu) 11:29:13 編集(投稿者)

> 具体的には複数のUSB機器を制御しています。処理途中でキー割り込みをかけて
> 一時停止、中断などができるようにしたいと考えています。

動いてる最中にスペース押せば一時停止、も一度押せば再開、ESC押せば中断、なんてなカンジ?
ならば FormのKeuUp/KeyDownイベントを捕まえれば実現可能かと。
# あ、USB機器と同期通信してたりすると通信中はキーボード状態を見てないから
# タイミングがズレたり取りこぼしたりしますよ。

ただし...

そのアプリ動かしてる間にIEでニコニコ観てる最中にアラームが鳴ったからって
スペース叩いても止まりません。アプリにフォーカス当たってないから。

いついかなるときも"何かが起こった"ことを検知するのが「グローバル・フック」です。

引用返信 編集キー/
■31455 / inTopicNo.11)  Re[6]: キー割り込みの方法を教えてください
□投稿者/ あいこ (8回)-(2009/01/22(Thu) 11:38:46)
みきぬ 様
オショウ 様
επιστημη様

たくさんのご助言いただきましてありがとうございます。
"グローバルフック"等、調べてみます。
ありがとうございました
解決済み
引用返信 編集キー/
■31456 / inTopicNo.12)  Re[5]: キー割り込みの方法を教えてください
□投稿者/ .SHO (548回)-(2009/01/22(Thu) 11:42:22)
No31450 (あいこ さん) に返信

> マウス操作ではカーソルの移動で時間がかかるのであえてキーで行います。

マウス操作での止める処理は作れるという前提での話なら
KeyDownイベントでいいと思います。
解決済み
引用返信 編集キー/
■31459 / inTopicNo.13)  Re[7]: キー割り込みの方法を教えてください
□投稿者/ επιστημη (1567回)-(2009/01/22(Thu) 12:00:50)
επιστημη さんの Web サイト
2009/01/22(Thu) 12:03:50 編集(投稿者)

> "グローバルフック"等、調べてみます。
> ありがとうございました

あらま拍子抜けw

まず、グローバル・フックが"本当に必要か”ですね。
アプリ稼働中にそいつからフォーカス外すことが絶対ないのなら、
グローバル・フックは不要です。

グローバル・フックは割り込まれたときの処理をnative-DLLに仕立てにゃ
ならんので、managed-DLL(アセンブリ)を吐くC#でできるんやろか? が皆さんのご意見。
# C++/CLIならひょっとしたら...

グローバル・フック不要であればかなり楽にはなりますが、
USB機器と同期通信していると前述の理由により
キー入力の検出が遅れたり取りこぼしたりします。
# 同期通信であっても非常に短いスパンで送受を繰り返しているなら
# 実装次第でキーの遅れが気にならない程度にできるかな。

非同期で、つまりUSB機器との送受信完了時に発行されるイベントに反応するよな
形態を取れるならキー入力の遅れ/抜けを気にせんでええです。

さもなくば(同期にせざるを得ないなら)、
スレッド起こして裏でせっせとやりとりすんでしょね。

なんにせよ自称「C#の超初心者」な方にはタフなお仕事かなー ^^;

解決済み
引用返信 編集キー/
■31460 / inTopicNo.14)  Re[8]: キー割り込みの方法を教えてください
□投稿者/ ぽぴ王子 (427回)-(2009/01/22(Thu) 12:06:05)
ぽぴ王子 さんの Web サイト
結局「なにがしたいのか」の説明が全然できていないまま「コメントありがちょーみんなの言ってること
全然わからないから調べてみるねバッハハーイ」て感じになっちゃってるというか。

επιστημηさんも書いているようにグローバルフックは結構面倒なので、自分であれば RegisterHotKey
でホットキーを登録してみるかもしれません。その前に「どういうことをしたいのか」「どうすればしたい
ことができるのか」を再検討するかも。頭の中がごちゃごちゃしてると、道筋が見えてこないものですし。
解決済み
引用返信 編集キー/
■31465 / inTopicNo.15)  Re[8]: キー割り込みの方法を教えてください
□投稿者/ 渋木宏明(ひどり) (1029回)-(2009/01/22(Thu) 12:57:01)
渋木宏明(ひどり) さんの Web サイト
> グローバル・フックは割り込まれたときの処理をnative-DLLに仕立てにゃ
> ならんので、managed-DLL(アセンブリ)を吐くC#でできるんやろか? が皆さんのご意見。
> # C++/CLIならひょっとしたら...

できません。C++/CLI でも無理です。

グローバルフックのフックプロシージャは、フック対象となるイベントが発生したプロセスのコンテキストで実行されます。

.NET ランタイムは現状、1プロセス内に複数の異なるバージョンが混在できないため、むりくり .dll をこしらえたとしても、.NET ランタイムが混在している環境では不具合を引き起こす可能性が高いです。

あと、Vista 以降では UAC の絡みで思ったとおりにグローバルフックが掛けられないこともあり得ます。


引用返信 編集キー/
■31467 / inTopicNo.16)  Re[9]: キー割り込みの方法を教えてください
□投稿者/ επιστημη (1569回)-(2009/01/22(Thu) 13:02:49)
επιστημη さんの Web サイト
> できません。C++/CLI でも無理です。

で、ですよねー(枯藁

フックのエントリを用意することはできるかも知れんけど、
そっから.Netへの行き先がないもんねー

解決済み
引用返信 編集キー/
■31468 / inTopicNo.17)  Re[9]: キー割り込みの方法を教えてください
□投稿者/ Hongliang (330回)-(2009/01/22(Thu) 13:03:38)
キーフック・マウスフックならグローバルでもマネージドアセンブリで問題ないですけどね。DLL 自体必要ないので。
引用返信 編集キー/
■31473 / inTopicNo.18)  Re[10]: キー割り込みの方法を教えてください
□投稿者/ 渋木宏明(ひどり) (1030回)-(2009/01/22(Thu) 14:04:55)
渋木宏明(ひどり) さんの Web サイト
>■キーフック・マウスフックならグローバルでもマネージドアセンブリで問題ないですけどね。DLL 自体必要ないので。

キー、マウスの「低レベルフック」ですね>マネージで可


引用返信 編集キー/
■31475 / inTopicNo.19)  Re[10]: キー割り込みの方法を教えてください
□投稿者/ 渋木宏明(ひどり) (1031回)-(2009/01/22(Thu) 14:14:35)
渋木宏明(ひどり) さんの Web サイト
> フックのエントリを用意することはできるかも知れんけど、
> そっから.Netへの行き先がないもんねー

そこも結構頑張るらしいです。(うろ覚え)

けど、例えば、既に 1.0 のランタイムが稼働しているプロセスで新たに 2.0 のランタイムを起動しようとしたら失敗してしちゃいます。


引用返信 編集キー/
■31479 / inTopicNo.20)  Re[11]: キー割り込みの方法を教えてください
 
□投稿者/ 渋木宏明(ひどり) (1032回)-(2009/01/22(Thu) 15:19:26)
渋木宏明(ひどり) さんの Web サイト
2009/01/22(Thu) 15:20:05 編集(投稿者)

> >■キーフック・マウスフックならグローバルでもマネージドアセンブリで問題ないですけどね。DLL 自体必要ないので。
>
> キー、マウスの「低レベルフック」ですね>マネージで可

ちなみに、低レベルフックでは、マウスボタンダウンなどのイベント発生を検知することはできますが、そのイベントを握りつぶしたり別のイベントに差し替えたりすることはできません。


引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -