c # — остановить SetVolumeMountPoint от открытия проводника

Я использую SetVolumeMountPoint для монтирования VHD к букве диска по моему выбору. Проблема в том, что при монтировании 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();
}
}

1

Решение

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

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

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

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

4

Другие решения

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

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

Заметка

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

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

Заметка

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

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

0

По вопросам рекламы [email protected]