「これはヤバかったな」という遅刻エピソード

<環境>
Windows Vista HomePremium
VC++ 2005 ExpressEdition

デスクトップで右クリックして
「表示」→「デスクトップアイコンの表示」をクリックすると
アイコンを消したりできますよね?

これをプログラミングでやるにはどうしたらいいのでしょうか?
具体的にはデスクトップをダブルクリックしたらアイコンの表示、非表示を
切り替えるということがやりたいのですが。。。

何かそういう関数とかがあるんでしょうか?
どなたか教えて下さい!

A 回答 (4件)

★アドバイス


 最初に便利関数などはありません。
・プログラムから行うにはデスクトップ画面のリストビューをフックして
 ダブルクリック時に表示、非表示にするレジストリ・キーを操作します。
 http://winxp.1123.info/070/post_18.html→『デスクトップのすべてのアイコンを無効化』
 ここのレジストリ・キーを操作すれば表示、非表示に出来ます。
・なお、フック処理は必ず DLL 内のルーチンになります。
 フックや DLL の作成方法などの知識が必要になります。
 関数1つでは絶対に無理ですので。
 ※レジストリの設定を反映させるにはエクスプローラに設定変更の通知をします。
 ※実際に試したことはありません。上記の方法で上手く出来そうな気はしますが…。注意。

参考URL:http://winxp.1123.info/070/post_18.html
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

↑のサイトを参考にして、レジストリの書き換えには成功しました。
しかし、それがデスクトップに反映されません。

レジストリを書き換えた後、
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM) TEXT("Environment"), SMTO_ABORTIFHUNG, 3000, &dwResult);
という感じでやっているのですが、どこか間違っている箇所があるのでしょうか?

お礼日時:2008/08/20 19:28

★追記。


・ちょっと文字列が違ったようです。
 次のリンクを参考にして下さい。
 http://winofsql.jp/c/sendmessagetimeout.htm
 『"Policy"』かも。

参考URL:http://winofsql.jp/c/sendmessagetimeout.htm
    • good
    • 0
この回答へのお礼

あらゆる手を使いましたが、レジストリの値を反映することができませんでした。

なので、レジストリを変更するという手は諦めて、
デスクトップをアクティブにし、keybd_event関数でVK_APPS→'V'→'D'
と送ってやることでなんとかアイコンの切り替えをすることができました。

右クリックメニューがちらっと出てくるのは気になりますが、
とりあえず目的は達成できました。

ためになるアドバイスをどうもありがとうございました。

お礼日時:2008/08/21 02:31

★アドバイス


・『Environment』ではないです。
 この『Environment』は HKEY_CURRENT_USER\Environment を通知する場合です。
 
・書き換えたレジストリのキーは何処ですか?
 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorerですよ。
 だから『Software』とか、
 『Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer』でしょう。
    • good
    • 0

GetDesktopWindow()API関数でデスクトップのウィンドウハンドルを


取得できるのでこれでごにょごにょやればできそうな気がします。
メニューIDを調べてSendMessageでメッセージ送るとか?

かなり予測が入っています。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

メニューIDですか。。。参考になりました。
もう三日間ぐらいごにょごにょやっているのですが
なかなか難しいですね(^^;

お礼日時:2008/08/20 15:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!