1

現在、Windows 7 で DWM ウィンドウの色付けの色を流動的に変更するプログラムを VB.NET で作成しようとしています。

最初にレジストリ値を直接編集しようとしましたが、UXSMS サービスを再起動する必要がありました。タスクバーのトグルが原因で、この解決策は満足のいくものではありませんでした。

ウィンドウの色を設定するときにコントロールパネルの動作を再現できるuser32.dllやなどのDLLの関数を探しています。themecpl.dll

私は現在、適切な機能を探しているIDAにいます(CColorCplPage::SetDwmColorizationColor良さそうです!)。持ってる人いたらシェアお願いします!

(画面やコードが必要な場合は、お問い合わせください。下手な英語で申し訳ありません。)

4

1 に答える 1

0

レジストリを手動で編集することは、システム設定を変更する正しい方法ではないため、最初の試行は失敗しました。お気づきのように、多くの Windows コンポーネント (および他のアプリケーション!) は、これらの構成値を一度読み取ってキャッシュするため、変更が反映されません。もう 1 つの問題 (私がこれを目にする頻度に驚かれることでしょう) は、レジストリをいじろうとするアプリケーションが、一般的には破損してしまうことです。

代わりに、文書化された API を呼び出して設定を変更する必要があります。ほとんどの場合、これを行うための文書化された方法があります。ない場合は、それを行うべきではありません。

今回もその一例と思われます。文書化されたDwmGetColorizationColor関数がありますが、予想されるように、対応するDwmSetColorizationColor関数はありません。

その理由は、他のアプリケーションではなく、ユーザーが色付け設定を変更できる唯一のユーザーであると想定されているためです。これを悪用しないこと、およびユーザーの明示的な要求でのみそのような変更を行うことを約束するかもしれませんが、すべてのアプリケーションがこれを行うとは限りません。多くの人が悪意を持って使用するため、これらの関数は文書化されておらず公開されていません。

しかし、いつものように、先に進むと、通常は文書化されていない方法を見つけることができます。文書化されていない関数を使用する際の問題は、それらが機能する、または機能し続けるという保証がないことです。新しいバージョンの Windows では変更される可能性があるため、意図的に文書化されていません。ご自身の責任においてのみ使用してください。

この場合、DumpBin などのプログラムを使用して、DWM DLL からエクスポートされたすべての関数のリストを取得すると ( dwmapi.dll)、文書化されていないエクスポートされた関数が多数表示されます。

あなたが興味を持っているのはDwmGetColorizationParametersDwmSetColorizationParametersです。これらの関数はどちらも、COLORIZATIONPARAMS必要な値を含む構造体を引数として取ります。

したがって、これらの関数をリバース エンジニアリングして、適切な定義を取得する必要があります。次に、DwmGetColorizationParameters関数を呼び出し、構造体を渡しCOLORIZATIONPARAMSて現在の構成設定を取得できます。現在の色付けの色を含む構造体のメンバーを変更します。次に、その変更されたバージョンの構造体をDwmSetColorizationParameters関数に渡します。

これを行うことはお勧めしません。

于 2011-12-19T14:51:47.237 に答える