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

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

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

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

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

6779閲覧

ALT+F4キー(アプリケーション強制終了)を無効にしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Windows 10

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

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2021/02/16 12:05

編集2021/02/16 12:25

前提・実現したいこと

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週間前の初心者です。

退会済みユーザー👍を押しています

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

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

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

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

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

m.ts10806

2021/02/16 12:19

>VC++ はプロでしたが、C# は初心者です。 >C# も最近プロになりましたが これを書いたからと、何の意味があるのでしょう。 失礼ながらどれか1つでもプロな人の内容には見えません。 プロって、基本はそれだけで食べていける人たちのことです。 ちょっとお手伝いしてお小遣いもらったとかそういうレベルで「プロ」と呼ぶのは本当にそれだけで食べていってる人たちに失礼というのは覚えておいてください。 「今日から俺はプログラマーだ」と宣言すればなれる(日本は)けど、 生き残るのは難しい職業です。 この手のサイト・サービスは相手の年齢性別容姿職業関係なく、 そこに出てくる技術力のみが全てなので、変な煽り文句は逆効果 とお伝えしておきます。 (「緊急」とかつけるのも同様)
Zuishin

2021/02/16 12:21

ああなるほど、hahaha と笑ってるわけね。何回 BAN されたら気が済むの?
Zuishin

2021/02/16 12:24

m.ts10806 さん、これ smilejack ですよ。
m.ts10806

2021/02/16 12:25 編集

Zuishinさん 理解しました。もうどんなに頑張っても自分の居場所にはなり得ないのに。
退会済みユーザー

退会済みユーザー

2021/02/16 12:49

いや、お前らはどうでもいいんだよ。 C#でF4キーの横取りをして無効にしたいだけだから。 多分、オーバーライドした PreProcessMessage が呼ばれさえすれば解決すると踏んでるんだけど、それを知ってる人がサクッと答えればいい話じゃん。 嫌いな人間にはとことん意地悪するのがこのサイトのあり方なん?
Zuishin

2021/02/16 12:50

知ってるけどお前みたいな愉快犯に教える義理はない。
退会済みユーザー

退会済みユーザー

2021/02/16 12:53

お前が答えなくてもいいよ。 他に知ってる人はいっぱいいるし。
Zuishin

2021/02/16 12:54

知ってる人はいるがお前みたいに暴言を繰り返して何度も BAN されているようなやつに教える義理は誰にもない。
退会済みユーザー

退会済みユーザー

2021/02/16 14:35

今のプログラマーは、いいよなーググればだいたい答え出るし、こんなカスみたいな質問サイトもあるし。昔はせいぜいメーリングリストだったよ。
退会済みユーザー

退会済みユーザー

2021/02/16 22:32

ちなみに C# は始めて3週間の初心者だけど見積り価格500万円のシステムを3週間で完成させました。このレベルのどこがプロじゃないんですかね?
Zuishin

2021/02/16 22:38

見積もりが甘すぎるところ。
Zuishin

2021/02/16 22:39

すぐに脳内世界の話とわかる。
退会済みユーザー

退会済みユーザー

2021/02/16 22:57

見積り出したの俺じゃないんだけど。(笑)
Zuishin

2021/02/17 00:49 編集

500 万の仕事ならそれなりに納期もあるだろうから、初心者が 1 人で 3 週間でできる程度の量なら 20 万で下請けに出せばその期間丸々空いて 480 万円入る。そこに他の仕事を入れたらいい。 見積もりが甘すぎてすぐに脳内世界のこととわかる。
Zuishin

2021/02/16 23:11

だいたい前の前のアカウントで量産してた質問見たけど、控え目に言って駆け出し、もう少し正直に言うならド素人の質問ばかりだったぞ。
退会済みユーザー

退会済みユーザー

2021/02/16 23:16

よく見ろよ素人が困ったときに助けになるような情報提供だって言ってるだろ。
Zuishin

2021/02/16 23:17

お幸せに。
退会済みユーザー

退会済みユーザー

2021/02/16 23:24

下請けに出したら500万円取られるシステム開発を1人で3週間で作ったんだよ。
Zuishin

2021/02/17 00:15 編集

どうぞ幸せな夢を。 これを読んでいる事情を知らない人のために、500 万円の仕事を 1 人で 3 週間でできる人の前の前のアカウントの質問を一つ紹介しておきます。 https://teratail.com/questions/320952 だいたいこんな感じで程度も低く、また他の人が検索してたどり着くことも困難で役に立ちません。やり取りからも、本人には解決が難しすぎた問題であったことが明白です。
guest

回答4

0

ベストアンサー

この質問の解決策は先の通りだけど、根本的な問題解決にはやっぱりhookが必要。

投稿2021/02/16 14:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

できた。

C#

1 private void textBox1_KeyDown(object sender, KeyEventArgs e) 2 { 3 if(e.KeyCode == Keys.F4) 4 { 5 e.Handled = true; 6 }

投稿2021/02/16 13:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

できたわ。ボケ。

C#

1 private void textBox1_KeyDown(object sender, KeyEventArgs e) 2 { 3 if(e.KeyCode == Keys.F4) 4 { 5 e.Handled = true; 6 }

投稿2021/02/16 13:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

これで解決できます。
http://7ujm.net/VB/DisableKey.html

投稿2021/02/17 10:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問