На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Win Api / Как запустить аплет Панели управления? Сделать домашней страницей Добавить в избранное Написать писмо

Как запустить аплет Панели управления?


Запустить аплет Панели управления можно вызвав функцию WinExec, для выполнения файла control.exe, которому передано имя аплета. Обычно аплеты панели управления расположены в каталоге System Windows и имеют расширение .cpl.
Пример:

     procedure TForm1.Button1Click(Sender: TObject);
    begin
      WinExec('C:\WINDOWS\CONTROL.EXE TIMEDATE.CPL',
       sw_ShowNormal);
      WinExec('C:\WINDOWS\CONTROL.EXE MOUSE',
       sw_ShowNormal);
      WinExec('C:\WINDOWS\CONTROL.EXE PRINTERS',
       sw_ShowNormal);
    end;



Aleksey  Borzenkov (Aleksey.Borzenkov@p9.f356.n5030.z2.fidonet.org)
Что-бы запустить какой-то апплет Панели управления существует файл control.exe
Дальше идут примеры использования...

--------------------------------------------------------------------------
|       Command Line           | Description
--------------------------------------------------------------------------
| Через макросы control.exe (Вроде как стандартные)
--------------------------------------------------------------------------
| control.exe Desktop          | Control Panel->Display->General
| control.exe Color            | Control Panel->Display->Appearance
| control.exe Date/Time        | Control Panel->Date/Time
| control.exe Ports            | Control Panel->System->Device Manager
| control.exe International    | Control Panel->Regional Settings
| control.exe Mouse            | Control Panel->Mouse
| control.exe Keyboard         | Control Panel->Keyboard
| control.exe Printers         | Control Panel->Printers
| control.exe Fonts            | Control Panel->Fonts
--------------------------------------------------------------------------
| А здесь я руками узнавал как и что запускать (у меня MD'95, так что у
| вас это может и не работать). Проверьте плиз на 98/Me.
--------------------------------------------------------------------------
| control.exe desk.cpl,,  | Control Panel->Display->Закладка num (0..inf)
| control.exe desk.cpl,,3      | Control Panel->Display->Settings (у меня)
| control.exe inetcpl.cpl      | Control Panel->Internet
| control.exe netcpl.cpl       | Control Panel->Network
| control.exe joy.cpl          | Control Panel->Joystick
| control.exe appwiz.cpl       | Control Panel->Add/Remove
| control.exe appwiz.cpl,,2    | Control Panel->Add/Remove->Install/Uninstall
| control.exe appwiz.cpl,,3    | Control Panel->Add/Remove->Startup Disk
| control.exe intl.cpl         | Control Panel->Regional Settings
| control.exe mmsys.cpl        | Control Panel->MultiMedia
| control.exe modem.cpl        | Control Panel->Modem
| control.exe password.cpl     | Control Panel->Passwords
| control.exe sysdm.cpl        | Control Panel->System
| control.exe sysdm.cpl,,1     | Control Panel->System->Device Manager
--------------------------------------------------------------------------

Вообще у большинства апплетов MicroSoft существует правило:
 control.exe someapp.cpl,,
 : @0, @1, ..., @9, @???
   В некоторых cpl-файлах есть несколько апплетов с помощью этого параметра
   можно задавать какой именно запускать (Пример такого cpl - main.cpl):
     control.exe main.cpl,@0 - Мышь
     control.exe main.cpl,@1 - Клава
     сontrol.exe main.cpl,@2 - Принтеры
     control.exe main.cpl,@3 - Фонты
     control.exe main.cpl,@4 - Питание
 : 0, 1, ..., 9, ???
В некоторых (почти во всех) апплетах существуют закладки. С помощью этого параметра задаётся какую именно (по счёту) закладку открывать. Иногда счёт начинается с 0, иногда с 1. Зависит от конкретного cpl. Hекоторыми апплетами игнорируется. Hапример control.exe main.cpl,@0,1 никакого эффекта, а control.exe main.cpl,@1,1 Открывается вторая закладка в настройках клавы.
Запятые вроде как не обязательны

Програмно это сделать можно так:
 ShellExecute(0, 'open', 'control.exe', 'main.cpl,@4', '', SW_SHOW);

или даже так:
 ShellExecute(0, 'open', 'rundll32.exe',
   'shell32.dll,Control_RunDLL main.cpl,@4', '', SW_SHOW);

или даже ваще так:
 WinExec('rundll32.exe shell32.dll,Control_RunDLL main.cpl @4', SW_SHOW);

Дело вкуса, всё равно control.exe - это шлюз, который делает WinExec.

Hадеюсь очень помог (целый час сидел hiew'ом туда сюда бегал). Вообще побольше смотрите что есть в WINDOWS и WINDOWS\SYSTEM иногда такие вот полезные вещи найти можно. И копайте exe'шники, можно узнать много нового.

Комментарий от Vladimir (damageinc@e-mail.ru)
Использовать  всякие  control.exe - это не есть хороший метод.
Лучше  всего  использовать  ShellExecuteEx  с  правильно  заполненной
структурой. Для этого надо использовать Shell Namespaces.

var
desktop: IShellFolder;
pidlChild: PItemIDList;
Value: STRRET;
Iterator: IEnumIDList;
sei:_SHELLEXECUTEINFOA;
child: IShellFolder;
begin
CoInitializeEx( nil, COINIT_MULTITHREADED );
SHGetMalloc(pMalloc);
SHGetDesktopFolder(desktop);
SHGetSpecialFolderLocation(0,CSIDL_CONTROLS,pidlItself);
desktop.BindToObject(pidlItself, nil, IID_IShellFolder, Pointer(desktop) );

folder.EnumObjects( 0 (* no owner window *), SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN,
Iterator );
while true do
   begin
     Iterator.Next( 1, pidlChild, celtFetched );
     inc(FNumber);
     if hr <> NOERROR then Break;
     folder.GetDisplayNameOf( pidlChild, SHGDN_INFOLDER or SHCONTF_NONFOLDERS or SHGDN_INCLUDE_NONFILESYS, Value
);
     //если надо запустить, то:
     sei.cbSize:= sizeof(sei);
     sei.fMask:= SEE_MASK_IDLIST or SEE_MASK_INVOKEIDLIST;
     sei.wnd:= 0;
     sei.lpVerb:= 0;
     sei.lpFile:= nil;
     sei.lpParameters:= 0;
     sei.lpDirectory:= nil;
     sei.nShow:= SW_SHOWNORMAL;
     sei.hInstApp:= 0;
     sei.lpIDList:= pidlChild;
     ShellExecuteEx(@sei);
     
   end;

pMalloc := nil;
CoUninitialize;
end.


Вообще,  см.  статью "Пространство имён оболочки Windows", автор Акжан Абдулин.

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz