Подземелье Кода

4-ое января 2007

Вызовите развертку от Делфи, InstallShield обнаружения оборудования, C++, сценарий или побегите подсказка

Сохранено вниз: Серия, Делфи, RegEdit, WINDOWS, XP, установка - 2:04 pm Брайан @

В моем процессе раскрытия, он посмотрел как я шел обнаружить некоторые изменения в оборудовании и после этого выполнить reboot.
Я исследовал как сделать это но он поворачивает ou что мне не нужен этот Код. В подземелье он идет.

Вы можете конечно побежать «добавляете чудодей новое оборудование» вручную. Здесь линия передачи команд для того чтобы сделать как раз то:
«C:\WINDOWS\system32\rundll32.exe» C:\WINDOWS\system32\shell32.dll, Control_RunDLL «C:\WINDOWS\system32\hdwwiz.cpl», обнаруживает оборудование

Однако, что если вы хотите автоматизировать процесс.

Информация для как сделать это относительно вряд даже если страница technet о ей. Странно достаточно первая вещь я нашел был сценарием NSIS для делать это через ту программу instalation открытого источника. Странная вещь о ей что она находилась на вебсайте WinAMP (соединении).

Здесь тот Код:

КОД:
  1. Функция ScanForNewHW
  2. Alwaysoff SetPluginUnload
  3. StrCpy $1 «»
  4.  
  5. Система:: Setupapi звонока ':: ′ CM_Locate_DevNodeA (*i .r0, t r1, I r2) I .r3
  6. Система:: Setupapi звонока ':: ′ CM_Reenumerate_DevNode (r0 I, I r4) I .r5
  7.  
  8. Руководство SetPluginUnload
  9. Система:: Освободите 0
  10. FunctionEnd

Подготовлено с именем DLL, вторая вещь я нашел был сценарием экрана устанавливать (соединением) который позволил ей быть сделанным:

КОД:
  1. функция ScanForHardwareChanges ()
  2.   devInst НОМЕРА, myreturn;
  3. начните
  4.   если (UseDLL, то (^ «cfgmgr32.dll WINSYSDIR ")! = 0) после этого
  5.     MessageBox («не нагрузил Dll», СТРОГИЙ);
  6.     возвращенное ЛОЖНОЕ;
  7.   endif;
  8.   myreturn = CM_Locate_DevNodeA (&devInst, «\ 0 «, 0);
  9.   myreturn = CM_Reenumerate_DevNode (devInst, 0);
  10.   UnUseDLL (^ «cfgmgr32.dll WINSYSDIR ");
  11.   возвращенно TRUE;
  12. конец;

Подготовлено с именем DLL и возможным именем процедуры, я мог отслеживать вниз страницу поддержки Майкрософт о ей (соединение). Та страница обеспечила режим A.C. для вызывать Код. Здесь она является следующим:

C:
  1. BOOL ScanForHardwareChanges ()
  2. {
  3.     DEVINST     devInst;
  4.     CONFIGRET   состояние;
  5.    
  6.     //
  7.     // получает devnode корня.
  8.     //
  9.    
  10.     состояние = CM_Locate_DevNode (&devInst, NULL, CM_LOCATE_DEVNODE_NORMAL);
  11.    
  12.     если (состояние! = CR_SUCCESS) {
  13.         printf («CM_Locate_DevNode потерпело неудачу: %x \ n «, состояние);
  14.         возвращенное ЛОЖНОЕ;
  15.  
  16.     }
  17.    
  18.     состояние = CM_Reenumerate_DevNode (devInst, 0);
  19.    
  20.     если (состояние! = CR_SUCCESS) {
  21.         printf («CM_Reenumerate_DevNode потерпело неудачу: %x \ n «, состояние));
  22.         возвращенное ЛОЖНОЕ;
  23.     }
  24.  
  25.     возвращенно TRUE;
  26. }

Однако, я хотел сделать это в Делфи. С правильно постоянн именами, я мог найти 2 справки к этому режиму. Проект Делфи JEDI имеет a обеспечивает режим для нагружать DLL который позволяет эти быть позвоненным и или кто-то (соединение) Код переведенного Майкрософта в режим для просматривать для оборудования или было теперь пойденное a, проект демонстрации JEDI который включил этот режим. Любой путь, французское место был первое одним я счесл то просмотрено для нового оборудования с Делфи.

Здесь тот Код:

ДЕЛФИ:
  1. процедура SomeProcedure;
  2.   // сперва вы потребность нагрузить модуль. 
  3.   LoadConfigManagerApi; 
  4.   // после этого вызывает перевод режима MS
  5.   ScanForHardwareChanges;
  6. конец;
  7.  
  8. // здесь перевод ScanForHardwareChanges
  9. функция ScanForHardwareChanges: булевско;
  10. var
  11.   dev: DEVINST;
  12.   состояние: CONFIGRET;
  13. начните
  14.  
  15.   состояние: = CM_Locate_DevNode (dev,», CM_LOCATE_DEVNODE_NORMAL);
  16.  
  17.   если (<> CR_SUCCESS состояния) после этого
  18.   начните
  19.     результат: = ЛОЖНО;
  20.     выход;
  21.   конец;
  22.  
  23.   состояние: = CM_Reenumerate_DevNode (dev, 0);
  24.  
  25.   если (<> CR_SUCCESS состояния) после этого
  26.   начните
  27.     результат: = ЛОЖНО;
  28.     выход;
  29.   конец;
  30.   Результат: = TRUE;
  31. конец;

Что режим был выбран вверх на русском месте (соединении) и был доработан для того чтобы быть независимым архивов JEDI. Однако, оба из этих режимов включают путь больше информации чем необходим.

Процесс действительно просто.
1. Нагрузите DLL
2. Получите расположение 2 методов вам.
3. Вызовите их (используя соотвествующие константы
4. Расгрузите все.

Я писал мой собственный режим Делфи который делает вс то и не имеет никакой экстренный волочат багаж, котор (снадобье?) вдоль для езды.

Мое неразъемное разрешение:

ДЕЛФИ:
  1. {******************************************************************************
  2.   ScanForHardwareChanges
  3.   Брайан Неспециалистом на TheCodeCave.com
  4. ******************************************************************************}
  5. функция ScanForHardwareChanges: Булевско;
  6. const
  7.   CFGMGR32_DLL                 = `cfgmgr32.dll';
  8.   CM_LOCATE_DEVNODE_NAME       = CM_Locate_DevNodeA'; `
  9.   CM_REENUMERATE_DEVNODE_NAME = CM_Reenumerate_DevNode'; `
  10.   CM_LOCATE_DEVNODE_NORMAL     = $00000000;
  11.   CR_SUCCESS                   = $00000000;
  12. var
  13.    DeviceNode: DWord;
  14.    HCfgMgr: Т-образная рукоятка;
  15.    CM_Locate_DevNode: функция (dnDevInst var: DWord; pDeviceID: PAnsiChar;
  16.                                ulFlags: ULONG): DWord; stdcall;
  17.    CM_Reenumerate_DevNode: функция (dnDevInst: DWord; ulFlags: ULong): DWord; stdcall;
  18. начните // ScanForHardwareChanges
  19.   Результат: = ЛОЖНО;
  20.   HCfgMgr: = LoadLibrary (CFGMGR32_DLL);
  21.   если (HCfgMgr <32), то
  22.   после этого MessageDlg (ошибка `: не смогл найти mtError менеджера DLL', конфигурации, [mbOk], 0)
  23.   еще начните
  24.     попытка
  25.       CM_Locate_DevNode: = GetProcAddress (HCfgMgr, CM_LOCATE_DEVNODE_NAME);
  26.       CM_Reenumerate_DevNode: = GetProcAddress (HCfgMgr, CM_REENUMERATE_DEVNODE_NAME);
  27.       если (CM_Locate_DevNode (DeviceNode, НОЛЬ, CM_LOCATE_DEVNODE_NORMAL) = CR_SUCCESS), то
  28.       после этого результат: = (CM_Reenumerate_DevNode (DeviceNode, 0) = CR_SUCCESS);
  29.     окончательно // оборачивает вверх
  30.       FreeLibrary (HCfgMgr);
  31.     конец;    попытка ///окончательно
  32.   конец;
  33. конец// ScanForHardwareChanges

Как тантьема, здесь совмещено в проект которому развертки для нового оборудования и после этого reboots компьютер.
(больше…)

3-ье января 2007

Как извлечь иконы интернета и почты от меню старта с RegEdit

Сохранено вниз: RegEdit, регистратура, WINDOWS, XP - 9:45 am Брайан @

Всегда простой способ. правыми щелкая и выбирая свойствами на адвокатском сословии старта:
Как раз щелчок прочь…

Но здесь быстрая и пакостные… Создайте архив .reg с этим содержанием и приложите его.
Версия 5.00 редактора регистратуры Windows

[HKEY_CURRENT_USER \ програмное обеспечение \ Майкрософт \ Windows
\ CurrentVersion \ исследователь \ StartPage]
=hex «фаворитов»: 00
=dword «FavoritesChanges»: 00000001
=hex «FavoritesResolve»: 00.00.00.00.00.00.00.00

Scripters, здесь команды сделать его от командного файла

DOS:
  1. :: Освободите прикалыванные иконы
  2. REG ДОБАВЛЯЕТ «HKCU \ програмное обеспечение \ Майкрософт \ Windows \ CurrentVersion \ исследователь \ StartPage» /V «фаворитов» /T REG_BINARY /D 00 /F
  3. REG ДОБАВЛЯЕТ «HKCU \ програмное обеспечение \ Майкрософт \ Windows \ CurrentVersion \ исследователь \ StartPage» /V «FavoritesResolve» /T REG_BINARY /D 0000000000000000 /F
  4. REG ДОБАВЛЯЕТ «HKCU \ програмное обеспечение \ Майкрософт \ Windows \ CurrentVersion \ исследователь \ StartPage» /V «FavoritesChanges» /T REG_DWORD /D 00000001 /F

Приведено в действие WordPress