USB - Reboot \ Off

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kandi, 7 Jul 2012.

  1. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Всем привет, меня интересует как можно программно, перезагрузить(отключить\включить) USB Port на котором весит девайс. При этом не трогая девайс руками!

    Вот есть программа - http://support.microsoft.com/kb/311272/ru
    => это возможно... но как?
     
  2. SWAPPER

    SWAPPER Elder - Старейшина

    Joined:
    14 Dec 2006
    Messages:
    256
    Likes Received:
    42
    Reputations:
    24
    Не уверен на 100%, что мой способ будет действенным, но попробуй.
    В диспетчере устройств отключить выбранное юсб устройство.потом при необходимости его включить. По идее, должно работать (я так блютус отключаю периодически на ноуте).
    Также, можно попробывать автоматизировать действия с помощью, например, autoit.
     
  3. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Наркоманский способ автоматизации. Уверен, все это можно сделать с помощью WMI.
     
  4. SWAPPER

    SWAPPER Elder - Старейшина

    Joined:
    14 Dec 2006
    Messages:
    256
    Likes Received:
    42
    Reputations:
    24
    Каждому свое.
    Согласен, что аутоитом такое делать некошерно, но если человеку надо рабочий вариант, он абсолютно не шарит в программинге и ему пох. на то, что это непрофесионально, то аутоит вполне сойдет :)
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    вообще всё проще некуда. есть DLL и в ней ей функций отключения устройства.
    В Win XP когда отключаеш флешку, то можно отследить запуск процесса rundll32 с указанием этой DLL, апишки и параметров. т.е. тупо программно отключить дивайс, а потом подключить. в XP это была hotplug.dll
     
    #5 slesh, 8 Jul 2012
    Last edited: 8 Jul 2012
    1 person likes this.
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Хотя смотря что за устройсво надо отключить подключить. Если это накопитель, то всё еще более проще
     
  7. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    1. Способ к сожалению с отключение в диспетчере устройств - в этой ситуации не пашет. Устройство продолжает работу.

    2. Нужно отключать/включать 3G USB Modem модели Huawei.

    3. WMI порыл немного нашёл только перезагрузку ADSL модема. Не могу понять подойдёт ли она мне.
    Code:
    void RestartADSL(GUID *guid)
        {
            SP_PROPCHANGE_PARAMS pcp;
            pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);  
            pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
            pcp.Scope = DICS_FLAG_CONFIGSPECIFIC;
            pcp.StateChange = DICS_PROPCHANGE;
            pcp.HwProfile = 0;
            
            HDEVINFO hDevInfo = SetupDiGetClassDevs(guid, 0, 0, 0);
            SP_DEVINFO_DATA DevInfoData;
          DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
         
            SetupDiEnumDeviceInfo(hDevInfo, 0, &DevInfoData);  
            SetupDiSetClassInstallParams(hDevInfo, &DevInfoData, &pcp.ClassInstallHeader, sizeof(pcp));
            SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DevInfoData);
            return;
        }
    
    P.S. Можно ли считать модем накопителем?) Что за способ проще?