質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

3896閲覧

WPFで画面外をクリックした際にイベントを発生させたいのですが、方法がわかりません。

chico_

総合スコア4

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2021/03/21 11:42

編集2021/03/21 11:44

前提・実現したいこと

現在C#でWPFのアプリを作成しているのですが、
同じ.netなので同様に動作するかと思い、以下のサイトを参考にして、
コントロール外でのマウスクリックをイベントとしてフックしようとした所、
ツールボックスからMouseHookを該当の画面に配置しようとした際にエラーが発生しました。
http://hongliang.seesaa.net/article/7651626.html

一先ず自分が調べた中で発生したエラーに対しての質問になってしまっていますが、
もし別の方法があるのであればそちらもご教授いただきたいです。

発生している問題・エラーメッセージ

コンポーネント'MouseHook'を生成できませんでした。エラーメッセージ: 'System.ComponentModel.Win32Exception(0x80004005):指定されたモジュールが見つかりません。 場所HongliangSoft.Utilities.Gui.MouseHook..ctor()場所 .......\MouseHook2.cs:行162'

該当のソースコード

C#

1///<summary> 2 ///インスタンスを作成する。 3 ///</summary> 4 ///<exception cref="Win32Exception">フックに失敗しました。原因の詳細はエラーコードを参照してください。</exception> 5 public MouseHook() { 6 if (Environment.OSVersion.Platform != PlatformID.Win32NT) 7 throw new PlatformNotSupportedException("Windows 98/Meではサポートされていません。"); 8 MouseHookDelegate handler = new MouseHookDelegate(CallNextHook); 9 this.hookDelegate = GCHandle.Alloc(handler); 10 IntPtr module = Marshal.GetHINSTANCE(typeof(MouseHook).Assembly.GetModules()[0]); 11 this.hook = SetWindowsHookEx(MouseLowLevelHook, handler, module, 0); 12 if (hook == IntPtr.Zero)    // こちらのif文に入り、エラーが発生します。 13 throw new Win32Exception(Marshal.GetLastWin32Error()); 14 }

試したこと

1.サイト上に載っている旧ソースでは動くのか試したところ、
ツールボックス上からドラッグ&ドロップし、配置することには成功したのですが、
イベントをフックした際にMessageBox.Show("test")を実行するようにしたところ、
永遠とイベントが発生し、メッセージウィンドウが大量に出てきてしまいました。

2.該当のエラー箇所(if文)をコメントアウトし、実行した所上記と同じ事象が発生しました。

C#についても、WPFについてもまだまだ無知なため、
ご教授いただきたいです。

補足情報(FW/ツールのバージョンなど)

VisualStudio Community 2019 Version 16.4.2
.Net Framework 4.7.2
Windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

1.サイト上に載っている旧ソースでは動くのか試したところ、

ツールボックス上からドラッグ&ドロップし、配置することには成功したのですが、
イベントをフックした際にMessageBox.Show("test")を実行するようにしたところ、
永遠とイベントが発生し、メッセージウィンドウが大量に出てきてしまいました。

それは一応フックは成功してるという事ではないですかね。
常にフックメッセージが飛んでくるフックハンドラ内でMessageBox表示はやばいと思うので、デバッグならDebug.WriteLine辺りを使うといいかもしれません。

質問に載っているURLのページのコメント欄で、コードの修正点が指摘されているので、そちらも目を通した方が良いかもしれません。

投稿2021/03/21 11:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chico_

2021/03/21 12:32

> それは一応フックは成功してるという事ではないですかね。 > 常にフックメッセージが飛んでくるフックハンドラ内でMessageBox表示は> やばいと思うので、デバッグならDebug.WriteLine辺りを使うといいかもしれません。 丁寧なご回答&ご指摘ありがとうございます。 次からそうします。 > 質問に載っているURLのページのコメント欄で、コードの修正点が指摘されているので、そちらも目を通した方が良いかもしれません。 すいません。そちら記載してませんでしたので、修正しておきます。 コメント欄に載っているコードの修正点は、 今、再度確認したのですが最新の物以外は試しております。 (最新のものはstackoverflowの紹介かと思い、ちゃんと目を通しておりませんでした。これから確認いたします)
chico_

2021/03/21 12:58

最新の物を試したところ、問題なくマウスイベントが全部取得できるようになったので、 ちゃんとソースを読み直し、メッセージから右クリックを押した情報を確認する用にすることによって、 無事対象の画面外をクリックしたときに動作するようになりました。 完全に自分の視野が狭かったです。 お助けいただき、ありがとうございました。
guest

0

上記URL内の最新コメントを反映し、
下記のような記述にすれば動かす事が出来ました。

C#

1private void mouseHook1_MouseHooked(object sender, HongliangSoft.Utilities.Gui.MouseHookedEventArgs e) 2 { 3       // このif文の場合左クリック押下時にif文内に入る 4 if (MouseMessage.LDown == e.Message) 5 { 6 // 処理を記述 7 } 8 }

投稿2021/03/21 13:01

chico_

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問