目的は、まずタッチパッドのレジストリに変更を加え、次に 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