Перенаправить внешний OpenFileDialog / SaveFileDialog в новый каталог? - PullRequest
0 голосов
/ 17 июня 2019

Я пишу некоторое программное обеспечение на C #, которое будет определять, когда открыто внешнее (не является частью моего приложения) окно OpenFileDialog / SaveFileDialog (в любом приложении), и мне нужно как получить текущий каталог OpenFileDialog / SaveFileDialog, так и повторно-направить его в другое место для определенного события.

Например, пользователь открывает Microsoft Word, выбирает Файл -> Открыть, и OpenFileDialog открывает каталог C: \ Users \ Имя пользователя \ Documents.Мне нужен способ получения строкового значения "C: \ Users \ Username \ Documents \", а также способ перенаправления этого OpenFileDialog в новый каталог.Например: C: \ Users.

Я понимаю, что могу использовать следующий код для получения (и перенаправления каталога) открытых окон Windows Explorer:

var ShellWindows = new SHDocVw.ShellWindows();

foreach (SHDocVw.InternetExplorer ShellWindow in ShellWindows)
{
    string ShellWindowFullNameUpperCase = ShellWindow.FullName.ToUpper();

    if (ShellWindowFullNameUpperCase.Equals("C:\\WINDOWS\\EXPLORER.EXE"))
    {
        ShellWindow.Navigate(SelectedFilePath);
        break;
    } // end if.
} // end for/each.

Я прочиталв других сообщениях о переполнении стека, что OpenFileDialog / SaveFileDialog не может быть доступен таким же образом.

Я написал два метода, чтобы определить, является ли сфокусированное окно OpenFileDialog или SaveFileDialog:

if (IsOpenFileDialog(ForegroundWindow))
{
    Debug.WriteLine("OpenFileDialog Detected");
}
else if (IsSaveFileDialog(ForegroundWindow))
{
    Debug.WriteLine("SaveFileDialog Detected");
} // end if.

У меня есть дескриптор для этих окон, хотя я не могу понять, как получить текущий каталог / установить для каталога новое значение (как объяснено выше).

Любая помощь, которую кто-либо может оказать, будет оченьприветствуется.

Заранее спасибо.

...