Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2011年04月24日] [更新 2016年08月18日] Delphi サンプルプログラム集
   
468_各種システム設定ダイアログ表示
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro, XE5(UP2) Pro
Windows Vista 以降用.一部は Windows XP でも表示可能
468_ShowDialog_System.zip [5,298 KB] 2016年09月14日版 (EXE 同梱)



  • 2011年10月29日
  • NewStr 関数を関数内関数として String 型として処理するようにした (Unicode 対応策)
  • Windows 7 のシステム関係ダイアログの参考コードを大幅に追加
  • ShellExecuteEx に渡すパスをフルパスにした
  • 2013年07月29日
  • パス名をファイルから読み込む方式に変更
  • NewStr 関数の代わりに PString 型を使用するコードに変更
  • IOpenControlPanel インターフェイスを使用したサンプルを追加




01_各種システム設定ダイアログの表示


Windows Vista 以降では,コントロールパネルの各項目に対して,canonical name (別名・標準名あるいは正規名) という,各項目名が定義されています.主にこれを使用したシステム関係ダイアログを表示するサンプルコードです.ShellExecute 関数を使用しています.

Delphi XE2 になって 64 ビットのアプリケーションが開発できるようになり,64 ビット版の Windows のシステムダイアログが正常に表示されるようになりました.
実行結果の表示例は Windows 7 の 64 ビット版のものです.32 ビット版の Windowws 7 で実行するには,プラットフォームを Win32,つまり VCL-32 にしてコンパイルした EXE を実行します.
これらのダイアログの一部は,Windows XP でも表示可能です.

2013年07月29日の更新で,起動パス名を,ファイルから読み込むようにしました.パス名の先頭の以下の部分は省略可能です.これは実行ファイル名の場所を明確にするために付けているだけです.

%SystemRoot%\System32\


64 ビット Windows で 32 ビットの EXE を実行した場合,上記のフォルダを指定しても実際には以下のフォルダ内を検索します.これはリダイレクトの機能によるものです.

%SystemRoot%\SysWOW64\



図1
設計時画面
  • 表示には TListbox を使用
図2
コンパイルして実行
  • 選択中の項目をダブルクリックするとダイアログを表示

リスト1
各種システム関係ダイアログを表示
unit ShowDialog_SystemUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure ListBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private 宣言 }
    FCmdPath : string;
    FCmdPara : string;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  ShellAPI,
  StrUtils;

{$R *.DFM}

//=============================================================================
//  フォーム生成時の処理
//  ListBox1に起動用の文字列をセット
//
//  SystemDialogList.txtには,最初のカンマまでがTListBoxに表示する文字列
//  そこから最後までが実際のパス名とそのオプション関係の文字列となっいる
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);

  //---------------------------------------------------------------------------
  //  ListBox1に文字列と実行用のパス名をセット
  //---------------------------------------------------------------------------
  procedure AddItem(ACaption, APath: String);
  var
    LpAddStr : PString;
  begin
    New(LpAddStr);
    LpAddStr^ := APath;
    ListBox1.AddItem(ACaption, TObject(LpAddStr));
  end;
  //---------------------------------------------------------------------------

var
  LStringList : TStringList;
  LPos        : Integer;
  LStrCaption : string;
  LStrPath    : string;
  i           : Integer;
begin
  ListBox1.Sorted := True;

  //表示用の文字列とパス名を格納したファイルを読み込んで処理
  LStringList := TStringList.Create;
  try
    LStringList.LoadFromFile('SystemDialogList.txt');
    for i := 0 to LStringList.Count - 1 do begin
      LPos        := Pos(',', LStringList[i]);
      LStrCaption := Copy(LStringList[i], 1, LPos -1);
      LStrPath    := Trim(Copy(LStringList[i], LPos + 1, Length(LStringList[i])));

      //ListBox1のItemに追加
      AddItem(LStrCaption, LStrPath);
    end;
  finally
    FreeAndNil(LStringList);
  end;
  ListBox1.ItemIndex := 0;
  ListBox1Click(nil);
end;

//=============================================================================
//  フォーム破棄時の処理
//  ListBox1のオブジェクトを破棄
//=============================================================================
procedure TForm1.FormDestroy(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to ListBox1.Items.Count-1 do begin
    Dispose(PString(ListBox1.Items.Objects[i]));
  end;
end;

//=============================================================================
//  ListBox1のOnDblClickイベント処理
//  ListBoxで選択しているダイアログ等を起動
//=============================================================================
procedure TForm1.ListBox1DblClick(Sender: TObject);
var
  LRetCode : Integer;
begin
  if ListBox1.ItemIndex < 0 then exit;
  if FCmdPath = '' then exit;

  LRetCode := ShellExecute(Handle, '', PChar(FCmdPath), PChar(FCmdPara), nil, SW_SHOW);

  if LRetCode <=32 then begin
    MessageBox(Handle, PChar(SysErrorMessage(LRetCode)), '情報', MB_ICONINFORMATION);
  end;
end;

//=============================================================================
//  ListBox1のOnClickイベント処理
//  選択項目のShellExecute関数に渡す引数の文字列を作成
//=============================================================================
procedure TForm1.ListBox1Click(Sender: TObject);

  //---------------------------------------------------------------------------
  //  環境変数を含む(%等の文字を含む)を実際のパス名に変換
  //---------------------------------------------------------------------------
  function ExpandEnvironmentString(S: String): String;
  var
    LDstChar : array [0..MAX_PATH - 1] of Char;
  begin
    ExpandEnvironmentStrings(PChar(S), LDstChar, MAX_PATH);
    Result := LDstChar;
  end;
  //---------------------------------------------------------------------------

var
  LStringList : TStringList;
  LOriginCmd  : string;
  LEnvPath    : string;
begin
  if ListBox1.ItemIndex < 0 then exit;

  //選択中のItems文字列を取得してコマンド文字列を作成
  LOriginCmd := Trim(PString(ListBox1.Items.Objects[ListBox1.ItemIndex])^);
  LEnvPath := ExpandEnvironmentString(LOriginCmd);

  //実行ファイル名とパラメータに分解
  LStringList := TStringList.Create;
  try
    LStringList.Delimiter       := ' ';
    LStringList.StrictDelimiter := True;
    LStringList.DelimitedText   := LEnvPath;

    if LStringList.Count = 1 then begin
      FCmdPath := Trim(LEnvPath);
      FCmdPara := '';
    end else begin
      FCmdPath := Trim(LStringList[0]);
      FCmdPara := Trim(StringReplace(LEnvPath, FCmdPath, '', [rfIgnoreCase]));
    end;
  finally
    FreeAndNil(LStringList);
  end;

  //パス名の空白までをパスと認識してしまうのでダブルクォーテーションで囲む
  //パラメータはそのままとする
  if Pos(' ', FCmdPath) > 1 then begin
    if LeftStr(FCmdPath, 1) <> '"' then begin
      FCmdPath := AnsiQuotedStr(FCmdPath, '"');
    end;
  end;
  Edit1.Text := LOriginCmd;
end;

//=============================================================================
//  ListBox1のOnKeyDownイベント処理
//=============================================================================
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ListBox1.ItemIndex < 0 then exit;

  if Key = VK_RETURN then begin
    ListBox1DblClick(nil);
    Key := 0;
  end;
end;

end.




02_各種システム設定ダイアログの表示例


Delphi XE2 でプラットフォームを Win64,つまり VCL-64 でコンパイルしたEXEを,Windows 7 Ultimate の 64 ビット版で実行した結果です.ただし,全てではありません.

各々の図の上のバス名は,実際に ShellExecute 関数の引数に使用した文字列です.最初の空白文字までが実行ファイル名,空白から最後までがパラメータです.空白がないものは,パラメータが空であることを意味します.
これらのパス名の文字列をコピペして,「ファイル名を指定して実行」のダイアログに入力すると,該当ダイアログを表示することできます.この時,既に述べたように,%SystemRoot%\System32\ の部分は省略できます.これはシステムフォルダです.システムパスにはパスが通っています.パスの通ったフォルダ名は省略できます,

Windows 7 にはいくつかのエディションがあります.同じ 64 ビット版の Windows でも,エディションによっては正常に表示されないものもあります.



%SystemRoot%\System32\control.exe /name Microsoft.BitLockerDriveEncryption

図3
BitLocker ドライブ暗号化

%SystemRoot%\System32\cttune.exe

図4
ClearType テキストチューナー

%SystemRoot%\System32\dxdiag.exe

図5
DirectX 診断ツール
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.iSCSIInitiator

図6
iSCSI イニシエータのプロパティ

%SystemRoot%\System32\NAPCLCFG.MSC

図7
NAP クライアントの構成
(ローカルコンピュータ)

%SystemRoot%\System32\odbcad32.exe

図8
ODBC データアドミニストレーター
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.RemoteAppAndDesktopConnections

図9
RemoteApp とデスクトップ接続

%SystemRoot%\System32\control.exe /name Microsoft.RemoteAppAndDesktopConnections /page PropertiesPage

図10
RemoteApp とデスクトップ接続
プロパティ

%SystemRoot%\System32\xwizard.exe RunWizard {7940ACF8-60BA-4213-A7C3-F3B400EE266D}

図11
RemoteApp とデスクトップ接続の
新しい接続設定

%SystemRoot%\System32\control.exe TabletPC.cpl @1 .exe

図12
Tablet PC 設定

%SystemRoot%\System32\xwizard.exe RunWizard {7071EC75-663B-4bc1-A1FA-B97F3B917C55}

図13
VPN 接続の作成

%SystemRoot%\System32\control.exe /name Microsoft.CardSpace

図14
Windows CardSpace
プレビューするカードの選択

%SystemRoot%\System32\control.exe /name Microsoft.WindowsDefender

図15
Windows Defender

%SystemRoot%\System32\control.exe /name Microsoft.WindowsUpdate

図16
Windows Update

%SystemRoot%\System32\control.exe /name Microsoft.WindowsUpdate /page pageUpdateHistory

図17
Windows Update
更新履歴の表示

%SystemRoot%\System32\control.exe /name Microsoft.WindowsUpdate /page pageSettings

図18
Windows Update
設定の変更

%SystemRoot%\System32\control.exe /name Microsoft.WindowsUpdate /page pageHiddenUpdates

図19
Windows Update
非表示の更新プログラムの再表示

Rundll32.exe ndfapi,NdfRunDllDiagnoseIncident

図20
Windows ネットワーク診断

%SystemRoot%\System32\taskkill /im explorer.exe

図21
Windows のシャットダウン
  • Windows XP でも表示可能

%SystemRoot%\System32\winver.exe

図22
Windows のバージョン情報
  • Windows XP でも表示可能

%SystemRoot%\System32\OptionalFeatures.exe

図23
Windows の機能の有効・無効化

%SystemRoot%\System32\control.exe /name Microsoft.WindowsFirewall

上のコマンドでは下図のダイアログが表示されますが,/page を追加すると page の指定によって以下のようなダイアログが表示されます.


/page pageConfigureApps 許可されたプログラムのダイアログ
左ペインの [Windows ファイアウォールを介したプログラムまたは機能を許可する] クリックと同じ
/page PageConfigureSettings 各種類のネットワーク設定のカスタマイズのダイアログ
左ペインの [通知設定の変更] クリックと同じ
/page PageRestoreDefaults 既定の設定の復元ダイアログ
左ペインの [既定値に戻す] クリックと同じ

また,以下のコマンドでは,下図の左ペインの [詳細設定] をクリックした時と同じダイアログが表示されます.


%SystemRoot%\System32\WF.msc

図24
Windows ファイアウォール

Shell:::{2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}

図25
Windows ヘルプとサポート
  • Windows XP でも表示可能
  • 何故か英文
図26
Windows  ヘルプとサポート
  • [オフラインヘルプの表示] にすると日本語になる

%SystemRoot%\System32\slui.exe

図27
Windows ライセンス認証
  • IDE 上からの実行では表示しない

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter

図28
アクションセンター

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageResponseArchive

図29
アクションセンター
アーカイブ済みメッセージ

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageResponseArchive

図30
アクションセンター
アクションセンターの設定変更

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageSignoff

図31
アクションセンター
解決策の確認

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageSolutionDetails

図32
アクションセンター
関連する問題

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageReliabilityView

図33
アクションセンター
信頼性モニター

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageReportDetails

図34
アクションセンター
問題の詳細

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageProblems

図35
アクションセンター
問題レポート

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageAdvSettings

図36
アクションセンター
問題レポートに関する詳細設定

%SystemRoot%\System32\control.exe /name Microsoft.ActionCenter /page pageSettings

図37
アクションセンター
問題レポートの設定

%SystemRoot%\System32\xwizard.exe RunWizard {0cbb5030-f2b2-4b38-8cbc-895cec57db03}

図38
アドホックネットワークの
セットアップ

%SystemRoot%\System32\eventvwr.msc

図39
イベントビューア
  • Windows XP でも表示可能

下図のインターネットのプロパティの設定ダイアログは

%SystemRoot%\System32\control.exe /name Microsoft.InternetOptions /page 0

で表示していますが,次のように cpl を使用しても同じダイアログが表示されます.cpl を使用する方法は Windows 98 以降で使用可能です.

control.exe inetcpl.cpl,,0
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0

この時,最後の数字は,ダイアログ起動時にアクティブにするタブ番号です.
    0 全般
    1 セキュリティ
    2 プライバシー
    3 コンテンツ
    4 接続
    5 プログラム
    6 詳細設定
となっています.


図40
インターネットのプロパティ

%SystemRoot%\System32\control.exe /name Microsoft.IndexingOptions

図41
インデックスのオプション

control.exe Cscui.dll,,0
rundll32.exe shell32.dll, Control_RunDLL Cscui.dll,,0

図42
オフラインファイル

%SystemRoot%\System32\control.exe /name Microsoft.WindowsSidebarProperties

図43
ガジェットギャラリー
  • デスクトップギャラリーというらしい

%SystemRoot%\System32\control.exe /name Microsoft.Keyboard

図44
キーボードのプロパティ

%SystemRoot%\System32\control.exe /name Microsoft.GameControllers

図45
ゲームコントローラ

%SystemRoot%\System32\control.exe

図46
コントロールパネル
  • Windows XP でも表示可能

%SystemRoot%\System32\compmgmt.msc /s

図47
コンピュータの管理
  • Windows XP でも表示可能

下図のコンピュータの簡単操作センターは,Utilman.exe でも表示できます.

%SystemRoot%\System32\control.exe /name Microsoft.EaseOfAccessCenter

図48
コンピュータの簡単操作センター

%SystemRoot%\System32\control.exe /name Microsoft.EaseOfAccessCenter /page pageRepeatRateSlowKeysSettings"

図49
コンピュータの簡単操作センター
キー入力の間隔および速度

%SystemRoot%\System32\control.exe /name Microsoft.EaseOfAccessCenter /page pageFilterKeysSettings

図50
コンピュータの簡単操作センター
フィルターキー機能

%SystemRoot%\System32\control.exe /name Microsoft.EaseOfAccessCenter /page pageStickyKeysSettings

図51
コンピュータの簡単操作センター
固定キー機能

%SystemRoot%\System32\comexp.msc

図52
コン-ポーネントサービス

%SystemRoot%\System32\services.msc

図53
サービス
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.AudioDevicesAndSoundThemes

図54
サウンド

%SystemRoot%\System32\control.exe /name Microsoft.System

図55
システム
コンピュータの基本的な情報の表示

%SystemRoot%\System32\msdt.exe -id MaintenanceDiagnostic -ep ControlPanelSearch

図56
システムメンテナンス

%SystemRoot%\System32\SystemPropertiesComputerName.exe

図57
システムのプロパティ
コンピュータ名

%SystemRoot%\System32\SystemPropertiesProtection.exe

図58
システムのプロパティ
システムの保護

%SystemRoot%\System32\SystemPropertiesRemote.exe

図59
システムのプロパティ
リモート
リモートアシスタンス
リモートデスクトップ

%SystemRoot%\System32\SystemPropertiesAdvanced.exe

図60
システムのプロパティ
詳細設定

%SystemRoot%\System32\rstrui.exe

図61
システムの復元

%SystemRoot%\System32\msconfig.exe

図62
システム構成

%SystemRoot%\System32\msinfo32.exe

図63
システム情報

%SystemRoot%\System32\control.exe /name Microsoft.ScannersAndCameras

図64
スキャナーとカメラ

%SystemRoot%\System32\control.exe desk.cpl,screensaver,@screensaver

図65
スクリーンセーバーの設定
  • Windows XP でも表示可能

%SystemRoot%\System32\WF.msc

図66
セキュリティが強化された
Windows ファイアウォール 

%SystemRoot%\System32\xwizard.exe RunWizard {7071EC71-663B-4bc1-A1FA-B97F3B917C55}

図67
ダイアルアップ接続の作成 

下図のタスクスケジューラは,上のパス名を使用していますが,下のパス名でも表示できます.

%SystemRoot%\System32\control.exe SCHEDTASKS
%SystemRoot%\System32\taskschd.msc /s


図68
タスクスケジューラ
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.TaskbarAndStartMenu

タスクバーと [スタート] メニューのプロパティのダイアログは,次のように .cpl を使用しても同じダイアログが表示できます.

rundll32.exe shell32.dll,Options_RunDLL 1

この時,最後の数字は,ダイアログ起動時にアクティブにするタブの種類です.番号タブの順番とは一致していません.shell32.dll の Options_RunDLL は,フォルダオプションのダイアログの表示に使われていて,その他の番号は,そのダイアログの起動時の表示タブの指定になっています.
    1 タスクバー
    1 セキュリティ
    3 [スタート] メニュー
    6 ツールバー

図69
タスクバーと[スタートメニュー]
のプロパティ

%SystemRoot%\System32\diskmgmt.msc

図70
ディスクの管理
  • Windows XP でも表示可能

%SystemRoot%\System32\DpiScaling.exe

図71
ディスプレイ

%SystemRoot%\System32\control.exe /name Microsoft.Personalization /page pageWallpaper

図72
デスクトップの背景

%SystemRoot%\System32\control.exe /name Microsoft.DevicesAndPrinters

図73
デバイスとプリンター

rundll32.exe newdev.dll,DeviceInternetSettingUi 5

図74
デバイスのインストール設定

%SystemRoot%\System32\DevicePairingWizard.exe

図75
デバイスの追加

%SystemRoot%\System32\control.exe /name Microsoft.DeviceManager

図76
デバイスマネージャー

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting

図77
トラブルシューティング

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page system

図78
トラブルシューティング
システムとセキュリティ

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page display

図79
トラブルシューティング
デスクトップのカスタマイズ

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page network

図80
トラブルシューティング
ネットワークとインターネット

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page devices

図81
トラブルシューティング
ハードウェアとサウンド

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page applications

図82
トラブルシューティング
プログラム

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page raPage

図83
トラブルシューティング
リモートアシスタンス

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page searchPage

図84
トラブルシューティング
検索結果

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page settingPage

図85
トラブルシューティング
設定の変更

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page listAllPage

図86
トラブルシューティング
全てのカテゴリ

%SystemRoot%\System32\control.exe /name Microsoft.Troubleshooting /page historyPage

図87
トラブルシューティング
履歴

%SystemRoot%\System32\control.exe /name Microsoft.NetworkAndSharingCenter

図88
ネットワークと共有センター

%SystemRoot%\System32\control.exe /name Microsoft.NetworkAndSharingCenter /page ShareMedia

図89
ネットワークと共有センター
メディアストリーミング

%SystemRoot%\System32\control.exe /name Microsoft.NetworkAndSharingCenter /page Advanced

図90
ネットワークと共有センター
共有の詳細設定

%SystemRoot%\System32\control.exe NETCONNECTIONS

図91
ネットワーク接続
  • Windows XP でも表示可能

control.exe hotplug.dll
rundll32.exe shell32.dll,Control_RunDLL hotplug.dll

図92
ハードウェアの安全な取り外し
  • Windows XP でも表示可能

%SystemRoot%\System32\hdwwiz.exe

図93
ハードウェアの追加ウィザード

下図の「はじめに (ようこそ)」のダイアログは,Windows Vista では「ウェルカムセンター」ですが,末尾の部分を WelcomeCenter にすると表示できます.

%SystemRoot%\System32\control.exe /name Microsoft.GettingStarted
%SystemRoot%\System32\control.exe /name Microsoft.WelcomeCenter

図94
はじめに (ようこそ)
  • ウェルカムセンターと同じ

%SystemRoot%\System32\control.exe /name Microsoft.BackupAndRestoreCenter

図95
バックアップと復元

%SystemRoot%\System32\SystemPropertiesPerformance.exe

図96
パフォーマンスオプション

%SystemRoot%\System32\control.exe /name Microsoft.PerformanceInformationAndTools

図97
パフォーマンスの情報とツール

%SystemRoot%\System32\control.exe /name Microsoft.PerformanceInformationAndTools /page PerfCenterAdvTools

図98
パフォーマンスの情報とツール
詳細ツール

%SystemRoot%\System32\perfmon.msc /s

図99
パフォーマンスモニター
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.FolderOptions

図100
フォルダオプション

rundll32.exe shell32.dll,Options_RunDLL 2

図101
フォルダオプション - 検索

rundll32.exe shell32.dll,Options_RunDLL 0

図102
フォルダオプション - 全般
  • Windows XP でも表示可能

rundll32.exe shell32.dll,Options_RunDLL 7

図103
フォルダオプション- 表示

%SystemRoot%\System32\control.exe /name Microsoft.Fonts

図104
フォント

rundll32.exe printui.dll,PrintUIEntry /il

図105
プリンタの追加
  • Windows XP でも表示可能
    [プリンタの追加ウィザード]

%SystemRoot%\System32\control.exe /name Microsoft.ProgramsAndFeatures

左側のペインにある [インストールされた更新プログラムを表示] のダイアログは,以下のコマンドで表示できます.

%SystemRoot%\System32\control.exe /name Microsoft.ProgramsAndFeatures /page ::{D450A8A1-9568-45C7-9C0E-B4F9FB4537BD}

図106
プログラムと機能

%SystemRoot%\System32\control.exe /name Microsoft.GetPrograms

図107
プログラムの取得

%SystemRoot%\System32\rsop.msc

図108
ポリシーの結果セット
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.Mouse

図109
マウスのプロパティ

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts

図110
ユーザーアカウント

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageAdminTasks\pageTurnOnGuestAccount

図111
ユーザーアカウント
Guest アカウントをオン

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageAdminTasks

図112
ユーザーアカウント
アカウントの管理

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageAdminTasks\pageDeleteAccount

図113
ユーザーアカウント
アカウントの削除

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageChangeMyAccountType

図114
ユーザーアカウント
アカウントの種類の変更

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageChangeMyPassword

図115
ユーザーアカウント
パスワードの変更

%SystemRoot%\System32\control.exe USERPASSWORDS2

図116
ユーザーアカウント
ユーザ
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pagePickMyPicture

図117
ユーザーアカウント
画像の変更

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageCreateMyPassword

図118
ユーザーアカウント
個人用パスワードの作成

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageRemoveMyPassword

図119
ユーザーアカウント
個人用パスワードの削除

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageAdminTasks\pageNameNewAccount

図120
ユーザーアカウント
新しいアカウントの作成

%SystemRoot%\System32\control.exe /name Microsoft.UserAccounts /page pageRenameMyAccount

図121
ユーザーアカウント
名前の変更

%SystemRoot%\System32\UserAccountControlSettings.exe

図122
ユーザーアカウント
アカウント制御の設定 (UAC の設定)

rundll32.exe sysdm.cpl,EditUserProfiles

図123
ユーザープロファイル

%SystemRoot%\System32\gpedit.msc

図124
ローカルグループポリシーエディタ
  • Windows XP でも表示可能

%SystemRoot%\System32\secpol.msc

図125
ローカルセキュリティポリシー
  • Windows XP でも表示可能

%SystemRoot%\System32\lusrmgr.msc

図126
ローカルユーザとグループ
  • Windows XP でも表示可能

%SystemRoot%\System32\logoff.exe

図127
ログオフ
  • Windows XP でも表示可能だが,ダイアログのデザインは全く違う

%SystemRoot%\System32\printmanagement.msc

図128
印刷の管理

%SystemRoot%\System32\control.exe /name Microsoft.SpeechRecognitionOptions

図129
音声認識

%SystemRoot%\System32\control.exe /name Microsoft.TextToSpeech

図130
音声認識のプロパティ

%SystemRoot%\System32\control.exe desk.cpl,Monitor,@Monitor

図131
画面の解像度
  • Windows XP でも表示可能

%SystemRoot%\System32\dccw.exe

図132
画面の色調整

rundll32.exe sysdm.cpl,EditEnvironmentVariables

図133
環境変数

%SystemRoot%\System32\control.exe /name Microsoft.AdministrativeTools

図134
管理ツール

%SystemRoot%\System32\control.exe /name Microsoft.DefaultPrograms /page pageFileAssoc

図135
拡張子の関連付けを設定する

%SystemRoot%\System32\control.exe /name Microsoft.DefaultPrograms

図136
既定のプログラム

%SystemRoot%\System32\control.exe /name Microsoft.DefaultPrograms /page pageDefaultProgram

図137
既定のプログラムを設定する

%SystemRoot%\System32\fsmgmt.msc

図138
共有フォルダ
  • Windows XP でも表示可能

%SystemRoot%\System32\shrpubw.exe

図139
共有フォルダの作成ウィザード
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe /name Microsoft.Personalization

図140
個人設定

%SystemRoot%\System32\control.exe /name Microsoft.Personalization /page pageColorization

図141
個人設定
ウィンドウの色とデザイン

%SystemRoot%\System32\control.exe desk.cpl,,1

図142
個人設定
スクリーンセーバー
  • Windows XP でも表示可能

下図のデザインの設定ダイアログは,Windows 7 の場合,デスクトップのポップアップメニューから [個人設定] で [ウィンドウの色] をクリックします.切替わったダイアログで [デザインの詳細設定] をクリックします.Windwos 8 / 8.1 にはこの設定はありません.

%SystemRoot%\System32\control.exe COLOR

図143
個人設定
デザイン
  • Windows XP でも表示可能

%SystemRoot%\System32\control.exe desk.cpl,,0

図144
個人設定
デスクトップアイコン
  • Windows XP でも表示可能だが,デスクトップの背景の設定ダイアログ

%SystemRoot%\System32\control.exe /name Microsoft.Personalization /page pageWallpaper

図145
個人設定
デスクトップの背景

%SystemRoot%\System32\control.exe /name Microsoft.AutoPlay

図146
自動再生

%SystemRoot%\System32\azman.msc

図147
承認マネージャー

%SystemRoot%\System32\control.exe /name Microsoft.ColorManagement

図148
色の管理

%SystemRoot%\System32\xwizard.exe RunWizard {7071ECE0-663B-4bc1-A1FA-B97F3B917C55}

図149
接続または
ネットワークのセットアップ

%SystemRoot%\System32\control.exe /name Microsoft.RegionalAndLanguageOptions /page /p:"keyboard"

図150
地域と言語 - キーボードと言語

%SystemRoot%\System32\control.exe /name Microsoft.RegionalAndLanguageOptions /page /p:"administrative"

図151
地域と言語 - 管理

%SystemRoot%\System32\control.exe /name Microsoft.RegionalAndLanguageOptions /page

図152
地域と言語- 形式

%SystemRoot%\System32\control.exe /name Microsoft.RegionalAndLanguageOptions /page /p:"location"

図153
地域と言語 - 場所

%SystemRoot%\System32\control.exe /name Microsoft.PowerOptions

図154
電源オプション

%SystemRoot%\System32\control.exe /name Microsoft.PowerOptions /page pageGlobalSettings

図155
電源オプション
システム設定

%SystemRoot%\System32\control.exe /name Microsoft.PowerOptions /page pagePlanSettings

図156
電源オプション
プラン設定の編集

%SystemRoot%\System32\control.exe powercfg.cpl,,3

図157
電源オプション
詳細設定
  • Windows XP でも表示可能だが,[電源オプションのプロパティ] ダイアログ

%SystemRoot%\System32\control.exe /name Microsoft.PowerOptions /page pageCreateNewPlan

図158
電源オプション
電源プランの作成

%SystemRoot%\System32\control.exe /name Microsoft.PhoneAndModemOptions

図159
電話とモデム

下図の同期センターダイアログは,mobsync.exe でも表示できます.

%SystemRoot%\System32\control.exe /name Microsoft.SyncCenter

図160
同期センター

%SystemRoot%\System32\control.exe /name Microsoft.DateAndTime

図161
日付と時刻

%SystemRoot%\System32\lpksetup.exe

図162
表示言語のインストール
またはアンインストール

%SystemRoot%\System32\control.exe /name Microsoft.ParentalControls

図163
保護者による制限




03_その他のダイアログの表示例


添付のリストにないダイアログの表示用コマンドです.%SystemRoot%\System32\ は省略できます.
表示確認は 64 ビット版の Windows 7 のみで行っています.


control.exe tabletpc.cpl
rundll32.exe shell32.dll,Control_RunDLL tabletpc.cpl

図164
ベンとタッチ [ペンのオプション]

control.exe tabletpc.cpl,,1
rundll32.exe shell32.dll,Control_RunDLL tabletpc.cpl,,1

図165
ベンとタッチ [フリック]

control.exe tabletpc.cpl,,2
rundll32.exe shell32.dll,Control_RunDLL tabletpc.cpl,,2

図166
ベンとタッチ [手書き]

control.exe /name Microsoft.EaseOfAccessCenter /page pageKeyboardEasierToUse

図167
[コンピュータの簡単操作センター]
[キーボードを使いやすくします]

%SystemRoot%\system32\control.exe /name Microsoft.HomeGroup

図168
[ネットワークとインターネット] [ホームグループ]
ホームグループ設定の変更

%SystemRoot%\system32\control.exe /name Microsoft.NotificationAreaIcons

図169
[通知領域アイコン]
タスクバーに表示するアイコンと通知の選択

%SystemRoot%\system32\control.exe /name Microsoft.NotificationAreaIcons /page SystemIcons

図170
[通知領域] [システムアイコン]
システムアイコンのオン/オフ

%SystemRoot%\System32\sdclt.exe

図171
バックアップと復元

%SystemRoot%\System32\sdclt.exe /configure

図172
バックアップの設定
管理者権限での起動が必要

%SystemRoot%\System32\sdclt.exe /kickoffjob

このコマンドを実行すると,設定済みの内容でただちにバックアップを開始し,通知領域にアイコンを表示します.下図のダイアログは,その通知領域のアイコンをクリックしないと表示しません.
バックアップの中止は,[バックアップが進行中です] をクリックします.sdclt.exe /kickoffjob のダイアログが表示されます.そのダイアログの [詳細の表示] ボタンクリックで操作可能です.


図173
設定済みの内容でバックアップ開始
管理者権限での起動が必要

%SystemRoot%\System32\sdclt.exe /restorewizard

図174
ファイルの復元

%SystemRoot%\System32\sdclt.exe /restorewizardadmin

図175
ファイルの復元 (詳細設定)
管理者権限での起動が必要

%SystemRoot%\system32\control.exe /name Microsoft.Recovery

図176
[回復]
このコンピュータを以前のポイントに復元します

%SystemRoot%\system32\control.exe /name Microsoft.LocationAndOtherSensors

図177
[ハードウェアとサウンド] [位置センサーとその他センサー]

%SystemRoot%\system32\control.exe /name Microsoft.CredentialManager


上のコマンドでは下図のダイアログが表示されますが,/page を追加すると page の指定によって以下のダイアログが表示されます.



/page EditWindowsCredentialPage Windows 資格情報の編集
/page NewGenericCredentialPage 汎用資格情報の格納
/page EditGenericCredentialPage 汎用資格情報の編集
/page NewCertificatePage 証明書に基づいた資格情報の追加
/page OpenKeyRingPage 資格情報コンテナを開く
/page KeyRingPropertiesPage プロパティの表示
/page AdvancedSettingsPage 詳細設定
/page CopyToPage 資格情報コンテナのコピー
/page NewKeyRingPage 新しい資格情報コンテナの作成
/page NewSecureNotePage セキュリティで保護されたメモの追加
/page EditSecureNotePage セキュリティで保護されたメモの編集
/page CopySecureNotePage セキュリティで保護されたメモのコピー
/page NewWebCredentialPage Web パスワードの追加
/page EditWebCredentialPage Web パスワードの編集
/page CopyWebCredentialPage Web パスワードのコピー


図178
[ユーザーアカウントと家族のための安全設定] [資格情報マネージャー]
自動ログオン用の資格情報の格納




04_Canonical Names のリスト


Canonical Name の情報はレジストの以下の場所にあります.
本サンプルはレジストリから Canonical Name の値を取得して表示します.

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID


Canonical Name はダイアログを識別しやすいようにしたエイリアス (別名) です.英語圏の方であれば,この名前から,表示されるダイアログが予想できるかも知れません.例えば,

%SystemRoot%\System32\control.exe /name Microsoft.InternetOptions

というコマンドを実行した場合,Windows 7 では次のコマンドが実際に実行されます.

%SystemRoot%\System32\rundll32.exe c:\windows\system32\shell32.dll,Control_RunDLL C:\Windows\System32\inetcpl.cpl, 1

パスの通ったシステムフォルダのディレクトリ部分は省略できますから,これは以下のコマンドと同じことになります.2 番目は control.exe を使用する場合です.

rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl, 1
control.exe inetcpl.cpl, 1


図179
実行結果
  • Canonical Name は control.exe の起動パラメータとして扱われる
  • パラメータなしで control.exe を実行すると [コントロールパネル] を表示する
  • 選択中の項目をダブルクリックするとダイアログを表示

リスト2
Canonical Names のリスト
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Label1: TLabel;
    Edit1: TEdit;
    procedure ListBox1DblClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure ListBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormShow(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  Registry,
  ShellAPI;

{$R *.DFM}

//=============================================================================
//  フォーム表示開始時の処理
//  レジストリからcanonical nameのリストを取得
//  usesにRegistryが必要
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
var
  LRegistry : TRegistry;
  LRegKey   : string;
  LRegItem  : string;
  LItemList : TStringList;
  i         : Integer;
begin
  Edit1.Text := '';

  LItemList         := TStringList.Create;
  LRegistry         := TRegistry.Create;
  LRegistry.Access  := KEY_READ;
  LRegistry.RootKey := HKEY_LOCAL_MACHINE;
  try
    LRegKey := 'SOFTWARE\Classes\CLSID';

    //CLSID階層下のキー名(GUID)を列挙
    if LRegistry.OpenKey(LRegKey, False) then begin
      LRegistry.GetKeyNames(LItemList);
    end;
    LRegistry.CloseKey;

    //列挙したキーのSystem.ApplicationName項目の値を取得してTListBoxに追加
    ListBox1.Sorted := True;
    ListBox1.Items.Clear;
    ListBox1.Items.BeginUpdate;
    for i := 0 to LItemList.Count - 1 do begin
      try
        if LRegistry.OpenKey(LRegKey + PathDelim + LItemList[i], False) then begin
          LRegItem := LRegistry.ReadString('System.ApplicationName');
          if LRegItem <> '' then begin
            ListBox1.Items.Add('/name ' + LRegItem);
          end;
        end;
      finally
        LRegistry.CloseKey;
      end;
    end;
    ListBox1.Items.EndUpdate;
    Label1.Caption := IntToStr(ListBox1.Items.Count);
  finally
    FreeAndNil(LRegistry);
    FreeAndNil(LItemList);
  end;

  ListBox1.ItemIndex := 0;
  ListBox1Click(nil);
end;

//=============================================================================
//  ListBox1のOnDblClickイベント処理
//  TListBoxの選択中のcanonical nameのダイアログを実行
//
//  64ビットWindowsでの実行
//  32ビットのEXEでは表示できないダイアログがある
//  64ビットのEXEを作成して実行すれば表示可能 
//
//  usesにShellAPIが必要
//=============================================================================
procedure TForm1.ListBox1DblClick(Sender: TObject);
var
  LShellCmd : string;
begin
  if ListBox1.ItemIndex < 0 then exit;

  LShellCmd := ListBox1.Items[ListBox1.ItemIndex];
  ShellExecute(Handle, '', 'control.exe', PChar(LShellCmd), nil, SW_SHOW);
end;

//=============================================================================
//  ListBox1のOnClickイベント処理
//  Edit1にcanonical name文字列を表示する8コピー用)
//=============================================================================
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  if ListBox1.ItemIndex < 0 then exit;

  Edit1.Text := 'control.exe ' + ListBox1.Items[ListBox1.ItemIndex];
end;

//=============================================================================
//  ListBox1のOnKeyDownイベント処理
//=============================================================================
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ListBox1.ItemIndex < 0 then exit;

  if Key = VK_RETURN then begin
    ListBox1DblClick(nil);
    Key := 0;
  end;
end;

end.




05_msc ファイルの一覧


ダイアログの表示のサンプルに,拡張子が .msc のファイルを実行するものがあります.この .msc ファイルは以下の場所にあります.本サンプルは,これらの .msc ファイルを列挙します.結果の表示には Delphi に付属のシェルコンポーネントを使用しています.
下の表は筆者の Windows 7 に実装されている msc ファイルの一覧です.

%SystemRoot%\System32\ja-JP


msc ファイル名 (コマンド) ダイアログのタイトル (キャプション)
azman.msc 承認マネージャー
certmgr.msc 証明書 - 現在のユーザー
comexp.msc コンポーネントサービス
compmgmt.msc コンピューターの管理
devmgmt.msc デバイスマネージャー
diskmgmt.msc ディスクの管理
eventvwr.msc イベントビューアー
fsmgmt.msc 共有フォルダー
gpedit.msc ローカルグループポリシーエディター
lusrmgr.msc ローカルユーザーとグループ (ローカル)
NAPCLCFG.MSC NAP クライアントの構成 (ローカルコンピューター)
perfmon.msc パフォーマンスモニター
printmanagement.msc 印刷の管理
rsop.msc ポリシーの結果セット
services.msc サービス
taskschd.msc タスクスケジューラ
tpm.msc コンピューターのトラステット
プラットフォームモジュール (TPN) の管理 (ローカルコンピューター)
WF.msc セキュリティが強化された Windows ファイアウォール


[備考]
英語で er で終わる単語は,カタカナにする際,末尾の長音記号を書かないのが一般的な表記方法です.マイクロソフトの記事,および Windows のダイアログ等のカタカナの表示は長音記号が付いているのが普通となっています.
例えば Printer はプリンタと書きますが,マイクロソフトはプリンターと書いています.


図180
実行結果

msc ファイルは,[Microsoft 管理コンソール (MMC.EXE)] で作成された XML ファイルです.
スナップインと呼ばれるシステム管理ツールのモジュールの情報と,それを動作させるための情報が書かれています.msc ファイルを起動すると,MMC.EXE が起動して msc ファイルに書かれている内容を実行します.

下図は [Microsoft 管理ツール (MMC.EXE)] を起動した画面です.この画面で msc ファイルを作成することができます.例えば特定のコンピュータの情報や操作を行う msc ファイルを作成しておけば,そのリモートコンピュータ専用の情報取得や操作の管理ツールを作成できます.
MMC.EXE の操作には管理者権限が必要です.MMC.EXE の起動時に管理者への昇格のための確認ダイアログが表示されます.



図181
msc ファイル作成ツール

リスト3
msc ファイルの一覧と実行
結果の表示に Delphi に付属のシェルコンポーネントを使用
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ShellCtrls, Buttons;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    SpeedButton1: TSpeedButton;
    ShellListView1: TShellListView;
    Label1: TLabel;
    procedure ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder;
      var CanAdd: Boolean);
    procedure ShellListView1Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  CommCtrl,
  Clipbrd;

{$R *.dfm}

//=============================================================================
//  フォーム表示開始時の処理
//  mscファイルの一覧を作成
//  Delphiに添付のシェルコンポーネントを利用
//
//  ShellListView1の設定
//    AutoContextMenur := False;
//    AutoRefresh := False;
//    ReadOnly := True;
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
var
  LSysDir       : array [0..MAX_PATH - 1] of Char;
  LTargetFolder : string;
  LViewStyle    : Cardinal;
  i             : Integer;
begin
  Self.ActiveControl := ShellListView1;

  //システムディレクトリを取得してja-jpのフルパス名を生成
  GetSystemDirectory(LSysDir, MAX_PATH);
  LTargetFolder  := LSysDir;
  LTargetFolder  := IncludeTrailingPathDelimiter(LTargetFolder) + 'ja-JP';

  ShellListView1.DoubleBuffered    := True;
  ShellListView1.ShowColumnHeaders := False;
  ShellListView1.ViewStyle         := vsReport;
  ShellListView1.Root              := LTargetFolder;

  //Columns[0](名前のカラム)以外は不要なので削除
  for i := ShellListView1.Columns.Count -1 downto 1 do begin
    ShellListView1.Columns.Delete(i);
  end;

  ShellListView1.ItemIndex := 0;
  ShellListView1Click(nil);

  //表示形式をタイルにする
  LViewStyle := LV_VIEW_TILE;
  SendMessage(ShellListView1.Handle, LVM_SETVIEW, WPARAM(LViewStyle), 0);

  Label1.Caption := IntToStr(ShellListView1.Items.Count);
end;

//=============================================================================
//  TEditのテキストをクリップボードにコピー
//=============================================================================
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Clipboard.AsText := Edit1.Text;
end;

//=============================================================================
//  ShellListView1のOnAddFolderイベント処理
//  指定拡張子だけをリストする
//=============================================================================
procedure TForm1.ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder;
  var CanAdd: Boolean);
var
  LExt : String;
begin
  LExt   := ExtractFileExt(AFolder.PathName);
  CanAdd := LowerCase(LExt) = '.msc';
end;

//=============================================================================
//  ShellListView1のOnClickイベント処理
//  選択したItemのフルパスをTEditにセット
//=============================================================================
procedure TForm1.ShellListView1Click(Sender: TObject);
var
  LItem   : TListItem;
  LFolder : TShellFolder;
begin
  LItem := ShellListView1.Selected;
  if LItem <> nil then begin
    LFolder := ShellListView1.Folders[LItem.Index];
    Edit1.Text := LFolder.PathName;
  end;
end;

end.




06_ShellExecute 関数等の引数  -  [ システム情報 ] ダイアログの例


ShellExecute,ShellExecuteEx 関数の引数のファイルのパスは多くの場合,フルパスでなくても動作します.上のサンプルコードではフルパスにしていますが,一般的に,システムフォルダにはパスが通っています.したがって以下のコードでもダイアログを表示できます.
CreateProcess 関数の場合は,このような省略はできません.


リスト4
ShellExecute 関数で「システム情報」ダイアログを表示する例
上のサンプルコードでは,%SystemRoot%\System32\ が省略可能な部分
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

//=============================================================================
//  [システム情報]ダイアログを表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  //%SystemRoot%\System32\は省略できる
  ShellExecute(Handle, 'open', 'msinfo32.exe', nil, nil, SW_SHOW);
end;

end.




07_IOpenControlPanel を使用したシステム関係ダイアログの表示


Windows Vista 以降では,IOpenControlPanel インターフェイスの Open メソッドを使用して,システム関係ダイアログを表示できます.IOpenControlPanel ではパス名は使いません.

次のサンプルは,[地域と言語] の設定ダイアログを表示する例です.
Open メソッドの第 1 引数には Canonical Names の Item の名前を,第 2 引数にはオプションを文字列で指定します.必要ない場合は nil にします.全ての引数を nil にすると,コントロールパネルを表示します.
IOpenControlPanel インターフェイスは Delphi 2010 以降で使用可能です.


図182
[地域と言語]

リスト5
IOpenControlPanel インターフェイスを使用したシステム関係ダイアログの表示
[地域と言語] の設定ダイアログを表示
//=============================================================================
//  IOpenControlPanelインターフェイスによるシステム関係ダイアログの表示例
//  ここでは[地域と言語]の設定ダイアログを表示
//
//  usesにShlObj, ActiveXが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LiOpenCtrlPnl : IOpenControlPanel;
  LCtrlPnlName  : String;
  LPage         : String;
begin
  //IOpenControlPanelのインスタンスを生成
  if Failed(CoCreateInstance(CLSID_OpenControlPanel,
                             nil,
                             CLSCTX_INPROC_SERVER,
                             IOpenControlPanel,
                             LiOpenCtrlPnl)) then exit;

  LCtrlPnlName := 'Microsoft.RegionalAndLanguageOptions';
  LPage        := '';
  LiOpenCtrlPnl.Open(PChar(LCtrlPnlName), PChar(LPage), nil);
end;


次のコードは [インストールされた更新プログラム] のダイアログを表示します.


図183
実行結果
  • [インストールされた更新プログラム] のダイアログ

リスト6
IOpenControlPanel インターフェイスを使用したシステム関係ダイアログの表示
[インストールされた更新プログラム] のダイアログを表示
//=============================================================================
//  IOpenControlPanelインターフェイスによるシステム関係ダイアログの表示例
//  ここでは[インストールされた更新プログラム]の設定ダイアログを表示
//
//  usesにShlObj, ActiveXが必要
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LiOpenCtrlPnl : IOpenControlPanel;
  LCtrlPnlName  : String;
  LPage         : String;
begin
  //IOpenControlPanelのインスタンスを生成
  if Failed(CoCreateInstance(CLSID_OpenControlPanel,
                             nil,
                             CLSCTX_INPROC_SERVER,
                             IOpenControlPanel,
                             LiOpenCtrlPnl)) then exit;

  LCtrlPnlName := 'Microsoft.ProgramsAndFeatures';
  LPage        := '::{D450A8A1-9568-45C7-9C0E-B4F9FB4537BD}';
  LiOpenCtrlPnl.Open(PChar(LCtrlPnlName), PChar(LPage), nil);
end;


上のコードは,CreateComObject を使用すれば次のように書けます.


procedure TForm1.Button2Click(Sender: TObject);
var
  LiOpenCtrlPnl : IOpenControlPanel;
  LCtrlPnlName  : String;
  LPage         : String;
begin
  //IOpenControlPanelのインスタンスを生成
  //CreateComObjectの使用にはusesにComObjが必要
  LiOpenCtrlPnl := CreateComObject(CLSID_OpenControlPanel) as IOpenControlPanel;

  LCtrlPnlName := 'Microsoft.ProgramsAndFeatures';
  LPage        := '::{D450A8A1-9568-45C7-9C0E-B4F9FB4537BD}';
  LiOpenCtrlPnl.Open(PChar(LCtrlPnlName), PChar(LPage), nil);
end;




08_[ システム設定の変更 ] ( 再起動 ) ダイアログ


システム関係のダイアログではありませんが,システム関係の設定を変更した時に,変更を反映するために Windows の再起動が必要な場合があります.この時に再起動を促すダイアログを表示する例です. Shell32.dll の序数 59 の非公開関数を使用しています.



図184
システムの再起動のダイアログ

リスト7
システムの再起動のダイアログを表示
  //---------------------------------------------------------------------------
  //  shell32.dllの序数59の名前なし関数を使用するための関数の定義.この関数の第3
  //  引数はExitWiddowExの引数と同じ.
  //  Delphiが関数類のヘッダ宣言を提供していない場合は,この様に利用者が定義して
  //  使用する
  //  この関数は非公開API関数
  //
  //  Shell32.dllを使用するにはusesにShellAPIが必要.
  //---------------------------------------------------------------------------
  SH_RestartDialog = function (Handle   : THandle;
                              lpPrompt : PChar;
                              uFlag    : Integer):Integer; stdcall;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  [システム設定の変更]ダイアログを表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LpPrompt     : PChar;
  LuFlage      : Integer;
  LSHRebootDlg : SH_RestartDialog;
  LhDllHandle  : THandle;
begin
  LpPrompt    := '';
  LuFlage     := EWX_REBOOT;
  LhDllHandle := LoadLibrary('shell32.dll');
  try
    LSHRebootDlg := GetProcAddress(LhDllHandle, PChar(59));
    if LSHRebootDlg(Handle, LpPrompt, LuFlage) = IDOK then begin
      //[はい]をクリックした時の処理
    end else begin
      //[いいえ]をクリックした時の処理
    end;
  finally
    FreeLibrary(LhDllHandle);
  end;
end;