|
![]() ![]() ![]() ![]() ![]() | |
マウスのお供で、新しく追加したホットキーの機能をいじっていた時、ふと、ホットキーの割り当てを起動中に変えた場合に、古いホットキーが無効にならないことに気づきました。 例えば、「ON/OFFの切替」をCtrl+Alt+Aに割り当てた後、起動したままCtrl+Alt+Bに割り当て直した場合、Ctrl+Alt+AとCtrl+Alt+Bの両方で「ON/OFFの切替」が行われてしまう状況になりました。 ホットキーの割り当ては、Windows APIのRegisterHotkey()を用いて行っています。 このAPIを使った機能を初めて実装したのは、かなり前のことになりますが……、Windows APIのRegisterHotkey()って、最近、動きが変わったのかな? 昔、使った時は、2回目の呼び出しで同じウインドウハンドルとIDを指定したら、前に指定したホットキーは自動解除されたと思うし、MSDNに書いてある解説でもそう解釈できます。 ただ、手元のWindows 10で試したら、そうはならずに1回目のRegisterHotkey()で同じハンドル、同じIDで登録した古いホットキーも有効なままになっているような動きになっています。 登録前に一旦、UnregisterHotkey()を呼び出しておけばそうはならないんですが………、昔からそうだったっけか? 昔からそうで、単なる僕の勘違いなら、プログラムを直せばいいのだが、その場合MSDNの記述が怪しいことになる。もし、最近のWindows 10の不良または仕様変更なら、OSごとに影響を調べて、場合によってはOSごとの処理分けを書く必要が出てきて面倒なことになる。 「猫でもわかるプログラミング」の第193章のホットキーを扱った項でも、ホットキーの変更でUnregisterHotKey()を呼び出している様子はない。 どっちだろう? と思って、最新の?英語ドキュメントを調べたら、「…maintained along with the new hotkey.」(新しい設定とともに保持される)と書いてある!! どうやら、Windows Server 2003までの挙動(重複設定時は自動解除)と、最近のWindowsの挙動(重複設定時は両方保持)では、仕様が異なっているということらしい。 うーむ、ホットキーの変更前にUnregisterHotkey()を挟むように、マウスのお供他を修正せねば…。 目次の表示: ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメール、フィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。 当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。 |
- 最近の更新 - |
|
3278982 (+0236)[+0255] Copyright© 2010-2025 INASOFT |