• 締切済み

C# 何かキーを押すとことで処理を中止したい

C#2003でウィンドウズアプリケーションを作っています。 (1)ある処理開始 (2)ユーザーが任意のキーもしくはマウスを動かす (3)処理を停止する ということを実現したいのですが、(2)~(3)の流れはどのように実現すればいいのでしょうか。 アドバイスお願いします(どこかへのリンクでもかまいません)

みんなの回答

回答No.4

System.ComponentModel.BackgroundWorkerだと再開/一時停止を行えるメソッドが無かったかと記憶しています。 System.Threading.Threadで実装してください。 http://msdn.microsoft.com/ja-jp/library/system.threading.thread(v=vs.110).aspx

  • mattue2ks
  • ベストアンサー率25% (3/12)
回答No.3

タイマーで定期間隔監視するようにして、 キーボード状態はGetAsyncKeyState, GetKeyboardState, GetKeyState等で取得、マウス座標はControl.MousePositionを見るのはいかがですか。 GetAsyncKeyStateとGetKeyboardStateはWin32 APIですので、使用には以下のような宣言が必要です。(あくまでも例です。Cの型と矛盾がなければ以下の宣言は微調整がききます) [DllImport("user32.dll")] static extern short GetAsyncKeyState(int vKey); [DllImport("user32.dll")] static extern bool GetKeyboardState(byte [] lpKeyState); [DllImport("user32.dll")] static extern short GetKeyState(VirtualKeyStates nVirtKey); 詳細はMSDNを参照して下さい。 http://www.microsoft.com/japan/msdn/ Win32APIの宣言は以下のサイトから取りました。 http://www.pinvoke.net/

  • yotchan2
  • ベストアンサー率61% (8/13)
回答No.2

マウスの方は分かりませんので、キーボードの方だけ参考意見として。。 フォームがアクティブでない場合ということで、ホットキーの設定をしなくてはなりません。F1押すとヘルプが出るようなイメージで、他のキーを割り当てます。 また、"(1)ある処理開始"中に停止ということなので、これは非同期で動かす必要があるかと思います。その辺は大丈夫でしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

フォームのMouseMove(Click?) イベント、KeyDown か KeyPress イベントあたりで処理を停止するようにすればいいんじゃないでしょうか

jyuzou
質問者

補足

回答ありがとうございました。 言い忘れてました。すみません補足します。 フォームがアクティブになっていない場合でも停止処理をさせたく思い、このような場合どうすればよいか質問させていただきました。

関連するQ&A

専門家に質問してみよう