C++ - WM_SETTINGCHANGE メッセージをブロードキャストするにはどうすればよいですか?

okwaves2024-01-25  8

目的は、まずタッチパッドのレジストリに変更を加え、次に WM_SETTINGCHANGE ブロードキャストを送信して変更を適用することです。

私が主に探しているリンクは次のとおりです。

https://learn.microsoft.com/en-us/windows/win32/winmsg/wm-settingchange

変更したいレジストリは次のとおりです:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\TapsEnabled

これを解決するにはどうすればよいですか?

プラットフォームは Windows で、プログラミング言語は C++ が推奨されます。

2

SendMessageTimeout() とウィンドウ ハンドルの HWND_BROADCAST。例

– ハンス・パッサント

2020 年 9 月 3 日 21:42

これは、あなた自身がリンクしているドキュメントの段落 2 です

– デビッド・ヘファナン

2020 年 9 月 4 日 8:33



------------------------

リンク先のドキュメントに記載されているとおり:

アプリシステムパラメータを変更するときは、すべてのトップレベルウィンドウに WM_SETTINGCHANGE を送信する必要があります。 (このメッセージはウィンドウに直接送信できません。) WM_SETTINGCHANGE メッセージをすべてのトップレベル ウィンドウに送信するには、hwnd パラメーターを HWND_BROADCAST に設定して SendMessageTimeout 関数を使用します。

...

パラメータ

wParam

...

アプリケーションがこのメッセージを送信する場合、このパラメータは NULL である必要があります。

lParam

システムが SystemParametersInfo 呼び出しの結果としてこのメ​​ッセージを送信する場合、lParam は、変更されたシステム パラメーターを含む領域を示す文字列へのポインターです。通常、このパラメータは、どの特定のシステム パラメータが変更されたかを示しません。 (一部のアプリケーションは、lParam を NULL に設定してこのメ​​ッセージを送信することに注意してください。)一般に、このメッセージを受け取った場合は、アプリケーションで使用されているシステム パラメータ設定を確認して再ロードする必要があります。

この文字列は、レジストリ キーの名前または Win.ini ファイル内のセクションの名前です。文字列がレジストリ名の場合、通常はフル パスではなく、レジストリ内のリーフ ノードのみを示します。

...

たとえば次のようになります。

DWORD_PTR res;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("TapsEnabled"), 0, 1000, &res);

3

ありがとうございます。ただし、HWND_BROADCAST は「識別子「HWND」」を取得しただけです。は未定義です。

– スネークヘイター

2020 年 9 月 7 日 7:02

1

@Snakehater この問題が発生する唯一の原因は、コード内にコア Win32 API #includes がない場合です。 #include 必要最低限​​のものです。それはありますか?

– レミー・ルボー

2020 年 9 月 7 日 8:00

いいえ、まったく含まれていませんでしたが、今ではアーキテクチャが指定されていないエラービットが発生していると思いますhat は Visual Studio のエラーです。

– スネークヘイター

2020 年 9 月 7 日 16:10

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。