○ファイルを起動

■プロセスを実行します。

#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++