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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

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

Q&A

解決済

1回答

813閲覧

C# ホットキーの登録時の例外について

Hanbe.T

総合スコア36

C#

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

0グッド

0クリップ

投稿2018/02/25 06:33

C# ホットキーの登録時に発生する例外について

  • 環境

OS:Windows10 Pro 64bit
VisualStudio:Community 2017

RegisterHotKey/UnregisterHotKeyを使用して、ホットキーの登録/解除を行おうとしているのですが、
プロジェクト作成後、2回目以降に起動(デバッグ)すると例外が発生します。

原因がいまいちわからず、解決に至っていません。
お手数ですが、アドバイス等をいただければ、幸いです。

当方、Javaの経験は長いのですが、C#でのプロジェクト経験はありません。
簡単なアプリケーションくらいは作れる程度のスキルは持っています。

  • ソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Runtime.InteropServices; 8using System.Text; 9using System.Windows.Forms; 10 11namespace ClipBoardViewer { 12 public partial class Form1 : Form { 13 14 // ホットキーID 15 const int HOTKEY_ID = 0x0003; 16 // キー(Shift) 17 const int KEY_MOD_SHIFT = 0x0004; 18 // キー(Alt) 19 const int KEY_MOD_ALT = 0x0001; 20 // キー(Cntrol) 21 const int KEY_MOD_CONTROL = 0x0002; 22 23 // キー 24 const Keys KEY = Keys.A; 25 26 [DllImport("user32.dll")] 27 extern static int RegisterHotKey(IntPtr HWnd, int ID, int MOD_KEY, int KEY); 28 [DllImport("user32.dll")] 29 extern static int UnregisterHotKey(IntPtr HWnd, int ID); 30 31 public Form1() { 32 InitializeComponent(); 33 try { 34 RegisterHotKey(this.Handle, HOTKEY_ID, KEY_MOD_SHIFT | KEY_MOD_ALT, (int)KEY); 35 } catch ( Exception e ) { 36 Console.Write(e.StackTrace); 37 } 38 } 39 40 private void Form1_Load(object sender, EventArgs e) { 41 RegisterHotKey(this.Handle, HOTKEY_ID, KEY_MOD_SHIFT | KEY_MOD_ALT, (int)KEY); 42 } 43 44 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { 45 UnregisterHotKey(this.Handle, HOTKEY_ID); 46 } 47 48 protected override void WndProc(ref Message m) { 49 const int WM_HOTKEY = 0x312; 50 51 if (m.Msg == WM_HOTKEY && (int)m.WParam == HOTKEY_ID) { 52 Show(); 53 Activate(); 54 } 55 } 56 } 57}
  • 標準出力
'ClipBoardViewer.exe' (CLR v2.0.50727: DefaultDomain): 'C:\WINDOWS\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'ClipBoardViewer.exe' (CLR v2.0.50727: DefaultDomain): 'D:\Users\Hanbe.T\Documents\02.Develop\C#\ClipBoardViewer\ClipBoardViewer\bin\Debug\ClipBoardViewer.exe' が読み込まれました。シンボルが読み込まれました。 'ClipBoardViewer.exe' (CLR v2.0.50727: ClipBoardViewer.exe): 'C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'ClipBoardViewer.exe' (CLR v2.0.50727: ClipBoardViewer.exe): 'C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'ClipBoardViewer.exe' (CLR v2.0.50727: ClipBoardViewer.exe): 'C:\WINDOWS\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'ClipBoardViewer.exe' (CLR v2.0.50727: ClipBoardViewer.exe): 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger\x64\Runtime\Microsoft.VisualStudio.Debugger.Runtime.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 'ClipBoardViewer.exe' (CLR v2.0.50727: ClipBoardViewer.exe): 'C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms.resources\2.0.0.0_ja_b77a5c561934e089\System.Windows.Forms.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 例外がスローされました: 'System.ComponentModel.Win32Exception' (System.Windows.Forms.dll の中) プログラム '[4492] ClipBoardViewer.exe' はコード -1 (0xffffffff) で終了しました。

お手数ですが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

base.WndProc()がないですね。

protected override void WndProc(ref Message m) { const int WM_HOTKEY = 0x312; if (m.Msg == WM_HOTKEY && (int)m.WParam == HOTKEY_ID) { Show(); Activate(); } base.WndProc(ref m); // <<-------------- これです。 }

投稿2018/02/25 08:15

編集2018/02/25 08:16
gazette2

総合スコア179

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

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

Hanbe.T

2018/02/25 08:26

RegisterHotKeyを呼び出すと例外が発生していたので、そこに問題があると思い込んでいました。 もともと、else文が記載されていたのですが、その際に一緒に消してしまったようです。 早速のご回答をいただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問