Остановить SetVolumeMountPoint от открытия проводника - PullRequest
0 голосов
/ 04 января 2019

Я использую SetVolumeMountPoint для монтирования VHD на выбранную букву диска.Проблема в том, что при монтировании виртуального жесткого диска автоматически открывается файловый менеджер в новом каталоге диска.Это проблема для меня, так как мне нужно, чтобы мои программы оставались на переднем плане, а иногда вызываемый файловый менеджер становится частью переднего плана.

https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-setvolumemountpointa

Мысли?

ОБНОВЛЕНИЕ:

Я программно устанавливаю раздел реестра noautorun, используя эти два метода перед монтированием моего vhd:

        /// <summary>
        /// Removing file explorer auto run for the given DriveLetter so that when a vhd is mounted file explorer doesn't open
        /// </summary>
        /// <param name="DriveLetter"></param>
        private void RemoveFileExplorerAutoRun(char DriveLetter)
        {
            var KeyPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
            RegistryKey AutoRunKey = Registry.CurrentUser.OpenSubKey(KeyPath, true);
            var DriveLetterValue = DriveLetter - 'A';

            if (AutoRunKey != null)
            {
                RemoveFileExplorerAutoRun(AutoRunKey, DriveLetterValue);
            }
            else // create key as it does not exist
            {
                AutoRunKey = Registry.CurrentUser.CreateSubKey(KeyPath);
                RemoveFileExplorerAutoRun(AutoRunKey, DriveLetterValue);
            }
        }

        private void RemoveFileExplorerAutoRun(RegistryKey AutoRunKey, int DriveLetterValue)
        {
            if (AutoRunKey != null)
            {
                AutoRunKey.SetValue("NoDriveTypeAutoRun", DriveLetterValue);
                AutoRunKey.Close();
            }
        }

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Другим способом является использование реестра.

Пожалуйста, укажите " Использование реестра для отключения автозапуска " " Как отключить функцию автозапуска в Windows "

Примечание

Значения NoDriveAutoRun и NoDriveTypeAutoRun должны изменяться только системными администраторами для изменения значения всей системы в целях тестирования или администрирования.Приложения не должны изменять эти значения, так как нет способа надежно восстановить их исходные значения.

Третий способ основан на том, что @ Гутенев указал, что регистрирует сообщение окна «QueryCancelAutoPlay»а затем установите глобальную ловушку из своего приложения для мониторинга этого сообщения.

Примечание

Вы должны использовать глобальные ловушки только для отладкицели;в противном случае вы должны избегать их.Глобальные хуки ухудшают производительность системы и вызывают конфликты с другими приложениями, которые реализуют тот же тип глобальных хуков.

Хуки, как правило, замедляют работу системы, поскольку увеличивают объем обработки, которую система должна выполнять для каждого сообщения.Вы должны устанавливать крюк только тогда, когда это необходимо, и снимать его как можно скорее.

0 голосов
/ 04 января 2019

Самый простой способ - перехватить сообщение RegisterWindowMessage("QueryCancelAutoPlay") окном переднего плана и вернуть значение TRUE из оконной процедуры.

https://docs.microsoft.com/en-us/windows/desktop/shell/autoplay-reg

РЕДАКТИРОВАТЬ: если окно переднего плана не является вашим приложениемокно, тогда я бы рекомендовал не редактировать реестр, так как это глобальное состояние, в то время как вам нужен только временный обход автозапуска.

Помимо хука окон, упомянутого в другом ответе, я бы предложил зарегистрировать вашу реализацию IQueryCancelAutoPlay интерфейс в таблице запущенных объектов

...