Systémové dialogy

Systémovými dialogy myslím především dialogy patřící pod Ovládací panely systému Windows. Lze je spouštět programově? V řadě případů ano. Podívejme se kupříkladu na dialog Datum a čas.

Dialog Datum a čas
Dialog Datum a čas
1
2
3
4
5
6
7
8
9
Sub SystemovyDialogShellApp()

    'objekt Shell
    Set objShell = CreateObject("Shell.Application")
   
    'dialog Datum a čas
    objShell.ControlPanelItem "timedate.cpl"

End Sub

Tento způsob je ovšem zastaralý a samotný Microsoft doporučuje jinou cestu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub SystemovyDialogShell()
   
    'Windows 7, 64 bit
   
    Dim obj As Object
   
    Set obj = CreateObject("WScript.Shell")
   
    'dialog Datum a čas (použit kanonický název)
    'obj.Run "%windir%\system32\control.exe -name Microsoft.DateAndTime"
    'zjednodušeně:
    obj.Run "control.exe -name Microsoft.DateAndTime"

    'alternativně:
    'obj.Run "control.exe timedate.cpl"
   
    'dialog Datum a čas, druhá záložka (záložky indexovány od nuly)
    'obj.Run "control.exe -name Microsoft.DateAndTime -page 1"
   
    'alternativně:
    'obj.Run "control.exe timedate.cpl,,1"
   
End Sub
Dialog Datum a čas - druhá záložka
Dialog Datum a čas – druhá záložka

Podrobnější nápovědu najdete na stránkách Executing Control Panel Items a Control Panel Canonical Names.

Technologie Microsoftu doprovází ovšem schizofrenie. Dialogy se v průběhu času měnily, mizely a přeskupovaly se záložky, pro některé vznikly samostatné spouštěcí soubory.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub SystemovyDialogUcty()
   
    'Windows 7, 64 bit
   
    Dim obj As Object
   
    Set obj = CreateObject("WScript.Shell")
   
    'uživatelské účty
    obj.Run "control.exe -name Microsoft.UserAccounts"
   
    'uživatelské účty podruhé
    obj.Run "%windir%\system32\netplwiz.exe"
   
End Sub
Dialog Uživatelské účty - varianta 1
Dialog Uživatelské účty – varianta 1
Dialog Uživatelské účty - varianta 2
Dialog Uživatelské účty – varianta 2

Ukázali jsme si, jak systémové dialogy vyvolávat. Změny v nich už necháváme na uživateli a ručním vstupu. Rozhodně nedoporučuji nasazovat z VBA nějaké „SendKeys“. Pokud už musíte něco v systému programově měnit, používejte API nebo WMI.