Вызовите развертку от Делфи, InstallShield обнаружения оборудования, C++, сценарий или побегите подсказка
В моем процессе раскрытия, он посмотрел как я шел обнаружить некоторые изменения в оборудовании и после этого выполнить reboot.
Я исследовал как сделать это но он поворачивает ou что мне не нужен этот Код. В подземелье он идет.
Вы можете конечно побежать «добавляете чудодей новое оборудование» вручную. Здесь линия передачи команд для того чтобы сделать как раз то:
«C:\WINDOWS\system32\rundll32.exe» C:\WINDOWS\system32\shell32.dll, Control_RunDLL «C:\WINDOWS\system32\hdwwiz.cpl», обнаруживает оборудование
Однако, что если вы хотите автоматизировать процесс.
Информация для как сделать это относительно вряд даже если страница technet о ей. Странно достаточно первая вещь я нашел был сценарием NSIS для делать это через ту программу instalation открытого источника. Странная вещь о ей что она находилась на вебсайте WinAMP (соединении).
Здесь тот Код:
-
Функция ScanForNewHW
-
Alwaysoff SetPluginUnload
-
StrCpy $1 «»
-
-
Система:: Setupapi звонока ':: ′ CM_Locate_DevNodeA (*i .r0, t r1, I r2) I .r3
-
Система:: Setupapi звонока ':: ′ CM_Reenumerate_DevNode (r0 I, I r4) I .r5
-
-
Руководство SetPluginUnload
-
Система:: Освободите 0
-
FunctionEnd
Подготовлено с именем DLL, вторая вещь я нашел был сценарием экрана устанавливать (соединением) который позволил ей быть сделанным:
-
функция ScanForHardwareChanges ()
-
devInst НОМЕРА, myreturn;
-
начните
-
если (UseDLL, то (^ «cfgmgr32.dll WINSYSDIR ")! = 0) после этого
-
MessageBox («не нагрузил Dll», СТРОГИЙ);
-
возвращенное ЛОЖНОЕ;
-
endif;
-
myreturn = CM_Locate_DevNodeA (&devInst, «\ 0 «, 0);
-
myreturn = CM_Reenumerate_DevNode (devInst, 0);
-
UnUseDLL (^ «cfgmgr32.dll WINSYSDIR ");
-
возвращенно TRUE;
-
конец;
Подготовлено с именем DLL и возможным именем процедуры, я мог отслеживать вниз страницу поддержки Майкрософт о ей (соединение). Та страница обеспечила режим A.C. для вызывать Код. Здесь она является следующим:
-
BOOL ScanForHardwareChanges ()
-
{
-
DEVINST devInst;
-
CONFIGRET состояние;
-
-
//
-
// получает devnode корня.
-
//
-
-
состояние = CM_Locate_DevNode (&devInst, NULL, CM_LOCATE_DEVNODE_NORMAL);
-
-
если (состояние! = CR_SUCCESS) {
-
возвращенное ЛОЖНОЕ;
-
-
}
-
-
состояние = CM_Reenumerate_DevNode (devInst, 0);
-
-
если (состояние! = CR_SUCCESS) {
-
возвращенное ЛОЖНОЕ;
-
}
-
-
возвращенно TRUE;
-
}
Однако, я хотел сделать это в Делфи. С правильно постоянн именами, я мог найти 2 справки к этому режиму. Проект Делфи JEDI имеет a обеспечивает режим для нагружать DLL который позволяет эти быть позвоненным и или кто-то (соединение) Код переведенного Майкрософта в режим для просматривать для оборудования или было теперь пойденное a, проект демонстрации JEDI который включил этот режим. Любой путь, французское место был первое одним я счесл то просмотрено для нового оборудования с Делфи.
Здесь тот Код:
-
процедура SomeProcedure;
-
// сперва вы потребность нагрузить модуль.
-
LoadConfigManagerApi;
-
// после этого вызывает перевод режима MS
-
ScanForHardwareChanges;
-
конец;
-
-
// здесь перевод ScanForHardwareChanges
-
функция ScanForHardwareChanges: булевско;
-
var
-
dev: DEVINST;
-
состояние: CONFIGRET;
-
начните
-
-
состояние: = CM_Locate_DevNode (dev,», CM_LOCATE_DEVNODE_NORMAL);
-
-
если (<> CR_SUCCESS состояния) после этого
-
начните
-
результат: = ЛОЖНО;
-
выход;
-
конец;
-
-
состояние: = CM_Reenumerate_DevNode (dev, 0);
-
-
если (<> CR_SUCCESS состояния) после этого
-
начните
-
результат: = ЛОЖНО;
-
выход;
-
конец;
-
Результат: = TRUE;
-
конец;
Что режим был выбран вверх на русском месте (соединении) и был доработан для того чтобы быть независимым архивов JEDI. Однако, оба из этих режимов включают путь больше информации чем необходим.
Процесс действительно просто.
1. Нагрузите DLL
2. Получите расположение 2 методов вам.
3. Вызовите их (используя соотвествующие константы
4. Расгрузите все.
Я писал мой собственный режим Делфи который делает вс то и не имеет никакой экстренный волочат багаж, котор (снадобье?) вдоль для езды.
Мое неразъемное разрешение:
-
{******************************************************************************
-
ScanForHardwareChanges
-
Брайан Неспециалистом на TheCodeCave.com
-
******************************************************************************}
-
функция ScanForHardwareChanges: Булевско;
-
const
-
CFGMGR32_DLL = `cfgmgr32.dll';
-
CM_LOCATE_DEVNODE_NAME = CM_Locate_DevNodeA'; `
-
CM_REENUMERATE_DEVNODE_NAME = CM_Reenumerate_DevNode'; `
-
CM_LOCATE_DEVNODE_NORMAL = $00000000;
-
CR_SUCCESS = $00000000;
-
var
-
DeviceNode: DWord;
-
HCfgMgr: Т-образная рукоятка;
-
CM_Locate_DevNode: функция (dnDevInst var: DWord; pDeviceID: PAnsiChar;
-
ulFlags: ULONG): DWord; stdcall;
-
CM_Reenumerate_DevNode: функция (dnDevInst: DWord; ulFlags: ULong): DWord; stdcall;
-
начните // ScanForHardwareChanges
-
Результат: = ЛОЖНО;
-
HCfgMgr: = LoadLibrary (CFGMGR32_DLL);
-
если (HCfgMgr <32), то
-
после этого MessageDlg (ошибка `: не смогл найти mtError менеджера DLL', конфигурации, [mbOk], 0)
-
еще начните
-
попытка
-
CM_Locate_DevNode: = GetProcAddress (HCfgMgr, CM_LOCATE_DEVNODE_NAME);
-
CM_Reenumerate_DevNode: = GetProcAddress (HCfgMgr, CM_REENUMERATE_DEVNODE_NAME);
-
если (CM_Locate_DevNode (DeviceNode, НОЛЬ, CM_LOCATE_DEVNODE_NORMAL) = CR_SUCCESS), то
-
после этого результат: = (CM_Reenumerate_DevNode (DeviceNode, 0) = CR_SUCCESS);
-
окончательно // оборачивает вверх
-
FreeLibrary (HCfgMgr);
-
конец; попытка ///окончательно
-
конец;
-
конец; // ScanForHardwareChanges
Как тантьема, здесь совмещено в проект которому развертки для нового оборудования и после этого reboots компьютер.
(больше…)
















