○ファイルを起動
■プロセスを実行します。
#include <stdio.h>
#include <process.h>
int main()
{
int hProcess = spawnl(_P_WAIT, "c:/WINNT/system32/ping", "ping", "localhost", NULL);
//_P_WAIT : 子プロセスの終了まで待機
//_P_OVERLAY : 親プロセスを破棄して子プロセスを上書き
//spawnl 引数の数が固定
//spawnv 引数の数が固定ではない
return 0;
}
■プロセスを実行し結果を取得。
//"r" 呼び出されたコマンドの標準出力を読み取ることができます。
//"w" 呼び出されたコマンドの標準入力に書き込むことができます。
//Windows プログラムで使用すると、無効なファイル ポインタが返され、プログラムがハングアップします
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE * fp;
if((fp=_popen("dir","r"))==NULL){
//書き込みもしくは読み込みモードのどちらかでしか開けません
printf("err");
//エラー処理
}else{
//注意 コンソールではすべての文字を取得してからでないと書き込めません
char buff[128]="";
//標準出力を取得
while( !feof(fp) )
{
if( fgets( buff,128,fp) != NULL ) printf(buff);
}
//標準入力にコマンドを書き込む
//fprintf(fp,"%s","dir\r\n");
//fflush(fp);//バッファをフラッシュ
//書き込みモードの標準出力は自分のコンソールに表示されます
fclose(fp);
}
return 0;
}
処理結果
ドライブ C のボリューム ラベルは ***** です
ボリューム シリアル番号は ***** です
**** のディレクトリ
2004/12/01 08:40 <DIR> .
2004/12/01 08:40 <DIR> ..
2004/12/01 08:40 533 a.dsw
2004/12/01 08:40 25,600 a.ncb
2004/12/01 08:40 <DIR> Debug
2004/12/01 08:51 1,232 a.plg
2004/12/01 08:49 4,208 a.dsp
2004/12/01 08:51 529 s.cpp
2004/12/01 08:52 48,640 a.opt
6 個のファイル 80,742 バイト
3 個のディレクトリ 3,377,463,296 バイトの空き領域
○APIを使う方法
■Windowアプリケーションを起動させる
#include <stdio.h>
#include <windows.h>
int main(int count,char *args[]){
STARTUPINFO si;// スタートアップ情報
PROCESS_INFORMATION pi;// プロセス情報
//STARTUPINFO 構造体の内容を取得
GetStartupInfo(&si);
//見えない状態で起動させるには、
//si.dwFlags = STARTF_USESHOWWINDOW;
//si.wShowWindow = SW_HIDE;
CreateProcess(
NULL, // 実行可能モジュールの名前
"c:\\WINNT\\notepad.exe c:\\test.txt", // コマンドラインの文字列
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
FALSE, // ハンドルの継承オプション
NULL, // 作成のフラグ
//CREATE_NEW_PROCESS_GROUP : 新たなプロセス
NULL, // 新しい環境ブロック
NULL, // カレントディレクトリの名前
&si, // スタートアップ情報
&pi // プロセス情報
);
//プロセスの終了を待機する
//CloseHandle(pi.hThread);
//WaitForSingleObject(pi.hProcess,INFINITE);
//CloseHandle(pi.hProcess);
return 0;
}
■コンソールアプリケーションを起動させる
#include <stdio.h>
#include <windows.h>
int main(int count,char *args[]){
STARTUPINFO si;// スタートアップ情報
PROCESS_INFORMATION pi;// プロセス情報
//STARTUPINFO 構造体の内容を取得
GetStartupInfo(&si);
CreateProcess(
NULL, // 実行可能モジュールの名前
"ping localhost", // コマンドラインの文字列
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
FALSE, // ハンドルの継承オプション
NULL, // 作成のフラグ
//CREATE_NEW_PROCESS_GROUP : 新たなプロセス
//CREATE_NEW_CONSOLE : 新しいコンソールで実行
//CREATE_NO_WINDOW : コンソールウィンドウなしでアプリケーションを実行
NULL, // 新しい環境ブロック
NULL, // カレントディレクトリの名前
&si, // スタートアップ情報
&pi // プロセス情報
);
//プロセスの終了を待機する
//CloseHandle(pi.hThread);
//WaitForSingleObject(pi.hProcess,INFINITE);
//CloseHandle(pi.hProcess);
return 0;
}
■バッチファイルを起動させる
#include <stdio.h>
#include <windows.h>
int main(int count,char *args[]){
STARTUPINFO si;// スタートアップ情報
PROCESS_INFORMATION pi;// プロセス情報
//STARTUPINFO 構造体の内容を取得
GetStartupInfo(&si);
CreateProcess(
NULL, // 実行可能モジュールの名前
"cmd.exe /c c:\\test.bat", // コマンドラインの文字列
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
FALSE, // ハンドルの継承オプション
CREATE_NO_WINDOW, // 作成のフラグ
//CREATE_NEW_PROCESS_GROUP : 新たなプロセス
//CREATE_NEW_CONSOLE : 新しいコンソールで実行
//CREATE_NO_WINDOW : コンソールウィンドウなしでアプリケーションを実行
NULL, // 新しい環境ブロック
NULL, // カレントディレクトリの名前
&si, // スタートアップ情報
&pi // プロセス情報
);
//プロセスの終了を待機する
//CloseHandle(pi.hThread);
//WaitForSingleObject(pi.hProcess,INFINITE);
//CloseHandle(pi.hProcess);
return 0;
}
■VBScriptを起動
#include <stdio.h>
#include <windows.h>
int main(int count,char *args[]){
STARTUPINFO si;// スタートアップ情報
PROCESS_INFORMATION pi;// プロセス情報
//STARTUPINFO 構造体の内容を取得
GetStartupInfo(&si);
CreateProcess(
NULL, // 実行可能モジュールの名前
"wscript c:\\test.vbs", // コマンドラインの文字列
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
FALSE, // ハンドルの継承オプション
NULL, // 作成のフラグ
//CREATE_NEW_PROCESS_GROUP : 新たなプロセス
//CREATE_NEW_CONSOLE : 新しいコンソールで実行
//CREATE_NO_WINDOW : コンソールウィンドウなしでアプリケーションを実行
NULL, // 新しい環境ブロック
NULL, // カレントディレクトリの名前
&si, // スタートアップ情報
&pi // プロセス情報
);
//プロセスの終了を待機する
//CloseHandle(pi.hThread);
//WaitForSingleObject(pi.hProcess,INFINITE);
//CloseHandle(pi.hProcess);
return 0;
}
▲トップページ
>
Windows と C++