- ベストアンサー
WebbrowserでのPFキー取得
WebbrowserでのPFキー取得 vb.netでwebbrowserを使用してWebを表示しています。 この画面で押されたPFキーなどを取得することは可能なのでしょうか? FORMのkeydownなどでは取得してくれませんでした。 よろしくお願いいたします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
おはようございます。 こちらも説明不足でした・・・ >一応補足ですがFormでPrtScrは取得できますよ。 正しくはForm上にWebBrowserを貼り付けた場合でもFormでPrtScrは取得できます。 です。一応実験済みですが動作が不安定でプログラムとしては役に立たない状態でした・・・きっともっといい方法があるのでしょうがorz さて、本題ですが・・・ 全てのPFキーなどを制御するということで・・・IDocHostUIHandlerで~などを考えていまして・・・しかしこれだとCOMの知識もある程度分からないと話になりません。 なんとなくWebBrowserのプロパティ見てたらこんなのがありました。 WebBrowserShortcutsEnabled これはAcceleratorKeyをWebBrowserで有効にするかどうかを指定できるプロパティです。 何で今まで気づかなかったのかはわかりませんが・・・とりあえずは一発で全て無効にできます。勿論previewkeydownでキーの取得はできるのでPFキーに処理を与えることもできます。(プロパティの名前をWebBrowserAcceleratorKeyEnabledにしてほしかった・・・ 一応自分が考えた方法で役に立つかは分かりませんが乗せておきます。 キーイベントを取得するためにIDocHostUIHandlerとIOleClientSiteを実装したクラスを作成し、 IDocHostUIHandler.TranslateAcceleratorメソッドでWM_KEYDOWNを受信すれば操作できると考えました。 ご参考までに
その他の回答 (7)
- rk_les
- ベストアンサー率63% (23/36)
無効なんですねw てっきり押した際に何かほかの動作もさせるものだと思っていました・・・ 一応補足ですがFormでPrtScrは取得できますよ。 RemoveHandlerを使えばいいと思います。 調べればサンプルコードはたくさん出てくると思います。
補足
ご回答ありがとうございます。 説明不足でした。 通常のFormでは取得できますが、Webbrowserを使用している場合 Formのイベントでは取得ができない状態です。 (webbrowser以外のフォームでは当然、取得できます) 教えていただきましたとおり、webbrowser_previewkeydownでのみ 取得できる状態ですので、RemoveHandlerも駄目ではないでしょうか?
- rk_les
- ベストアンサー率63% (23/36)
おはようございます。 申し訳ありません。またもや説明不足ですね・・・ KeyUpはFormのイベントの方です。 一つ補足で教えてほしいことがあります。 実際PrintScrで何がしたいのですか?そこらへんを明記していただければもう少し的確なアドバイスができると思います。 よろしくお願いします。
補足
ご回答ありがとうございます。 ご説明不足でした。 FormイベントのKeyイベントは効かないことは実証済みでした。 ブラウザでPrintScreenキーやPFキーなどを、無効にしたいというのが目的です。 (効かなく見えるようにするだけです。いろいろと手段があるのはわかっていますが) よろしくお願いいたします。
- rk_les
- ベストアンサー率63% (23/36)
すみません…説明不足でしたね。 printScrはkeydownではなくup時じゃ無いと取得出来ません。
お礼
何度もありがとうございます。 ご指摘の通りですね。 しかしwebbrowser.keyupというのがあるようですが 使用法がわかりません。 参考サイトなど教えていただけないでしょうか?
- rk_les
- ベストアンサー率63% (23/36)
勿論出来ます。 keys.printscreen みたいなのがあると思います。
お礼
ご回答ありがとうございます。 ありました・・・ けど、フックできないみたいです。 他のキーはフックできるんですけどPrintScreenはフックしてくれません。 OSが先にフックしてしまうから駄目なんですかね? Inputman使用すればフックできるのでしょうか? ありがとうございました。
- rk_les
- ベストアンサー率63% (23/36)
一応ですがサンプルコードも乗せておきますね。 Private Sub WebBrowser1_PreviewKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles WebBrowser1.PreviewKeyDown If e.KeyCode = Keys.F1 Then MessageBox.Show(e.KeyCode.ToString() + "押しました") e.IsInputKey = True End If End Sub
- rk_les
- ベストアンサー率63% (23/36)
WebBrowserのPreviewKeyDownイベントを使用してみてください。
お礼
ご回答いただきまして、ありがとうございます。 できました! イベントを探したつもりでしたけど、探し足りませんでした。 申し訳ありません。 ありがとうございました。 もう一点、質問があるのですが、このイベントでPrintScreenキーって取れるのでしょうか? お分かりであれば、よろしくお願いいたします。
- chuchuo
- ベストアンサー率45% (99/217)
System.Windows.Forms.KeyEventArgs で解決です。 下記にサンプルコードを記載しておきます。 Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown If e.KeyCode = Keys.F1 Then run1() End If If e.KeyCode = Keys.F2 Then run3() End If If e.KeyCode = Keys.F3 Then run4() End If End Sub
補足
ご回答ありがとうございます。 私の書き方が悪かったのだと思いますが、お教えいただいた方法で行っても できなかったのです。 処理を見ても同じ処理になっています。 他に設定などあるのでしょうか? お願いいたします。
お礼
ご回答ありがとうございます。 上記方法でも、うちの環境ではPrintScreenキーが効いてしまいました。 八方ふさがりですね。 特定のキーはOSが先にフックしてしまうことがあると聞いた覚えがあるので それが影響しているのでしょう(不確定ですが) COMを使用すれば、これを回避できそうですが、面倒ですね^^; Inputmanというソフトでもこの問題をクリアできるはずなのですが、高いものですし・・・・・。 COMを含めて検討してみます。 ご親切にお付き合いいただきありがとうございました。 いろいろと助かりました。