前提・実現したいこと
ALT+F4キーを無効にしたいです。
VC++(MFC)で(6.0の頃)に作ったアプリは Windows 10 で動かしてもF4キーが無効になっています。(ALT+F4を押しても強制終了されません。)
これをC#に移行したいのですが、うまくいきません。
発生している問題・エラーメッセージ
該当するソースコードにブレークポイントを貼っても止まりません。
該当のソースコード
VC++
1 // タスク スイッチを無効にします 2 if( _winmajor >= 5 ){ 3 HINSTANCE hInstance = LoadLibrary( "LowLevelKeyboardProc.dll" ); 4 if( hInstance != NULL ){ 5 LPLOWLEVELKEYBOARDPROC LowLevelKeyboardProc = (LPLOWLEVELKEYBOARDPROC)GetProcAddress( hInstance, "LowLevelKeyboardProc" ); 6 HHOOK hHook = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0 ); 7 LPSETHHOOK fpProg = (LPSETHHOOK)GetProcAddress( hInstance, "SetHHook" ); 8 (*fpProg)( hHook ); 9 } 10 } else { 11 SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, TRUE, &nPreviousState, 0); 12 } 13// 14// 中略 15// 16 17BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 18{ 19 if(pMsg->message==WM_SYSKEYDOWN && pMsg->wParam==VK_F4) return(TRUE); 20 21 return CFrameWnd::PreTranslateMessage(pMsg); 22}
C#
1 public override bool PreProcessMessage(ref Message msg) 2 { 3 const int WM_SYSKEYDOWN = 0x0104; 4 const int VK_F4 = 0x73; 5//↓ここにブレークポイントを貼って何かキーを押してもこの関数自体が呼ばれてないらしい 6 if (msg.Msg == WM_SYSKEYDOWN && msg.WParam.ToInt32() == VK_F4) 7 { 8 return true; 9 } 10 else 11 { 12 return base.PreProcessMessage(ref msg); 13 } 14 }
試したこと
以下のサイトの LowLevelKeyboardProc.dll のサンプルコードをコピペしました。
https://puarts.com/?pid=1147
補足情報(FW/ツールのバージョンなど)
LowLevelKeyboardProc.dll が何をするものなのか?どんな意味があるのか?あまりにも昔のことなので忘れてしまいました。ただ、重要な意味を持っていたということだけは何となく覚えています。(この件とは無関係だったかもしれません。)
また C# の LowLevelKeyboardProc.dll のサンプルコードはコピペしただけなので、あまり意味がわかってません。
VC++で作ればこの機能は出来ると思いますが、他の新しい機能を満たすためにC#で実現したいです。
オーバーライドした PreProcessMessage が呼ばれさえすれば解決すると思っています。
C# に初めて触ったのは3週間前の初心者です。








回答4件
あなたの回答
tips
プレビュー