外部アプリケーションの起動 | 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によるプログラム起動と制御 (創作プログラミングの街)