Моя программа захватывает, когда USB-устройства подключены / отключены и делает то, что должна.
Есть одна неприятная вещь: проводник открывает окно. Угадай, авто-игра является виновником. Полностью отключить автоматическое воспроизведение на этом компьютере невозможно, поэтому его следует отключить только во время работы приложения.
Я нашел множество статей о том, как сделать это, захватив сообщение Windows. Который пускает в следующий код, который компилируется и запускается по прибытии сообщений Windows. Но, к сожалению, QUeryCancelAutoPlay, кажется, никогда не вызывается.
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private UInt32 queryCancelAutoPlay = 0;
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString);
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (queryCancelAutoPlay == 0)
{
queryCancelAutoPlay = RegisterWindowMessage("QueryCancelAutoPlay");
}
if (msg == queryCancelAutoPlay)
{
return (IntPtr)1;
}
return IntPtr.Zero;
}
Есть мысли?
Я разработал это на машине win10.