1

I'm programming a C# program which listens for Space pressed in the File Explorer. When space is pressed I create a WPF window which shows the selected File in a WPF Window.

The only problem is, that this file Preview is also called when someone is editing the filename and presses space for a whitespace in the filename.

Is there a way to detect if a user is renaming a file at the moment?


Additional Information:

I know that i could listen for F2, but there's also the way to start renaming a file by clicking two times with the left mouse button or by right clicking the file and selecting rename. So this would be no good solution.

Technical Information (if needed):

I use GetForegroundWindow to check if the Window in the foreground is a explorer window. Then i use Hooks to listen for the pressed Keys in the explorer process in foreground.

To get the selected Item i use SHDocVw and Shell32

                    Shell32.FolderItems selectedItems = ((Shell32.IShellFolderViewDual2) window.Document).SelectedItems();
4

2 に答える 2

0

ファイルの名前変更を検出するには、FileSystemWatcher.Changed イベントを確認します。MSDN から取得したサンプル コードを次に示します。MSDN FileSystemWatcher の例

コードを少し変更しました。コードを確認しました。ファイルの名前が変更されたときに通知します。

using System;
using System.IO;
using System.Security.Permissions;

namespace FileWatcher
{
    class Program
    {
        static void Main(string[] args)
        {
            Run();
        }

        [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
        public static void Run()
        {
            // Create a new FileSystemWatcher and set its properties.
            FileSystemWatcher watcher = new FileSystemWatcher();

            watcher.Path = @"c:\temp"; //Specify the directory name where file resides

            /* Watch for changes in LastAccess and LastWrite times, and
               the renaming of files or directories. */

            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;

            // Only watch text files.
            watcher.Filter = "*.txt";

            // Add event handlers.
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);

            // Begin watching.
            watcher.EnableRaisingEvents = true;

            // Wait for the user to quit the program.
            Console.WriteLine("Press \'q\' to quit the sample.");
            while (Console.Read() != 'q') ;
        }

        // Define the event handlers. 
        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            // Specify what is done when a file is changed, created, or deleted.
            Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
        }

        private static void OnRenamed(object source, RenamedEventArgs e)
        {
            // Specify what is done when a file is renamed.
            Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
        }
    }
}
于 2015-02-03T08:34:09.380 に答える
0

ファイル ナビゲーションの強化によって、現在 Windows エクスプローラーに存在する動作が妨げられる危険はありません。

したがって:

Ctrl+Space

Ctrl+などの新しいコマンドを使用してもSpace、ファイルの名前変更操作中にトリガーされることはありません。さらに、アプリケーションは、Windows OS ユーザー コマンドに組み込まれた標準を使用して動作します (少しスパイスを加えます)

  • Ctrl+Spaceは私たち開発者向けの IntelliSense コマンドであるため、人々が「詳細情報」/「助けて」に使用する自然なコマンドです。

非常に特別なファイル プレビューがあることを願っています。過去 20 年間、それが楽しみではなく PITA であった多くのケースがありました:(
http://support.microsoft.com/kb/983097
http://support.microsoft.com/kb/2257542

于 2015-02-03T10:03:44.757 に答える