- 締切済み
デスクトップアイコンの非表示
<環境> Windows Vista HomePremium VC++ 2005 ExpressEdition デスクトップで右クリックして 「表示」→「デスクトップアイコンの表示」をクリックすると アイコンを消したりできますよね? これをプログラミングでやるにはどうしたらいいのでしょうか? 具体的にはデスクトップをダブルクリックしたらアイコンの表示、非表示を 切り替えるということがやりたいのですが。。。 何かそういう関数とかがあるんでしょうか? どなたか教えて下さい!
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★追記。 ・ちょっと文字列が違ったようです。 次のリンクを参考にして下さい。 http://winofsql.jp/c/sendmessagetimeout.htm 『"Policy"』かも。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・『Environment』ではないです。 この『Environment』は HKEY_CURRENT_USER\Environment を通知する場合です。 ・書き換えたレジストリのキーは何処ですか? HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorerですよ。 だから『Software』とか、 『Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer』でしょう。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス 最初に便利関数などはありません。 ・プログラムから行うにはデスクトップ画面のリストビューをフックして ダブルクリック時に表示、非表示にするレジストリ・キーを操作します。 http://winxp.1123.info/070/post_18.html→『デスクトップのすべてのアイコンを無効化』 ここのレジストリ・キーを操作すれば表示、非表示に出来ます。 ・なお、フック処理は必ず DLL 内のルーチンになります。 フックや DLL の作成方法などの知識が必要になります。 関数1つでは絶対に無理ですので。 ※レジストリの設定を反映させるにはエクスプローラに設定変更の通知をします。 ※実際に試したことはありません。上記の方法で上手く出来そうな気はしますが…。注意。
お礼
お返事ありがとうございます。 ↑のサイトを参考にして、レジストリの書き換えには成功しました。 しかし、それがデスクトップに反映されません。 レジストリを書き換えた後、 SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) TEXT("Environment"), SMTO_ABORTIFHUNG, 3000, &dwResult); という感じでやっているのですが、どこか間違っている箇所があるのでしょうか?
- pick52
- ベストアンサー率35% (166/466)
GetDesktopWindow()API関数でデスクトップのウィンドウハンドルを 取得できるのでこれでごにょごにょやればできそうな気がします。 メニューIDを調べてSendMessageでメッセージ送るとか? かなり予測が入っています。
お礼
お返事ありがとうございます。 メニューIDですか。。。参考になりました。 もう三日間ぐらいごにょごにょやっているのですが なかなか難しいですね(^^;
お礼
あらゆる手を使いましたが、レジストリの値を反映することができませんでした。 なので、レジストリを変更するという手は諦めて、 デスクトップをアクティブにし、keybd_event関数でVK_APPS→'V'→'D' と送ってやることでなんとかアイコンの切り替えをすることができました。 右クリックメニューがちらっと出てくるのは気になりますが、 とりあえず目的は達成できました。 ためになるアドバイスをどうもありがとうございました。