INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2019-07-04 00:00 / 次へ→ / 最新へ⇒

■Windows APIのRegisterHotkey()って、仕様変更したのかな?マウスのお供の挙動に違和感が。

2019年 7月 4日(木) 0:00:00 [さくらのブログから転記]



RSSRSS配信中
https://www.inasoft.org/



マウスのお供で、新しく追加したホットキーの機能をいじっていた時、ふと、ホットキーの割り当てを起動中に変えた場合に、古いホットキーが無効にならないことに気づきました。

例えば、「ON/OFFの切替」をCtrl+Alt+Aに割り当てた後、起動したままCtrl+Alt+Bに割り当て直した場合、Ctrl+Alt+ACtrl+Alt+Bの両方で「ON/OFFの切替」が行われてしまう状況になりました。

201907_mtmohotkey.png

ホットキーの割り当ては、Windows APIのRegisterHotkey()を用いて行っています。
このAPIを使った機能を初めて実装したのは、かなり前のことになりますが……、Windows APIのRegisterHotkey()って、最近、動きが変わったのかな?

昔、使った時は、2回目の呼び出しで同じウインドウハンドルとIDを指定したら、前に指定したホットキーは自動解除されたと思うし、MSDNに書いてある解説でもそう解釈できます。

RegisterHotKeyDocJa.png

ただ、手元のWindows 10で試したら、そうはならずに1回目のRegisterHotkey()で同じハンドル、同じIDで登録した古いホットキーも有効なままになっているような動きになっています。

登録前に一旦、UnregisterHotkey()を呼び出しておけばそうはならないんですが………、昔からそうだったっけか?
昔からそうで、単なる僕の勘違いなら、プログラムを直せばいいのだが、その場合MSDNの記述が怪しいことになる。もし、最近のWindows 10の不良または仕様変更なら、OSごとに影響を調べて、場合によってはOSごとの処理分けを書く必要が出てきて面倒なことになる。

「猫でもわかるプログラミング」の第193章のホットキーを扱った項でも、ホットキーの変更でUnregisterHotKey()を呼び出している様子はない。

どっちだろう?

と思って、最新の?英語ドキュメントを調べたら、「…maintained along with the new hotkey.」(新しい設定とともに保持される)と書いてある!!

RegisterHotKeyDocEn.png

どうやら、Windows Server 2003までの挙動(重複設定時は自動解除)と、最近のWindowsの挙動(重複設定時は両方保持)では、仕様が異なっているということらしい。

うーむ、ホットキーの変更前にUnregisterHotkey()を挟むように、マウスのお供他を修正せねば…。




目次 | ←前へ / 2019-07-04 00:00 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3212359 (+0056)[+0214]

Copyright© 2010-2024 INASOFT