こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WebbrowserでのPFキー取得

WebbrowserでのPFキー取得

vb.netでwebbrowserを使用してWebを表示しています。

この画面で押されたPFキーなどを取得することは可能なのでしょうか?

FORMのkeydownなどでは取得してくれませんでした。

よろしくお願いいたします。

投稿日時 - 2010-03-24 17:28:32

QNo.5776299

すぐに回答ほしいです

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

おはようございます。

こちらも説明不足でした・・・
>一応補足ですがFormでPrtScrは取得できますよ。
正しくはForm上にWebBrowserを貼り付けた場合でもFormでPrtScrは取得できます。
です。一応実験済みですが動作が不安定でプログラムとしては役に立たない状態でした・・・きっともっといい方法があるのでしょうがorz

さて、本題ですが・・・
全てのPFキーなどを制御するということで・・・IDocHostUIHandlerで~などを考えていまして・・・しかしこれだとCOMの知識もある程度分からないと話になりません。
なんとなくWebBrowserのプロパティ見てたらこんなのがありました。
WebBrowserShortcutsEnabled
これはAcceleratorKeyをWebBrowserで有効にするかどうかを指定できるプロパティです。
何で今まで気づかなかったのかはわかりませんが・・・とりあえずは一発で全て無効にできます。勿論previewkeydownでキーの取得はできるのでPFキーに処理を与えることもできます。(プロパティの名前をWebBrowserAcceleratorKeyEnabledにしてほしかった・・・

一応自分が考えた方法で役に立つかは分かりませんが乗せておきます。
キーイベントを取得するためにIDocHostUIHandlerとIOleClientSiteを実装したクラスを作成し、 IDocHostUIHandler.TranslateAcceleratorメソッドでWM_KEYDOWNを受信すれば操作できると考えました。
ご参考までに

投稿日時 - 2010-04-01 10:36:32

お礼

ご回答ありがとうございます。

上記方法でも、うちの環境ではPrintScreenキーが効いてしまいました。
八方ふさがりですね。

特定のキーはOSが先にフックしてしまうことがあると聞いた覚えがあるので
それが影響しているのでしょう(不確定ですが)

COMを使用すれば、これを回避できそうですが、面倒ですね^^;

Inputmanというソフトでもこの問題をクリアできるはずなのですが、高いものですし・・・・・。

COMを含めて検討してみます。

ご親切にお付き合いいただきありがとうございました。
いろいろと助かりました。

投稿日時 - 2010-04-01 18:49:17

ANo.8

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

無効なんですねw
てっきり押した際に何かほかの動作もさせるものだと思っていました・・・

一応補足ですがFormでPrtScrは取得できますよ。

RemoveHandlerを使えばいいと思います。
調べればサンプルコードはたくさん出てくると思います。

投稿日時 - 2010-03-29 18:34:19

補足

ご回答ありがとうございます。

説明不足でした。

通常のFormでは取得できますが、Webbrowserを使用している場合
Formのイベントでは取得ができない状態です。
(webbrowser以外のフォームでは当然、取得できます)

教えていただきましたとおり、webbrowser_previewkeydownでのみ
取得できる状態ですので、RemoveHandlerも駄目ではないでしょうか?

投稿日時 - 2010-03-31 18:40:24

ANo.6

おはようございます。
申し訳ありません。またもや説明不足ですね・・・
KeyUpはFormのイベントの方です。

一つ補足で教えてほしいことがあります。
実際PrintScrで何がしたいのですか?そこらへんを明記していただければもう少し的確なアドバイスができると思います。
よろしくお願いします。

投稿日時 - 2010-03-29 11:06:53

補足

ご回答ありがとうございます。

ご説明不足でした。
FormイベントのKeyイベントは効かないことは実証済みでした。

ブラウザでPrintScreenキーやPFキーなどを、無効にしたいというのが目的です。
(効かなく見えるようにするだけです。いろいろと手段があるのはわかっていますが)

よろしくお願いいたします。

投稿日時 - 2010-03-29 16:28:39

ANo.5

すみません…説明不足でしたね。

printScrはkeydownではなくup時じゃ無いと取得出来ません。

投稿日時 - 2010-03-27 09:13:34

お礼

何度もありがとうございます。

ご指摘の通りですね。

しかしwebbrowser.keyupというのがあるようですが
使用法がわかりません。

参考サイトなど教えていただけないでしょうか?

投稿日時 - 2010-03-29 07:45:40

ANo.4

勿論出来ます。

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

投稿日時 - 2010-03-26 19:23:42

お礼

ご回答ありがとうございます。

ありました・・・

けど、フックできないみたいです。

他のキーはフックできるんですけどPrintScreenはフックしてくれません。

OSが先にフックしてしまうから駄目なんですかね?

Inputman使用すればフックできるのでしょうか?

ありがとうございました。

投稿日時 - 2010-03-27 07:56:18

ANo.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

投稿日時 - 2010-03-26 16:40:39

ANo.2

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

投稿日時 - 2010-03-26 16:36:32

お礼

ご回答いただきまして、ありがとうございます。

できました!
イベントを探したつもりでしたけど、探し足りませんでした。
申し訳ありません。

ありがとうございました。

もう一点、質問があるのですが、このイベントでPrintScreenキーって取れるのでしょうか?

お分かりであれば、よろしくお願いいたします。

投稿日時 - 2010-03-26 18:08:19

ANo.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

投稿日時 - 2010-03-25 11:40:23

補足

ご回答ありがとうございます。

私の書き方が悪かったのだと思いますが、お教えいただいた方法で行っても
できなかったのです。

処理を見ても同じ処理になっています。

他に設定などあるのでしょうか?

お願いいたします。

投稿日時 - 2010-03-25 18:16:10