| 外部アプリケーションの起動 | BCB Tips! Last modified : 2006/07/14 |
HINSTANCE ShellExecute(
HWND hwnd, // 親ウィンドウのハンドル
LPCTSTR lpVerb, // 操作(NULL, edit, explore, open, print, properties)
LPCTSTR lpFile, // 操作対象のファイル
LPCTSTR lpParameters, // 操作のパラメータ
LPCTSTR lpDirectory, // 既定のディレクトリ
INT nShowCmd // 表示状態
);
参考:ShellExecute (MSDN Japan)
// --- メモ帳の起動
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
HWND hWnd = Handle;
HINSTANCE rVal;
AnsiString msgStr;
rVal = ShellExecute(hWnd, "Open", "notepad.exe","c:\\autoexec.bat", "", SW_SHOWNORMAL);
if((int)rVal <= 32){ // 失敗は 32以下の値が返る、整数型(int)にキャストして比較する
msgStr.printf("failed to ShellExecute(). ENO=%d", (int)rVal);
MessageDlg(msgStr, mtWarning, TMsgDlgButtons() << mbOK, 0);
}
}
// --- その他
ShellExecute(0, "Open", "Calc.exe", "", "", SW_SHOW); // 電卓の起動
■ 関連付けられたアプリケーションの起動
// --- メーラーの起動
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
AnsiString str="mailto:XXXXX?subject=Sample&body=Hey!\n";
ShellExecute(0, "open", str.c_str(), NULL, NULL, SW_SHOWNORMAL);
}
// --- ブラウザの起動
ShellExecute(0, "Open", "http://www.yahoo.co.jp/", NULL, NULL, 0);
BOOL CreateProcess( LPCTSTR lpApplicationName, // 実行可能モジュールの名前 LPTSTR lpCommandLine, // コマンドラインの文字列 LPSECURITY_ATTRIBUTES lpProcessAttributes, // セキュリティ記述子 LPSECURITY_ATTRIBUTES lpThreadAttributes, // セキュリティ記述子 BOOL bInheritHandles, // ハンドルの継承オプション DWORD dwCreationFlags, // 作成のフラグ LPVOID lpEnvironment, // 新しい環境ブロック LPCTSTR lpCurrentDirectory, // カレントディレクトリの名前 LPSTARTUPINFO lpStartupInfo, // スタートアップ情報 LPPROCESS_INFORMATION lpProcessInformation // プロセス情報 );参考:CreateProcess (MSDN Japan)
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
BOOL rVal;
AnsiString msgStr;
AnsiString appl = "notepad.exe c:\\autoexec.bat"; // メモ帳
STARTUPINFO si;
PROCESS_INFORMATION pi; // プロセスのハンドル
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
// --- プロセスとスレッドの作成
// si.dwFlags = STARTF_USESHOWWINDOW; // 非表示で実行させる場合
// si.wShowWindow = SW_HIDE;
rVal = CreateProcess(NULL, appl.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
if(rVal == 0){
msgStr.printf("failed to CreateProcess(). rVal=%d LE=%d", rVal, GetLastError());
MessageDlg(msgStr, mtWarning, TMsgDlgButtons() << mbOK, 0);
return;
}
// --- プロセスの終了を待つ
WaitForSingleObject(pi.hProcess, INFINITE);
// --- プロセスとスレッドの終了
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
参考:CreateProcessによるプログラム起動と制御 (創作プログラミングの街)