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 インターフェイスを使用したサンプルを追加
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日の更新で,起動パス名を,ファイルから読み込むようにしました.パス名の先頭の以下の部分は省略可能です.これは実行ファイル名の場所を明確にするために付けているだけです.
64 ビット Windows で 32 ビットの EXE を実行した場合,上記のフォルダを指定しても実際には以下のフォルダ内を検索します.これはリダイレクトの機能によるものです.
図1
設計時画面
図2
コンパイルして実行
選択中の項目をダブルクリックするとダイアログを表示
copy code
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 .
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 診断ツール
%SystemRoot%\System32\control.exe /name Microsoft.iSCSIInitiator
図6
iSCSI イニシエータのプロパティ
%SystemRoot%\System32\NAPCLCFG.MSC
図7
NAP クライアントの構成
(ローカルコンピュータ)
%SystemRoot%\System32\odbcad32.exe
図8
ODBC データアドミニストレーター
%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 のシャットダウン
%SystemRoot%\System32\winver.exe
図22
Windows のバージョン情報
%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 ヘルプとサポート
図26
Windows ヘルプとサポート
%SystemRoot%\System32\slui.exe
図27
Windows ライセンス認証
%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
イベントビューア
下図のインターネットのプロパティの設定ダイアログは
%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
コントロールパネル
%SystemRoot%\System32\compmgmt.msc /s
図47
コンピュータの管理
下図のコンピュータの簡単操作センターは,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
サービス
%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
スクリーンセーバーの設定
%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
タスクスケジューラ
%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
ディスクの管理
%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
ネットワーク接続
control.exe hotplug.dll
rundll32.exe shell32.dll,Control_RunDLL hotplug.dll
図92
ハードウェアの安全な取り外し
%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
パフォーマンスモニター
%SystemRoot%\System32\control.exe /name Microsoft.FolderOptions
図100
フォルダオプション
rundll32.exe shell32.dll,Options_RunDLL 2
図101
フォルダオプション - 検索
rundll32.exe shell32.dll,Options_RunDLL 0
図102
フォルダオプション - 全般
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
ポリシーの結果セット
%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
ユーザーアカウント
ユーザ
%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
ローカルグループポリシーエディタ
%SystemRoot%\System32\secpol.msc
図125
ローカルセキュリティポリシー
%SystemRoot%\System32\lusrmgr.msc
図126
ローカルユーザとグループ
%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
画面の解像度
%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
共有フォルダ
%SystemRoot%\System32\shrpubw.exe
図139
共有フォルダの作成ウィザード
%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 7 の場合,デスクトップのポップアップメニューから [個人設定] で [ウィンドウの色] をクリックします.切替わったダイアログで [デザインの詳細設定] をクリックします.Windwos 8 / 8.1 にはこの設定はありません.
%SystemRoot%\System32\control.exe COLOR
図143
個人設定
デザイン
%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
保護者による制限
添付のリストにないダイアログの表示用コマンドです.%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
[ユーザーアカウントと家族のための安全設定] [資格情報マネージャー]
自動ログオン用の資格情報の格納
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 のリスト
copy code
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 .
ダイアログの表示のサンプルに,拡張子が .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 に付属のシェルコンポーネントを使用
copy code
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\ が省略可能な部分
copy code
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 インターフェイスを使用したシステム関係ダイアログの表示
[地域と言語] の設定ダイアログを表示
copy code
// =============================================================================
// 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 インターフェイスを使用したシステム関係ダイアログの表示
[インストールされた更新プログラム] のダイアログを表示
copy code
// =============================================================================
// 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 を使用すれば次のように書けます.
copy code
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
システムの再起動のダイアログ
copy code
// ---------------------------------------------------------------------------
// 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 ;