4

デスクトップから特定のアイコンを非表示にする方法を探しています。私は通常、デスクトップ上に多くのアイコンを持っています (ファイルを見つけるのが本当に面倒です)。そのため、入力時にそれらを「フィルタリング」する小さなツールを書きたいと思います。それらを「移動」したり削除したりしたくありません。それらを非表示にする(または暗くする)だけです。すべてのアイコンの非表示ステータスの表示を一度に切り替える方法は知っていますが、アイコンごとではありません。何か案は?

4

2 に答える 2

3

どうにかしてデスクトップのコントロールに移動しようとしますListView(Win32 API を使用)。次に、非表示にする項目の上に半透明の長方形を描画し (マクロ/メッセージを使用して項目の長方形をクエリできますListItem_GetItemRect)、リスト コントロールから項目を一時的に削除し、項目のステータスをCUT(フェードアウト) または、リスト ビューの画像リストを操作して透明な画像を追加し、アイテムの画像をこれに設定します。

しかし、このアプローチが機能するかどうかはわかりません...そして、これをC#で試すかどうかはわかりません(むしろC ++を使用したいです)。

于 2010-02-19T03:00:24.563 に答える
3

@crono、あなたの最良の選択肢は、COMライブラリ「Microsoft Shell Control And Automation」への参照を追加し、Shell32.Shellオブジェクトを使用することだと思います。次に、ショートカットを列挙し、ショートカットのファイル属性 (FileAttributes.Hidden) を設定します。

詳細については、これらのリンクを確認してください。

この簡単な例を参照してください。これは完全ではなく、単なるドラフトです。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using Shell32; //"Microsoft Shell Control And Automation"

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Shell32.Shell oShell;
                Shell32.Folder oFldr;
                oShell = new Shell32.Shell();
                oFldr = oShell.NameSpace(Shell32.ShellSpecialFolderConstants.ssfDESKTOP);//point to the desktop

                foreach ( Shell32.FolderItem oFItm in oFldr.Items()) //get the shotrcuts
                {

                    if (oFItm.IsLink)
                    {
                        Console.WriteLine("{0} {1} ", oFItm.Name, oFItm.Path);

                        bool isArchive = ((File.GetAttributes(oFItm.Path) & FileAttributes.Archive) == FileAttributes.Archive);
                        //bool isHidden = ((File.GetAttributes(oFItm.Path) & FileAttributes.Hidden) == FileAttributes.Hidden);

                        if (isArchive) //Warning, here you must define the condition for hide the shortcut. in this case only check if has set the Archive atribute. 
                        {

                            //Now you can set  FileAttributes.Hidden atribute
                            //File.SetAttributes(oFItm.Path, File.GetAttributes(oFItm.Path) | FileAttributes.Hidden);
                        }

                    }
                    else
                    {
                        Console.WriteLine("{0} {1} ", oFItm.Name, oFItm.Path);
                    }

                }

                Console.ReadKey();
            }
        }
    }
于 2010-02-19T03:00:35.217 に答える