• ベストアンサー

WebbrowserでのPFキー取得

WebbrowserでのPFキー取得 vb.netでwebbrowserを使用してWebを表示しています。 この画面で押されたPFキーなどを取得することは可能なのでしょうか? FORMのkeydownなどでは取得してくれませんでした。 よろしくお願いいたします。

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

  • ベストアンサー
  • rk_les
  • ベストアンサー率63% (23/36)
回答No.8

おはようございます。 こちらも説明不足でした・・・ >一応補足ですがFormでPrtScrは取得できますよ。 正しくはForm上にWebBrowserを貼り付けた場合でもFormでPrtScrは取得できます。 です。一応実験済みですが動作が不安定でプログラムとしては役に立たない状態でした・・・きっともっといい方法があるのでしょうがorz さて、本題ですが・・・ 全てのPFキーなどを制御するということで・・・IDocHostUIHandlerで~などを考えていまして・・・しかしこれだとCOMの知識もある程度分からないと話になりません。 なんとなくWebBrowserのプロパティ見てたらこんなのがありました。 WebBrowserShortcutsEnabled これはAcceleratorKeyをWebBrowserで有効にするかどうかを指定できるプロパティです。 何で今まで気づかなかったのかはわかりませんが・・・とりあえずは一発で全て無効にできます。勿論previewkeydownでキーの取得はできるのでPFキーに処理を与えることもできます。(プロパティの名前をWebBrowserAcceleratorKeyEnabledにしてほしかった・・・ 一応自分が考えた方法で役に立つかは分かりませんが乗せておきます。 キーイベントを取得するためにIDocHostUIHandlerとIOleClientSiteを実装したクラスを作成し、 IDocHostUIHandler.TranslateAcceleratorメソッドでWM_KEYDOWNを受信すれば操作できると考えました。 ご参考までに

papope
質問者

お礼

ご回答ありがとうございます。 上記方法でも、うちの環境ではPrintScreenキーが効いてしまいました。 八方ふさがりですね。 特定のキーはOSが先にフックしてしまうことがあると聞いた覚えがあるので それが影響しているのでしょう(不確定ですが) COMを使用すれば、これを回避できそうですが、面倒ですね^^; Inputmanというソフトでもこの問題をクリアできるはずなのですが、高いものですし・・・・・。 COMを含めて検討してみます。 ご親切にお付き合いいただきありがとうございました。 いろいろと助かりました。

その他の回答 (7)

  • rk_les
  • ベストアンサー率63% (23/36)
回答No.7

無効なんですねw てっきり押した際に何かほかの動作もさせるものだと思っていました・・・ 一応補足ですがFormでPrtScrは取得できますよ。 RemoveHandlerを使えばいいと思います。 調べればサンプルコードはたくさん出てくると思います。

papope
質問者

補足

ご回答ありがとうございます。 説明不足でした。 通常のFormでは取得できますが、Webbrowserを使用している場合 Formのイベントでは取得ができない状態です。 (webbrowser以外のフォームでは当然、取得できます) 教えていただきましたとおり、webbrowser_previewkeydownでのみ 取得できる状態ですので、RemoveHandlerも駄目ではないでしょうか?

  • rk_les
  • ベストアンサー率63% (23/36)
回答No.6

おはようございます。 申し訳ありません。またもや説明不足ですね・・・ KeyUpはFormのイベントの方です。 一つ補足で教えてほしいことがあります。 実際PrintScrで何がしたいのですか?そこらへんを明記していただければもう少し的確なアドバイスができると思います。 よろしくお願いします。

papope
質問者

補足

ご回答ありがとうございます。 ご説明不足でした。 FormイベントのKeyイベントは効かないことは実証済みでした。 ブラウザでPrintScreenキーやPFキーなどを、無効にしたいというのが目的です。 (効かなく見えるようにするだけです。いろいろと手段があるのはわかっていますが) よろしくお願いいたします。

  • rk_les
  • ベストアンサー率63% (23/36)
回答No.5

すみません…説明不足でしたね。 printScrはkeydownではなくup時じゃ無いと取得出来ません。

papope
質問者

お礼

何度もありがとうございます。 ご指摘の通りですね。 しかしwebbrowser.keyupというのがあるようですが 使用法がわかりません。 参考サイトなど教えていただけないでしょうか?

  • rk_les
  • ベストアンサー率63% (23/36)
回答No.4

勿論出来ます。 keys.printscreen みたいなのがあると思います。

papope
質問者

お礼

ご回答ありがとうございます。 ありました・・・ けど、フックできないみたいです。 他のキーはフックできるんですけどPrintScreenはフックしてくれません。 OSが先にフックしてしまうから駄目なんですかね? Inputman使用すればフックできるのでしょうか? ありがとうございました。

  • rk_les
  • ベストアンサー率63% (23/36)
回答No.3

一応ですがサンプルコードも乗せておきますね。 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)
回答No.2

WebBrowserのPreviewKeyDownイベントを使用してみてください。

papope
質問者

お礼

ご回答いただきまして、ありがとうございます。 できました! イベントを探したつもりでしたけど、探し足りませんでした。 申し訳ありません。 ありがとうございました。 もう一点、質問があるのですが、このイベントでPrintScreenキーって取れるのでしょうか? お分かりであれば、よろしくお願いいたします。

  • chuchuo
  • ベストアンサー率45% (99/217)
回答No.1

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

papope
質問者

補足

ご回答ありがとうございます。 私の書き方が悪かったのだと思いますが、お教えいただいた方法で行っても できなかったのです。 処理を見ても同じ処理になっています。 他に設定などあるのでしょうか? お願いいたします。

関連するQ&A

専門家に質問してみよう