[BlueLeaf1336]> PROBLEMS> DelphiでShellオブジェクトを使う>

Shellオブジェクト

historyTOP

2006/06/01:作成

2006/06/01TOP

とりあえず、誰でもできるところからはじめます。Shellオブジェクトのメソッドのうち、procedureタイプのもの、つまり、戻り値のないやりっぱなしの関数です。

画面のボタンひとつがそれぞれのメソッドひとつに対応しています。基本的に、スタートメニューとタスクバーから実行できるコトばかりです。数秒考えて、全てのボタンクリックのイベントでShellオブジェクトを作って、メソッドをひとつ実行してShellオブジェクトを捨てるようにしています。

実行結果は...やってみなくてもわかると思います。ただし、動作確認したのは、WindowsXPなので、Windows2000でどうなるかはわかりません。また、「PCの取り出し(EjectPC)」と「サスペンド(Suspend)」は実行しても何も起こりませんでした。

Level1.zip(166,861Bytes) ソースコードと実行ファイルです。

コードTOP

uses
    ComObj, Variants;

{$R *.dfm}

//  http://www2.moug.net/bbs/wordvba/20060517000002.htm
//  http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/043/043760.html
//  http://pc.2ch.net/tech/kako/1019/10196/1019654975.html
//  ms-help://MS.PSDK.1033/shellcc/platform/shell/reference/objects/shell/shell.htm

//  特殊フォルダを列挙
type
    TShellSpecialFolderConstants =
    (
        ssfALTSTARTUP = $1d,
        ssfAPPDATA = $1a,
        ssfBITBUCKET = $a,
        ssfCOMMONALTSTARTUP = $1e,
        ssfCOMMONAPPDATA = $23,
        ssfCOMMONDESKTOPDIR = $19,
        ssfCOMMONFAVORITES = $1f,
        ssfCOMMONPROGRAMS = $17,
        ssfCOMMONSTARTMENU = $16,
        ssfCOMMONSTARTUP = $18,
        ssfCONTROLS = $3,
        ssfCOOKIES = $21,
        ssfDESKTOP = $0,
        ssfDESKTOPDIRECTORY = $10,
        ssfDRIVES = $11,
        ssfFAVORITES = $6,
        ssfFONTS = $14,
        ssfHISTORY = $22,
        ssfINTERNETCACHE = $20,
        ssfLOCALAPPDATA = $1c,
        ssfMYPICTURES = $27,
        ssfNETHOOD = $13,
        ssfNETWORK = $12,
        ssfPERSONAL = $5,
        ssfPRINTERS = $4,
        ssfPRINTHOOD = $1b,
        ssfPROFILE = $28,
        ssfPROGRAMFILES = $26,
        ssfPROGRAMS = $2,
        ssfRECENT = $8,
        ssfSENDTO = $9,
        ssfSTARTMENU = $b,
        ssfSTARTUP = $7,
        ssfSYSTEM = $25,
        ssfTEMPLATES = $15,
        ssfWINDOWS = $24
    );

//-----------------------------------------------------------------------------
//  ウィンドウを重ねて表示
procedure TForm1.Button1Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.CascadeWindows;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  コントロールパネル実行
//  C:\Windows\system32\*.cpl を指定する
procedure TForm1.Button2Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.ControlPanelItem('desk.cpl');
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  PCの取り出し(if your computer supports this command)...意味不明
procedure TForm1.Button3Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.EjectPC;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  特殊フォルダをエクスプローラ表示
procedure TForm1.Button4Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.Explore(Integer(ssfMYPICTURES));
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  フォルダをエクスプローラ表示
procedure TForm1.Button5Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.Explore('C:\Windows\');
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  ファイル名を指定して実行...
procedure TForm1.Button6Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.FileRun;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  コンピュータを検索
procedure TForm1.Button7Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.FindComputer;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  ファイルやフォルダを検索
procedure TForm1.Button8Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.FindFiles;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  ヘルプとサポート
procedure TForm1.Button9Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.Help;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  デスクトップを表示
procedure TForm1.Button10Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.MinimizeAll;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  特殊フォルダを開く
procedure TForm1.Button11Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.Open(Integer(ssfMYPICTURES));
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  フォルダを開く
procedure TForm1.Button12Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.Open('C:\Windows\');
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  スタートメニューを最新の状態に更新
procedure TForm1.Button13Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.RefreshMenu;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  日付と時刻の調整
procedure TForm1.Button14Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.SetTime;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  終了オプション
procedure TForm1.Button15Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.ShutdownWindows;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  サスペンド(for computers that support suspending)
procedure TForm1.Button16Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.Suspend;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  ウィンドウを上下に並べて表示
procedure TForm1.Button17Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.TileHorizontally;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  ウィンドウを左右に並べて表示
procedure TForm1.Button18Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.TileVertically;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  タスクバーのプロパティ
procedure TForm1.Button19Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.TrayProperties;
    Shell := Unassigned;
end;

//-----------------------------------------------------------------------------
//  ウィンドウを元に戻す
procedure TForm1.Button20Click(Sender: TObject);
var
    Shell: OleVariant;
begin
    Shell := CreateOleObject('Shell.Application');
    Shell.UndoMinimizeALL;
    Shell := Unassigned;
end;

EOFTOP