• ベストアンサー

VB.NETでフォームがない状態でキー入力を受け付けたいです。

VB.NETなのですが、Visible=Falseでフォームを見えないようにして 他のアプリを使用中でもキー入力を受け付けて、 そのキーに応じた動作をするプログラムを考えているのですが、 フォームがない状態でキーを受け付けるということはできるでしょうか? 大まかな方法でもかまいませんので、教えて頂きたいです。 よろしくおねがいします。m(__)m

質問者が選んだベストアンサー

  • ベストアンサー
  • shobon
  • ベストアンサー率66% (14/21)
回答No.3

Windows APIのGetAsyncKeyStateを利用しても、ありなようですね。 こちらは日本語のページで、それなりにわかりやすそうです。 例ではさらに他のAPIとの組み合わせで、さらに精密にキーを取得しているみたいですねえ。

参考URL:
http://www.itmedia.co.jp/enterprise/articles/0412/07/news034_4.html
popopompom
質問者

お礼

お返事ありがとうございます。 ご紹介いただいた方法でほぼ解決できそうです。 グローバルフックは魅力的な方法だと思ったのですが、 私にはとても敷居が高そうなので使えるようなところまで こぎつけることができるか心配だったのですが、 GetAsyncKeyStateならとても簡単に出来そうです。 とても助かりました。ありがとうございました。

その他の回答 (2)

  • shobon
  • ベストアンサー率66% (14/21)
回答No.2

ええと…それは所謂「キーロガー」みたいに、 ・起動しても何も見えないけど、キー入力動作に反応して、どのキーを打ち込んだか記録する(ないしは対応した処理を行う) とか、そういう風な動作のアプリケーションを作成されようとしていますか? そうでありましたら「VB.NET グローバルフック」で検索してみれば、ある程度の解説や手順が乗っているかと思います。 それを読めばわかると思いますが、.NET FRAMEWORKでは別プロセスの動作を監視するのが困難であるので、APIやアンマネージの動作が必須になるようです。 下のURLは、C#.NETでグローバルフックを設定したプログラムだそうです。何かの参考にはなるかと。

参考URL:
http://www.codeproject.com/csharp/GlobalSystemHook.asp
popopompom
質問者

お礼

お返事ありがとございます。 説明のしかたがいまいち伝わり辛かったかと思いますが、 キーロガーみたい、というかそのものになるわけですね。 用途としてはショートカットキーを設定して、 他のアプリで所定の操作を簡単に行えるようにしたいと思っております。 リンク先のサンプルは正に希望通りの動作をしてくれましたが、 英語ばかりなので、かなり苦戦しそうです。 グローバルフックという言葉がわかりましたので、 いろいろと調べてみたいと思います。 またショートカットキーで他のプログラムを操作する方法で、 グローバルフック以外の方法がありましたら教えて頂けたらうれしいです。

noname#187541
noname#187541
回答No.1

おはようございます。 よく分かりませんがこの辺は参考になるでしょうか。 Buttonのクリックイベントを発生させる http://dobon.net/vb/dotnet/control/performclick.html

popopompom
質問者

お礼

お返事ありがとうございます。 今回の動作とは違うようですが、アプリの操作に便利そうなので、 グローバルフックが解決してアプリを操作するときに利用してみようかと思います。 ありがとうございました。

関連するQ&A

  • VB.NETでブラウザのフォームに入力する方法について

    VB.NETでブラウザに表示されたWEBページのフォームに データを入力したり、ラジオボタンの設定をしたりしたいのですが、 入力内容によってフォームの入力欄がEnabled = True や Falseに 切り替わる入力欄がある場合、VBでそのエレメントに データを設定してもフォームを送信などをした際に反映されていません。 例えばラジオボタンで選択A、選択B、その他という3つの選択があって、 その他を選択すると、テキスト入力エリアが入力可能になるというフォームです。 ブラウザに直接手動で設定を変更すれば、入力欄のEnabledが切り替わるのですが、 VBでラジオボタンを設定した場合は切り替わらず、Enabled = False の状態のまま VBでデータを設定しても受け付けられないようです。 この為、VBでデータを設定した際に、別の欄のEnabledの状態を変えたいのですが、 どのような方法でやれば良いでしょうか。ご教授いただければ幸いです。

  • vb.net 2008にて、アプリ起動時にフォームを非表示にする方法をお教えください。

    dim str as string dim f1 as new form1(str) f1.showdaialog() 上記のように変数を伴って別フォームより、非表示で起動したいフォームを呼び出しております。 vb.netではアプリのロードイベントにて、me.visible =false 等で非表示にできないことをしりました。 そこで、http://dobon.net/vb/dotnet/form/hideformwithtrayicon.htmlを参考にいろいろと試してみましたがだめでした。 フォームを宣言する際、引数を必要としている作りであるため、上記URLの パラメータを指定せずにApplication.Runを呼び出す方法が使えないため、 フォーム最小化、タスクバー非表示の方法を用いてみると、アプリが終了してしまいました。 次に、タイマーを使い、me.visible= falseとすると、その場合もアプリが終了してしまいました。 また、タイマーイベント内にて、フォーム最小化、タスクバー非表示の方法を試してみても、アプリが終了する結果となりました。 フォームがウィンドウ画面から確認できない状態になるとアプリが終了する仕様になってしまったのでしょうか。 また、この現象を回避し、起動時にフォームを非表示にする方法があればお教えください。

  • キーの入力をVBで受けたいんです。

    VBで簡単な業務支援をしたいと思っています。 VBのアプリケーションがアクティブになっていなくても(起動はしてる)、あるキーの入力を感知して、VBがアクティブになりイベントが動くような処理はできないでしょうか? できればVBでやりたいのですが、Windowsの機能やAPIを使ってでもかまいませんので方法がありましたら教えてください。

  • キー入力受付状態の取得

    お世話になります。 ボタンを押すと、別の外部アプリを起動させ、そのアプリに自動でキー入力を行うプログラムを作成しているんですが、 外部アプリの立ち上がりの状態が、一定の時間では無いので、いつキー入力を送ればいいのかが分かりません。 外部アプリのキー入力の受付状態を取得するにはどうすればいいのですか。教えてください。 環境は visualC 6.0 OS windows XP

  • VB.netでフォームのクローン

    VB.net2013にて、フォームアプリ作成中です。 アプリの構成としては、 Aフォーム、Bフォームの2画面があり Aフォームの呼出ボタンにより、フォームを呼び出す仕組みです。 Bフォームでは、データ編集できる 下記のような入力コントロールが多数配置されています。 ・テキストボックス ・スプレッドシート ・ラジオボタン ・ユーザコントロール各種 等々 ※Aフォームには、編集状態を保持するために Bフォームのインスタンスを保持しています。 Bフォームには、キャンセルボタンが配置してあり、 これにより編集状態を、画面を開きなおした段階まで戻したいと思っています。 Bフォームを表示する際に、 Aフォームの保持している、Bフォームのインスタンスを クローンコピーし退避しておくことで Bフォームクローンで元に戻そうと構想しています。 ◾︎案1ーーー memberwisecloneのクローンでは、 Bフォームの参照型のメンバをディープコピー出来ないようでした。 ーーーーーー ◾︎案2 ーーー 下記参考サイトより、 メモリ上に一旦シリアライズして、コピーする方法は、 基底であるFormクラスがシリアライズできないため こちらも出来ませんでした。 d.hatena.ne.jp/tekk/touch/20100131/1264913887 ーーーーーー フォーム上のコントロールをクローンする 他に良い方法はないでしょうか? 案1では、値型のメンバはmemberwisecloneでクローン出来たため 残りのコントロールをどのようにディープコピーするかで 悩んでいます。 InvokeMemberなるもので、対象のコントロールについて 別インスタンスを生成するというところは出来たのですが コントロールの編集途中までの各種プロパティ値までは 引き継がれませんでした。 やはり別インスタンスとしたところに 再度入力値を設定しなおしてあげる必要があるのでしょうか? 作業工数と、汎用性を考えると もっと他に良い方法があるのではないか とは思うのですが・・・ もしよりよい方法をご存知の方いらっしゃいましたら ご教授願います。よろしくお願いいたします。

  • VB2005で、フォームを初期化したいのですが、教えてください。

    VB2005で、フォームを初期化したいのですが、教えてください。 VB2005で、フォームにデータベース内容(ORACLE)を表示するプログラムを作っています。その際、F8キーを押すと画面内容(テキストボックスやDatagridviewの編集内容)を初期ロード状態に戻すようにしたいと思い、F8キー押下時のイベントに、以下のようにプログラムしました。 dim frm as form frm = new form1 me.close frm.show() としてみましたが、me.closeで、プログラムが終了してしまうようです。 どうするのが適切かお教えください。

  • VBAからVB.Netで作成したフォームの起動

    Wordマクロで下記のような動作をすることができますでしょうか? (1) WordマクロからVB.Netのフォームを起動 (2) (1)で起動されたフォーム上のOKボタンをクリックすると、フォームに入力されたデータを   WordVBA側が受け取り、処理を行う。 よろしくお願いします。

  • VB.net2003のアプリをVB2010で動かせるようにしたい

    VB.net2003のアプリをVB2010で動かせるようにしたい VB.net2003で作られたアプリですが、windows Vistaや7では動作しないというバグが発生した為、 開発環境を最新のVB2010にして動作するようにしようとしています。 プロジェクトを開くと自動的に変換をかけてくれるのですが、リビルドをかけると 添付のようにエラーが1つ発生して他にもワーニングが山のように出てきます。 vbって基本的にはアッパーコンパチだった思ったのですが、 別バージョンで動かすのはムリなのでしょうか?

  • VB6プログラムを.netで呼び出し、使う方法

    VB6で作った標準EXEプログラムを インターネット上でブラウザにて動作できるようにしたいと 考えております。 ASP.NETアプリケーションにて変換・作成して、 IISサーバに乗せればいいと考えていたのですが、 VB6のプログラムをアップグレードしようと思ったところ、 エラーが出てアップグレードできないので、 ネットや本で調べたところ、 アップグレードウィザードでアップグレードできない場合は (1)継承されていないフォーム等を変換した後にアップグレードするか、 (2)全く新しく最初からプログラムを作り直すか、 (3)VB6のプログラムを.netプログラムでそのまま呼び出して使う、 という3つの選択肢があると書かれていました。 そこで、(3)ができるようならしてみたいと思うのですが、 詳しい方法が書かれておらず困っております。 その方法についてお詳しい方、あるいは それについて詳しく書かれている本やサイトを ご存知の方がいらっしゃいましたら、ぜひお教え下さい。 よろしくお願いいたします。

  • VB.NETのフォームに別のウインドウ型プログラムを組み込む方法

    VB.NETのフォームの一部に、別プログラムを組み込む方法を探しています。 例えば、HTMLにIFRAMEで別のhtmlを表示するように、VB.NETのフォームにexcelやワードの画面を表示させる感じです。 類似の方法をご存知の方がいらっしゃれば、ご教授願います。

専門家に質問してみよう