|
|
|
|
Как
запустить аплет Панели управления?
Запустить аплет Панели управления можно вызвав функцию 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
|
|