Рассылка статей | Выпуск 87. Вызов системных компонентов из VBA
Leadersoft.ru

Рассылка статей

Программирование и готовые решения

В этом разделе сайта дается информация от https://leadersoft.ru о статьях по программированию, ответах на вопросы и др. Статьи рассылаются подписчикам и публикуются на разных сервисах. Возможно некоторая информация устарела и ссылки не работают, но эти сведения могут быть полезны, если Вы серьезно занимаетесь разработкой баз данных

Выпуск 87. Вызов системных компонентов из VBA

Данная статья ориентирована на начинающих разработчиков Access, желающих более углубленно изучить возможности программирования в Access и сделать свои приложения более профессиональными.

Автор. Дмитрий Сонных

Вызов системных компонентов из VB/VBA.

      Иногда бывает необходимо просмотреть или изменить системные настройки Windows. И хочется это сделать сразу из программы, а не через «Пуск --> Панель управления --> Нужные настройки…»

      Для большинства системных установок Windows предлагает свои компоненты. Существует несколько десятков окон, предлагающих что-либо изменить в системе. Каждое из таких окно можно вызвать из VB, не используя ни одной API-функции. Наборы таких окон находятся в библиотеках Windows'a с расширением ".cpl". Например в библиотеке desk.cpl находятся четыре стандартных окна (точнее одно окно с четырмя закладками): "Фон", "Заставка", "Настройка", "Оформление" (В Windows XP добавилась пятая закладка «Темы»). Для того, чтобы вызвать не просто нужное окно, а ещё и нужную закладку, в параметрах вызова надо установить индекс нужной закладки. Вызов происходит при помощи обычной функции Shell, но немного необычным способом:

Call Shell("rundll32.exe shell32.dll,Control_RunDLL desk.cpl, ,0" )

      Откроет окно свойств экрана с закладкой "Фон". А теперь некоторые библиотеки и параметры. Только надо учесть, что состав библиотек и параметров могут зависеть от версии Winduws. Там, где возможно, я укажу отличия.

Экран - desk.cpl

- фон/Рабочий стол = "desk.cpl, ,0"
- заставка = "desk.cpl, ,1"
- оформление = "desk.cpl, ,2"
- настройка/параметры = "desk.cpl, ,3"
- темы = "desk.cpl, ,5" (Windows XP)

Специальные возможности – access.cpl

- клавиатура = "access.cpl, ,1"
- звуки = "access.cpl, ,2"
- экран = "access.cpl, ,3"
- мышь = "access.cpl, ,4"
- общие = "access.cpl, ,5"

Главная - main.cpl, используется для управления мышью, клавиатурой, принтерами, шрифтами.

- мышь = "main.cpl @0"
- кнопки мыши = "main.cpl @0,0" (Windows 2000/XP)
- указатели мыши = "main.cpl @0,1" (Windows XP)
- параметры указателя мыши = "main.cpl @0,2" (Windows XP)
- колесико мыши = "main.cpl @0,3" (Windows XP)
- оборудование = "main.cpl @0,4" (Windows XP)

      В Windows 2000 не смог переключить вкладки. Вместо @0 можно подставить следующие значения и получить, соответственно:
- клавиатура =”main.cpl @1”

      и для ХР

- скорость =”main.cpl @1,0” (Windows 98/2000)
- язык =”main.cpl @1,1” (Windows 9x/2000)
- оборудование =”main.cpl @1,1” (Windows XP)
- оборудование =”main.cpl @1,2” (Windows 2000)
- принтер =”main.cpl @2” (Windows 9x)
- шрифт =”main.cpl @3” (Windows 9x)

Язык и региональные параметры – intl.cpl

- региональные стандарты/региональные параметры = “intl.cpl,,0” (Windows 9х/ХР)
- общие = “intl.cpl, ,0” (Windows 2000)
- числа = “intl.cpl, ,1” (Windows 9х/2000) (в Windows XP на вкладке «региональные параметры»)
- языки = “intl.cpl, ,1” (Windows XP)
- денежная единица = “intl.cpl, ,2” (Windows 9х/2000) (в Windows XP на вкладке «региональные параметры»)
- дополнительно = “intl.cpl, ,2” (Windows XP)
- время = “intl.cpl, ,3” (Windows 9х/2000) (в Windows XP на вкладке «региональные параметры»)
- дата = “intl.cpl, ,4” (Windows 9х/2000) (в Windows XP на вкладке «региональные параметры»)
- языки и раскладка = “intl.cpl, ,5” (Windows 2000)

Дата и время - timedate.cpl

- дата и время = "timedate.cpl, ,0"
- часовой пояс  = "timedate.cpl, ,1"

Модем - modem.cpl

- модемы = "modem.cpl" (Windows 9х – две вкладки, переключить не удалось) (вкладка «модемы» на форме «Телефон и модем» в Windows 9х/2000/XP)

Телефон и модем - telephon.cpl

- набор номера = "telephon.cpl, , 0"(Windows 2000/XP)
- модемы = "telephon.cpl, ,1"(Windows 2000/XP)
- дополнительно = "telephon.cpl, ,2"(Windows 2000/XP)
В Windows 9х две вкладки. Переключить не удалось

Сеть/конфигурация - netcpl.cpl  (Windows 9х)

Три вкладки. Переключить не удалось.
Мастер настройки сети –netsetup.cpl (Windows XP)

Факс – fax.cpl (Windows 2000/XP)

- сведения о пользователе = "telephon.cpl, ,0"
- титульные страницы = "telephon.cpl, ,1"
- монитор состояния = "telephon.cpl, ,2"
- дополнительные параметры = "telephon.cpl, ,3"

Система - sysdm.cpl

- общие = “sysdm.cpl, ,0”
- устройства = “sysdm.cpl, ,1” (Windows 9х)
- сетевая идентификация = “sysdm.cpl, ,1” (Windows 2000)
- имя компьютера = “sysdm.cpl, ,1” (Windows XP)
- профили оборудования = “sysdm.cpl, ,2 (Windows 9х)
- оборудование = “sysdm.cpl, ,2 (Windows 2000/ХР)
- быстродействие = “sysdm.cpl, ,3” (Windows 9х)
- профили пользователей = “sysdm.cpl, ,3” (Windows 2000)
- дополнительно = “sysdm.cpl, ,3” (Windows XP)
- дополнительно = “sysdm.cpl, ,4” (Windows 2000)
- восстановление системы = “sysdm.cpl, ,4” (Windows XP)
- автоматическое обновление = “sysdm.cpl, ,5” (Windows XP)
- удаленные сеансы = “sysdm.cpl, ,6” (Windows XP)

Служба автоматического обновления wuaucpl.cpl (Windows 2000)

Пароль - password.cpl (Windows 9х)
Три закладки. Переключить не удалось.
В Windows 2000 за пользователей отвечает модуль netplwiz.dll, который таким путем вызвать нельзя
Учетные записи пользователей - nusrmgr.cpl (Windows XP)

ODBC - odbccp32.cpl

- пользовательский DSN = "odbccp32.cpl, ,0"
Переключить на другие закладки не получилось.

Установка и удаление программ - appwiz.cpl

- установка/удаление программ - "appwiz.cpl, ,0" (Windows 9х)
- изменение или удаление программ - "appwiz.cpl, ,0" (Windows 2000/XP)
- установка компонентов Windows - "appwiz.cpl, ,1"  (Windows 9х)
- установка программ - "appwiz.cpl, ,1"  (Windows 2000/XP)
- загрузочная дискета - "appwiz.cpl, ,2" (Windows 9х)
- установка компонентов Windows - "appwiz.cpl, ,2" (Windows 2000/XP)
- выбор программ по умолчанию - "appwiz.cpl, ,3"  (Windows 2000/XP)
Для Windows 9x переключить вкладки не удалось.

Мультимедия - mmsys.cpl

- аудио = "mmsys.cpl,,0" (Windows 9х)
- звук = "mmsys.cpl,,0" (Windows 2000)
- звуки и аудиоустройства = "mmsys.cpl,0" (Windows XP)
- громкость = "mmsys.cpl,,0" (Windows XP)
- видио = "mmsys.cpl,,1" (Windows 9х)
- аудио = "mmsys.cpl,,1" (Windows 2000)
- звуки = "mmsys.cpl,,1" (Windows XP)
- миди = "mmsys.cpl,,2" (Windows 9х)
- оборудование = "mmsys.cpl,,2" (Windows 2000)
- аудио = "mmsys.cpl,,2" (Windows XP)(включает в себя вкладку миди из 9х)
- компакт - диск = "mmsys.cpl,,3" (Windows 9х)
- речь = "mmsys.cpl,,3" (Windows XP)
- оборудование = "mmsys.cpl,,4"  (Windows XP)

Джойстик - joy.cpl

- игровые устройства = "joy.cpl, ,0" (Windows 9x/2000)
- идентификаторы устройств = "joy.cpl, ,1" (Windows 9x/2000)
В Windows XP вкладок нет

Сканеры и камеры sticpl.cpl (Windows 9х/2000)

DirectX (если он установлен) - directx.cpl
Имеет 8 вкладок (DirectX 9c). Приводить их не буду. Вряд ли Вы будете настраивать DirectX из своих программ.

Брандмауэр Windows - firewall.cpl (Windows XP)

- общие = "firewall.cpl, ,0"
Всего три вкладки. Переключить их не удалось.

Мастер установки оборудования - hdwwiz.cpl (Windows 2000/XP)

Электропитание - powercfg.cpl

- схема управления питанием = "powercfg.cpl, ,0"
Всего четыре (Windows 98 – 2)  вкладки. Переключить их не удалось.

Параметры оповещения - wscui.cpl (Windows XP)

Сетевые подключения - ncpa.cpl (Windows 2000/XP)

Свойства очереди подключений - msmq.cpl (Windows 2000)

- запоминающие устройства = "msmq.cpl, ,0"
Есть три вкладки. Переключить не удалось.

Интернет - inetcpl.cpl

- общие ="inetcpl.cpl, ,0"
- безопасность ="inetcpl.cpl, ,1"
- конфиденциальность ="inetcpl.cpl, ,2"
- содержание ="inetcpl.cpl, ,3"
- подключения ="inetcpl.cpl, ,4"
- программы ="inetcpl.cpl, ,5"
- дополнительно ="inetcpl.cpl, ,6"
Экран настройки зависит от версии IE. Здесь дан экран для IE 6.0.

      Некоторые программы тоже помещают свои экраны настройки в системный раздел Windows (например, Java - jpicpl32.cpl)
Другие программы хранят свои экраны настройки в своих папках. Их можно так же запустить через Shell

Call Shell("rundll32.exe shell32.dll,Control_RunDLL имя_файла.cpl,0" )

      Но в этом случае имя файла должно указываться с полным путем. Поскольку названия папок могут содержать пробелы, то можно привести его к DOS виду. Например, отрыть экран настройки конфигураций почты Outloоk можно так

Call Shell("rundll32.exe shell32.dll,Control_RunDLL _
G:\PROGRA~1\COMMON~1\System\MSMAPI\1049\MLCFG32.CPL,,")

      Или заключить путь в две пары двойных кавычек

Call Shell("rundll32.exe shell32.dll,Control_RunDLL _
""g:\Program Files\Common Files\System\MSMAPI\1049\MLCFG32.CPL"" ,,")

      Из-за того, что в разных версиях Windows состав экранов управления различен, причем иногда различны и закладки на этих экранах, к использованию экранов настройки Windows надо подходить с осторожностью. Желательно сначала определить используемую версию Windows.

      Маленький совет. Если Вы собираетесь часто использовать экраны настройки, или их вызов у Вас осуществляется в нескольких местах, целесообразно сделать специальную подпрограмму для вызова экранов настройки

Public Sub ShellSysComp(strLibName As String, intIndex As Integer)
      Call Shell("rundll32.exe shell32.dll,Control_RunDLL " + strLibName + ",," + LTrim(Str(intInddex)))
End Sub

      Эта подпрограмма всего лишь соединяет имя библиотеки с индексом, переведённым в строку, и запускает всё это дело. Используемые материалы: сайт www.sdteam.com, Сергей Миллер, «Вызов системных компонентов из VB»

Добавить комментарий

Loading