Как программно отключить устройство в windows

Нашел в интернете класс:

using System;
using System.Text;
using System.Collections.Generic;
using DisableDevice;
using System.Runtime.InteropServices;
using System.ComponentModel;
using Microsoft.Win32.SafeHandles;
using System.Security;
using System.Runtime.ConstrainedExecution;
using System.Management;

namespace DisableDevice
{

    [Flags()]
    internal enum SetupDiGetClassDevsFlags
    {
        Default = 1,
        Present = 2,
        AllClasses = 4,
        Profile = 8,
        DeviceInterface = (int)0x10
    }

    internal enum DiFunction
    {
        SelectDevice = 1,
        InstallDevice = 2,
        AssignResources = 3,
        Properties = 4,
        Remove = 5,
        FirstTimeSetup = 6,
        FoundDevice = 7,
        SelectClassDrivers = 8,
        ValidateClassDrivers = 9,
        InstallClassDrivers = (int)0xa,
        CalcDiskSpace = (int)0xb,
        DestroyPrivateData = (int)0xc,
        ValidateDriver = (int)0xd,
        Detect = (int)0xf,
        InstallWizard = (int)0x10,
        DestroyWizardData = (int)0x11,
        PropertyChange = (int)0x12,
        EnableClass = (int)0x13,
        DetectVerify = (int)0x14,
        InstallDeviceFiles = (int)0x15,
        UnRemove = (int)0x16,
        SelectBestCompatDrv = (int)0x17,
        AllowInstall = (int)0x18,
        RegisterDevice = (int)0x19,
        NewDeviceWizardPreSelect = (int)0x1a,
        NewDeviceWizardSelect = (int)0x1b,
        NewDeviceWizardPreAnalyze = (int)0x1c,
        NewDeviceWizardPostAnalyze = (int)0x1d,
        NewDeviceWizardFinishInstall = (int)0x1e,
        Unused1 = (int)0x1f,
        InstallInterfaces = (int)0x20,
        DetectCancel = (int)0x21,
        RegisterCoInstallers = (int)0x22,
        AddPropertyPageAdvanced = (int)0x23,
        AddPropertyPageBasic = (int)0x24,
        Reserved1 = (int)0x25,
        Troubleshooter = (int)0x26,
        PowerMessageWake = (int)0x27,
        AddRemotePropertyPageAdvanced = (int)0x28,
        UpdateDriverUI = (int)0x29,
        Reserved2 = (int)0x30
    }

    internal enum StateChangeAction
    {
        Enable = 1,
        Disable = 2,
        PropChange = 3,
        Start = 4,
        Stop = 5
    }

    [Flags()]
    internal enum Scopes
    {
        Global = 1,
        ConfigSpecific = 2,
        ConfigGeneral = 4
    }

    internal enum SetupApiError
    {
        NoAssociatedClass = unchecked((int)0xe0000200),
        ClassMismatch = unchecked((int)0xe0000201),
        DuplicateFound = unchecked((int)0xe0000202),
        NoDriverSelected = unchecked((int)0xe0000203),
        KeyDoesNotExist = unchecked((int)0xe0000204),
        InvalidDevinstName = unchecked((int)0xe0000205),
        InvalidClass = unchecked((int)0xe0000206),
        DevinstAlreadyExists = unchecked((int)0xe0000207),
        DevinfoNotRegistered = unchecked((int)0xe0000208),
        InvalidRegProperty = unchecked((int)0xe0000209),
        NoInf = unchecked((int)0xe000020a),
        NoSuchHDevinst = unchecked((int)0xe000020b),
        CantLoadClassIcon = unchecked((int)0xe000020c),
        InvalidClassInstaller = unchecked((int)0xe000020d),
        DiDoDefault = unchecked((int)0xe000020e),
        DiNoFileCopy = unchecked((int)0xe000020f),
        InvalidHwProfile = unchecked((int)0xe0000210),
        NoDeviceSelected = unchecked((int)0xe0000211),
        DevinfolistLocked = unchecked((int)0xe0000212),
        DevinfodataLocked = unchecked((int)0xe0000213),
        DiBadPath = unchecked((int)0xe0000214),
        NoClassInstallParams = unchecked((int)0xe0000215),
        FileQueueLocked = unchecked((int)0xe0000216),
        BadServiceInstallSect = unchecked((int)0xe0000217),
        NoClassDriverList = unchecked((int)0xe0000218),
        NoAssociatedService = unchecked((int)0xe0000219),
        NoDefaultDeviceInterface = unchecked((int)0xe000021a),
        DeviceInterfaceActive = unchecked((int)0xe000021b),
        DeviceInterfaceRemoved = unchecked((int)0xe000021c),
        BadInterfaceInstallSect = unchecked((int)0xe000021d),
        NoSuchInterfaceClass = unchecked((int)0xe000021e),
        InvalidReferenceString = unchecked((int)0xe000021f),
        InvalidMachineName = unchecked((int)0xe0000220),
        RemoteCommFailure = unchecked((int)0xe0000221),
        MachineUnavailable = unchecked((int)0xe0000222),
        NoConfigMgrServices = unchecked((int)0xe0000223),
        InvalidPropPageProvider = unchecked((int)0xe0000224),
        NoSuchDeviceInterface = unchecked((int)0xe0000225),
        DiPostProcessingRequired = unchecked((int)0xe0000226),
        InvalidCOInstaller = unchecked((int)0xe0000227),
        NoCompatDrivers = unchecked((int)0xe0000228),
        NoDeviceIcon = unchecked((int)0xe0000229),
        InvalidInfLogConfig = unchecked((int)0xe000022a),
        DiDontInstall = unchecked((int)0xe000022b),
        InvalidFilterDriver = unchecked((int)0xe000022c),
        NonWindowsNTDriver = unchecked((int)0xe000022d),
        NonWindowsDriver = unchecked((int)0xe000022e),
        NoCatalogForOemInf = unchecked((int)0xe000022f),
        DevInstallQueueNonNative = unchecked((int)0xe0000230),
        NotDisableable = unchecked((int)0xe0000231),
        CantRemoveDevinst = unchecked((int)0xe0000232),
        InvalidTarget = unchecked((int)0xe0000233),
        DriverNonNative = unchecked((int)0xe0000234),
        InWow64 = unchecked((int)0xe0000235),
        SetSystemRestorePoint = unchecked((int)0xe0000236),
        IncorrectlyCopiedInf = unchecked((int)0xe0000237),
        SceDisabled = unchecked((int)0xe0000238),
        UnknownException = unchecked((int)0xe0000239),
        PnpRegistryError = unchecked((int)0xe000023a),
        RemoteRequestUnsupported = unchecked((int)0xe000023b),
        NotAnInstalledOemInf = unchecked((int)0xe000023c),
        InfInUseByDevices = unchecked((int)0xe000023d),
        DiFunctionObsolete = unchecked((int)0xe000023e),
        NoAuthenticodeCatalog = unchecked((int)0xe000023f),
        AuthenticodeDisallowed = unchecked((int)0xe0000240),
        AuthenticodeTrustedPublisher = unchecked((int)0xe0000241),
        AuthenticodeTrustNotEstablished = unchecked((int)0xe0000242),
        AuthenticodePublisherNotTrusted = unchecked((int)0xe0000243),
        SignatureOSAttributeMismatch = unchecked((int)0xe0000244),
        OnlyValidateViaAuthenticode = unchecked((int)0xe0000245)
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct DeviceInfoData
    {
        public int Size;
        public Guid ClassGuid;
        public int DevInst;
        public IntPtr Reserved;
    }

    [StructLayout(LayoutKind.Sequential)]
    internal struct PropertyChangeParameters
    {
        public int Size;
        // part of header. It's flattened out into 1 structure.
        public DiFunction DiFunction;
        public StateChangeAction StateChange;
        public Scopes Scope;
        public int HwProfile;
    }

    internal class NativeMethods
    {

        private const string setupapi = "setupapi.dll";

        private NativeMethods()
        {
        }

        [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetupDiCallClassInstaller(DiFunction installFunction, SafeDeviceInfoSetHandle deviceInfoSet, [In()]
ref DeviceInfoData deviceInfoData);

        [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetupDiEnumDeviceInfo(SafeDeviceInfoSetHandle deviceInfoSet, int memberIndex, ref DeviceInfoData deviceInfoData);

        [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern SafeDeviceInfoSetHandle SetupDiGetClassDevs([In()]
ref Guid classGuid, [MarshalAs(UnmanagedType.LPWStr)]
string enumerator, IntPtr hwndParent, SetupDiGetClassDevsFlags flags);

        /*
        [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetupDiGetDeviceInstanceId(SafeDeviceInfoSetHandle deviceInfoSet, [In()]
ref DeviceInfoData did, [MarshalAs(UnmanagedType.LPTStr)]
StringBuilder deviceInstanceId, int deviceInstanceIdSize, [Out()]
ref int requiredSize);
        */
        [DllImport("setupapi.dll", SetLastError = true, CharSet = CharSet.Auto)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetupDiGetDeviceInstanceId(
           IntPtr DeviceInfoSet,
           ref DeviceInfoData did,
           [MarshalAs(UnmanagedType.LPTStr)] StringBuilder DeviceInstanceId,
           int DeviceInstanceIdSize,
           out int RequiredSize
        );

        [SuppressUnmanagedCodeSecurity()]
        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetupDiDestroyDeviceInfoList(IntPtr deviceInfoSet);

        [DllImport(setupapi, CallingConvention = CallingConvention.Winapi, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetupDiSetClassInstallParams(SafeDeviceInfoSetHandle deviceInfoSet, [In()]
ref DeviceInfoData deviceInfoData, [In()]
ref PropertyChangeParameters classInstallParams, int classInstallParamsSize);

    }

    internal class SafeDeviceInfoSetHandle : SafeHandleZeroOrMinusOneIsInvalid
    {

        public SafeDeviceInfoSetHandle()
            : base(true)
        {
        }

        protected override bool ReleaseHandle()
        {
            return NativeMethods.SetupDiDestroyDeviceInfoList(this.handle);
        }

    }

    public sealed class DeviceHelper
    {

        private DeviceHelper()
        {
        }

        /// <summary>
        /// Enable or disable a device.
        /// </summary>
        /// <param name="classGuid">The class guid of the device. Available in the device manager.</param>
        /// <param name="instanceId">The device instance id of the device. Available in the device manager.</param>
        /// <param name="enable">True to enable, False to disable.</param>
        /// <remarks>Will throw an exception if the device is not Disableable.</remarks>
        public static void SetDeviceEnabled(Guid classGuid, string instanceId, bool enable)
        {
            SafeDeviceInfoSetHandle diSetHandle = null;
            try
            {
                // Get the handle to a device information set for all devices matching classGuid that are present on the 
                // system.
                diSetHandle = NativeMethods.SetupDiGetClassDevs(ref classGuid, null, IntPtr.Zero, SetupDiGetClassDevsFlags.Present);
                // Get the device information data for each matching device.
                DeviceInfoData[] diData = GetDeviceInfoData(diSetHandle);
                // Find the index of our instance. i.e. the touchpad mouse - I have 3 mice attached...
                int index = GetIndexOfInstance(diSetHandle, diData, instanceId);
                // Disable...
                EnableDevice(diSetHandle, diData[index], enable);
            }
            finally
            {
                if (diSetHandle != null)
                {
                    if (diSetHandle.IsClosed == false)
                    {
                        diSetHandle.Close();
                    }
                    diSetHandle.Dispose();
                }
            }
        }

        private static DeviceInfoData[] GetDeviceInfoData(SafeDeviceInfoSetHandle handle)
        {
            List<DeviceInfoData> data = new List<DeviceInfoData>();
            DeviceInfoData did = new DeviceInfoData();
            int didSize = Marshal.SizeOf(did);
            did.Size = didSize;
            int index = 0;
            while (NativeMethods.SetupDiEnumDeviceInfo(handle, index, ref did))
            {
                data.Add(did);
                index += 1;
                did = new DeviceInfoData();
                did.Size = didSize;
            }
            return data.ToArray();
        }

        // Find the index of the particular DeviceInfoData for the instanceId.
        private static int GetIndexOfInstance(SafeDeviceInfoSetHandle handle, DeviceInfoData[] diData, string instanceId)
        {
            const int ERROR_INSUFFICIENT_BUFFER = 122;
            for (int index = 0; index <= diData.Length - 1; index++)
            {
                StringBuilder sb = new StringBuilder(1);
                int requiredSize = 0;
                bool result = NativeMethods.SetupDiGetDeviceInstanceId(handle.DangerousGetHandle(), ref diData[index], sb, sb.Capacity, out requiredSize);
                if (result == false && Marshal.GetLastWin32Error() == ERROR_INSUFFICIENT_BUFFER)
                {
                    sb.Capacity = requiredSize;
                    result = NativeMethods.SetupDiGetDeviceInstanceId(handle.DangerousGetHandle(), ref diData[index], sb, sb.Capacity, out requiredSize);
                }
                if (result == false)
                    throw new Win32Exception();
                if (instanceId.Equals(sb.ToString()))
                {
                    return index;
                }
            }
            // not found
            return -1;
        }

        // enable/disable...
        private static void EnableDevice(SafeDeviceInfoSetHandle handle, DeviceInfoData diData, bool enable)
        {
            PropertyChangeParameters @params = new PropertyChangeParameters();
            // The size is just the size of the header, but we've flattened the structure.
            // The header comprises the first two fields, both integer.
            @params.Size = 8;
            @params.DiFunction = DiFunction.PropertyChange;
            @params.Scope = Scopes.Global;
            if (enable)
            {
                @params.StateChange = StateChangeAction.Enable;
            }
            else
            {
                @params.StateChange = StateChangeAction.Disable;
            }

            bool result = NativeMethods.SetupDiSetClassInstallParams(handle, ref diData, ref @params, Marshal.SizeOf(@params));
            if (result == false) throw new Win32Exception();
            result = NativeMethods.SetupDiCallClassInstaller(DiFunction.PropertyChange, handle, ref diData);
            if (result == false)
            {
                int err = Marshal.GetLastWin32Error();
                if (err == (int)SetupApiError.NotDisableable)
                    throw new ArgumentException("Device can't be disabled (programmatically or in Device Manager).");
                else if (err >= (int)SetupApiError.NoAssociatedClass && err <= (int)SetupApiError.OnlyValidateViaAuthenticode)
                    throw new Win32Exception("SetupAPI error: " + ((SetupApiError)err).ToString());
                else
                    throw new Win32Exception();
            }
        }
    }
}

Если ты на руках имеешь GUID и instancePath (то есть путь в менеджере устройств) то девайс можно отключить следующим образом:

Guid deviceGuid = new Guid("{4D36E96F-E325-11CE-BFC1-08002BE10318}");//думаю это можно захардкодить
string instancePath = @"HID\VID_062A&PID_4101&MI_01&COL01\8&14EA75C&0&0000";//это захардкодить вряд ли выйдет, нужно будет поискать в девайс менеджере через шарп нужный путь

DeviceHelper.SetDeviceEnabled(deviceGuid, instancePath, false); //фалс отключает девайс / тру - включает

конкретно этим кодом и конкретно этими значениями я себе отключил мышку для теста :)

Но этим способом так же под вопросом выйдет ли отключить конкретный девайс. Не все девайсы это поддерживают.

Оригинал кода нашел вот здесь: https://stackoverflow.com/questions/1438371/win32-api-function-to-programmatically-enable-disable-device

Так же, судя по тексту, нужно твою прогу компилить именно в х64 (в той платформе — в которой у тебя операционка).

С поиском GUID девайса все довольно просто: девайс менеджер -> ищешь нужный девайс -> пропертиз -> Ивентс -> в блоке инфрпмации будет «Class Guid».

с поиском программного пути конкретного девайса разберешся сам.
Вопрос стоял об отключении девайса :)


А можно ли отключать питание

Внезапно (для меня лично), но это возможно.

https://stackoverflow.com/questions/14690157/turn-off-power-to-usb-port-programmatically

Как видно по второму ответу прога DevManView.exe умеет отключать в рантайме. Значит это ВОЗМОЖНО (лично я думал что это блокировано на хардварном уровне) . Но как сделать это напрямую из шарпа я не подскажу. :) Только если использовать консольные возможности этой проги — снова таки, по линке описано как.

блокировать конкретный USB порт без перезагрузок?

Не понимаю что такое «блокировать». Если ты про просто дисейбл устройства как через девайс менеджер — то реализация выше. Без перезагрузок.

Если ты про «блокировать ручное включение девайса» — ты можешь просто устроить слежку за тем, не включили ли этот девайс без твоего разрешения в отдельном потоке и автоматом отключать. Криво, но будет работать как тебе нужно.

Или же отключать не отключаемые устройства?

Наверное они на то и отключаемые, что бы их не отключали. Вряд ли.

Только если питание рубонуть.

UPD: как обозначил MSDN.WhiteKnight в коментариях, то вполне возможно что неотключаемые устройства являются «составными». То есть если ты отключишь несколько дочерних, то и это неотключаемое будет отключено.

Most people who’ll be reading this thread won’t find the other answer very useful, because it’s mostly about how to run the script in the question with administrator privileges. I’ll attempt to answer the implicit questions here:

Enable/disable a device via the command line

I found it easiest to use devcon.exe (6mb), like in the question:

set HARDWARE_ID="PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"
devcon disable %HARDWARE_ID%
timeout /t 3
devcon enable %HARDWARE_ID%

devcon.exe requires administrator privileges.

Where to get devcon?

It’s part of the Windows driver development toolkit. Unfortunately, the official resources ask you to download a 1gb SDK. I was able to get around that by following one of the answers here: https://superuser.com/questions/1002950/quick-method-to-install-devcon-exe

Once you have it, make sure devcon.exe is on your %PATH%. I put mine in C:\Windows\System32\.

Find the hardware ID of the device you want to manipulate

Open a Command Prompt with administrator privileges and do devcon hwids *, which will print all the devices and their corresponding IDs. That will produce a lot of output. Use Command Prompts search function to find what you need. Here’s the section I was interested in:

PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61\4&6AB551C&0&00E1
    Name: Intel(R) Wireless WiFi Link 4965AGN
    Hardware IDs:
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086
        PCI\VEN_8086&DEV_4229&CC_028000
        PCI\VEN_8086&DEV_4229&CC_0280
    Compatible IDs:
        PCI\VEN_8086&DEV_4229&REV_61
        PCI\VEN_8086&DEV_4229
        PCI\VEN_8086&CC_028000
        PCI\VEN_8086&CC_0280
        PCI\VEN_8086
        PCI\CC_028000
        PCI\CC_0280

Pick a specific enough ID and check if it works by doing:

devcon find "PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"

If that finds only 1 device, and it’s the one you want, you’re good. Notice that often you’ll want to escape the hardware ID with quotes.

Bonus: running a .bat script at startup or power on

In my case, I also needed to run this script when computer has booted after shutdown or sleep. I gave the above script sensible permissions and used Task Scheduler to run it on login and on startup, in its terminology:
https://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html?ltr=T

Ответы с готовыми решениями:

Как отключить HDMI порт через реестр?
Здравствуйте! Как отключить HDMI порт через реестр? Или через командную строку, или диспетчер…

USB порт
такая проблема. Переустановил винду 1USB порт(предположительно 2.0), остальные нет, но питание в…

Отключить/включить usb порты
Здравствуйте, за ранее прошу прощения если задаю вопрос не в том разделе. Ситуация такая: в учебном…

Неработают порты USB 2.0 а порт 3.0 работает в Windows 7
Вот проблемка встала перед установкой винда не хотела читаться с порта 2.0, считалась с…

3

Category:

  • IT
  • Cancel

Эта запись — копия записи из моего блога.

Борьба с модемом, купленным в «Билайн», продолжается (комплект БИД). В связи с беспрерывными потерями коннекта я был вынужден создать в Планировщике заданий элемент, который с заданной периодичностью выполняет созданный bat-файл, закрывая БИД, отключаясь от Интернета и снова устанавливая соединение:

cls

cd /d c:/temp

rasphone -h "Beeline Modem"

taskkill /f /im "Beeline Home Internet.exe"

start "BHI" "Beeline Home Internet.lnk"

taskkill /f /im "Beeline Home Internet.exe"

rasdial "Beeline Modem"

Однако такой способ не всегда помогает. После выполнения нескольких заданий с запуском bat-файла попытка подключения заканчивается ошибкой 692. Для решения этой проблемы необходимо отключить и снова подключить модем в USB-порт. Сделать это ночью во время сна — невозможно.

microsoft

Для решения этой задачи на сайте Microsoft я скачал утилиту DevCon (77,2 КБ). Для своей 32-битной Windows я взял файл devcon.exe из папки i386, которая была в загруженном архиве и поместил его в папку C:\Windows\system32\.

В bat-файл (у меня он находится в папке C:\Temp\, в которой имеется ярлык на БИД), который помогает в случаях с отваливанием DNS, но сохраняющимся подключением, я добавил две строчки (4-я и 5-я строчки соответственно):

  1. devcon disable "USB\VID_19D2&PID_0031&REV_0000&MI_03" — отключает устройство с указанными ID.
  2. devcon enable "USB\VID_19D2&PID_0031&REV_0000&MI_03" — подключает его.

ID модема можно посмотреть в Диспетчере устройств на вкладке Сведения, выбрав в выпадающем списке ИД оборудования. Теперь файл выглядит так:

cls

cd /d c:/temp

rasphone -h "Beeline Modem"

devcon disable "USB\VID_19D2&PID_0031&REV_0000&MI_03"

devcon enable "USB\VID_19D2&PID_0031&REV_0000&MI_03"

taskkill /f /im "Beeline Home Internet.exe"

start "BHI" "Beeline Home Internet.lnk"

taskkill /f /im "Beeline Home Internet.exe"

rasdial "Beeline Modem"

pause

.

У меня на компьютере возникала такая проблема, что после пробуждения из спящего режима переставала работать DVB карта для просмотра спутникового ТВ, в диспетчере устройств в свойствах карты писалось что «Запуск этого устройства невозможен». И тогда мне что бы включить телевидение приходилось заходить в диспетчер устройств, отключать карту, потом заново включать и уже потом я мог включить программу для просмотра ТВ. Тогда я решил немного автоматизировать процесс: при клике на ярлык программы просмотра, должен был запускаться батник (bat-файл),  который сначала бы отключал карту, заново включал её, и уже потом запускал программу.

Для этого нам понадобится маленькая утилита от компании Microsoft — Devcon. Качаем её тут (77,2кб). Запускаем программу, указываем путь распаковки C:\Temp и жмём кнопку Unzip.

После распаковки нажимаем «Ок», закрываем программу и из папки C:\Temp\i386 копируем файл devcon.exe в папку C:\Windows\system32\. Если у вас Windows 64-х битный, то Вам нужно взять файл из папки C:\Temp\ia64.

Все, утилиту подготовили, теперь можно приступать к написанию bat файла. Создадим текстовый файл и переименуем  его  в Run_DVB_Dream.bat (в конце обязательно должно быть расширение bat, не txt!). Вы можете назвать его по другому, как угодно. Далее правой копной по этому файлу, выбрать «Изменить». Впишем следующие строки:

devcon disable «PCI\VEN_1969&amp;DEV_1083&amp;SUBSYS_E0001458&amp;REV_C0»

devcon enable «PCI\VEN_1969&amp;DEV_1083&amp;SUBSYS_E0001458&amp;REV_C0»

start dvbdream.exe

Где:

  1. devcon disable «PCI\VEN_1969&DEV_1083&SUBSYS_E0001458&REV_C0»  — Отключение устройства с заданным ID.
  2. devcon enable «PCI\VEN_1969&DEV_1083&SUBSYS_E0001458&REV_C0» — Включение устройства с заданным ID.
  3. start dvbdream.exe — Запуск программы просмотра ТВ (Вы прописываете путь к нужной Вам программе или не пишите эту строку совсем).

Что бы узнать ID заходим в Диспетчер устройств, открываете свойства нужного Вам устройства, переходите во вкладку Сведения, в выпадающем списке выбираете ИД оборудования и копируете первую строку. Если bat файл лежит не в папке с программой, тогда путь пишется в таком формате C:\dvbdream\dvbdream.exe.

Теперь мы можем создать ярлык батника на рабочем столе, сменить его имя к примеру на «Спутниковое ТВ», и сменить иконку на более красивую (Для смены значка правый клик по ярлыку->Свойства и нажать кнопку «Сменить значок»). При запуске ярлыка у нас сначала перезапуститься устройство, а потом уже включится программа:)

Rating: 9.3/10 (41 votes cast)

Поделиться ссылкой с друзьями:

  • Как продлить офис 365 на windows 10 бесплатно
  • Как продлить лицензию windows 10 pro бесплатно
  • Как провести диагностику видеокарты на windows 10
  • Как продлить обновления windows 7
  • Как провести дефрагментацию диска на windows 10