• ベストアンサー

プロセスが終了されたかどうか調べる関数を教えてください。

pussyfootの回答

  • pussyfoot
  • ベストアンサー率28% (39/138)
回答No.1

終了されたか調べるのではなくて終了するまで待つんじゃないでしょうか? VBで出来るんでCでも大丈夫だと思いますけど。 CreateProcessの引数で待ちみたいなのって無いのでしょうか?

関連するQ&A

  • 外部アプリケーションの呼び出し方

    現在VC++で環境ウィンドウズ2000でプログラミングを行っています。 メニュー画面上のボタンをクリックすると外部のアプリケーションを呼び出し作業したいと思っています。関数CreateProcessを使うとできるということまではわかったのですが、どうもうまくいきません。 下記のプログラムはメモ帳を呼び出すものでこれはうまくできました。 STARTUPINFO sin; PROCESS_INFORMATION pin; ZeroMemory( &sin, sizeof( STARTUPINFO ) ); ZeroMemory( &pin, sizeof( PROCESS_INFORMATION ) ); sin.cb = sizeof( STARTUPINFO ); sin.dwFlags = STARTF_USESHOWWINDOW; sin.wShowWindow = SW_SHOWNORMAL; if ( !CreateProcess( NULL, _T("notepad.exe C:\\foo.txt), NULL, NULL, FALSE, 0, NULL, NULL, &sin, &pin ) ) { // 起動失敗 } } 実際はデスクトップに置いてあるアプリケーションを呼び出したいと思っています。自分ではアプリケーション名の書き方等が間違っているのではないかと思っていろいろ試したのですが、どうもうまくいきません。 初心者で説明も不十分な点もあると思いますがどうかよろしくお願い致します。

  • アプリケーション起動について

    ひろと申します。 クライアントからサーバの共有フォルダにある、他のアプリケーションを オプション付きで起動させるプログラムをVC++で作成したのですが、 クライアントがNTだとうまくいきません。 たとえば、サーバ上にあるapp.exeを「app.exe /i」のような感じで 起動すると、クライアントがwin98の場合はアプリケーションが 表示されるのですが、NTから起動させようとすると、 アプリケーションは表示されません。 また、オプションを外すとアプリケーションは NTでも表示されます。 APIは、WinExec,ShellExecuteEx,CreateProcessで試したのですが 同じ結果でした。 CreateProcess は以下のように設定してます。 ------------------------------------------------------------------ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; CreateProcess(NULL, "serverpath\\app.exe /i", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); プロセスの起動は成功していうようです。 クライアントがNTの場合、他に必要な設定があるのでしょうか? よろしくお願いします。

  • 【C++】セマフォとプロセスの使い方

    【C++】セマフォとプロセスの使い方 WindowsXPでVC++2008コンパイラを使用して、 プロセスとセマフォについて勉強しています。 外部プログラム(今回は電卓として)を5つ立ち上げるのですが、 同時に立ち上げるのは2つまでとしたい場合、どのように組むのでしょうか。 http://nienie.com/~masapico/api_CreateSemaphore.html こちらにスレッドを使用したセマフォを使ったサンプルがあるのでが、 プロセスを使うとなると、うまく書けません。 ご指導頂けませんでしょうか。 ===現在まで書いたソース=== (5つのプロセスをつくるループも実装していませんが、、、) #include<windows.h> #include<stdio.h> #include<tchar.h> HANDLE g_hSemaphre; void main(){ BOOL bRet; STARTUPINFO si; PROCESS_INFORMATION pi; //Semaphoreオブジェクト g_hSemaphre = CreateSemaphore(NULL,2,2,NULL); bRet = CreateProcess(_T("C:\\WINDOWS\\system32\\calc.exe"), _T(""), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); //プロセス終了 WaitForSingleObject(pi.hProcess,INFINITE); //後処理(プロセス開放) ReleaseSemaphore(g_hSemaphre,1,NULL); //スレッドとプロセスを閉じる。 CloseHandle(pi.hThread); CloseHandle(pi.hProcess); //Semaphoreオブジェクト CloseHandle(g_hSemaphre); }

  • CreateProcess関数について

    ■CreateProcess関数で実行フアイル(.exe)を呼ぶプログラムを作成しています。 ■CreateProcess関数はプロセスを作成すると直に呼出側に戻って来るが、起動したプログラムの実行結果ではない。 ■その様な事を踏まえてプログラム下記にコーテイングしました(概要) ■「呼び出し側」も「呼び出される」もCD-ROM内に有ります。 ■問題はCreateProcess関数で呼んでから、実際に画像が表示されるまでに、時間が掛かる事です。、 ■「質 問」「やりたい事」 CreateProcess関数で呼んでから、実行画面が表示される時間の間に 「その旨のなんだかのメッセージを表示したい」 例えば、Webでのダウンロードやインストールの時の様な... この様な事を、実現するのはどの様にしますか、宜しくお願いします。 STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(CreateProcess(NULL,(LPTSTR)cmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){ CloseHandle(pi.hThread); //CD-ROMから直ぐ表示出来ない場合に備えて //この間で表示に時間を要している事をメッセージ出来ないか? ShowWindow(hWnd,SW_MINIMIZE);//タスクトレイに入れる。 WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); ShowWindow(hWnd,SW_RESTORE););//タスクトレイから出す。 }

  • 親プロセスの切り離し?

    USBメモリ内で動作するプログラムから、パソコンにインストールされているプログラムを起動後、USBメモリ内にあるプログラムは自動的に終了するようにしています。 この状態で、"ハードウェアの安全な切り外し"で、USBメモリを停止できるようにしたいのですが、何かいい方法はないでしょうか? 試しにメモ帳を利用する、次のコンソールプログラムを作って、USBメモリ内で起動したところ、やはりUSBメモリを停止することができませんでした。 -- #include <windows.h> int main(int argc, char* argv[]) { BOOL bRes; STARTUPINFO si={0}; PROCESS_INFORMATION pi={0}; si.cb = sizeof(STARTUPINFO); if(CreateProcess(NULL, "C:\\Windows\\notepad.exe C:\\a.txt", NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); bRes=TRUE; } return 0; } -- ※C:\\a.txtは適当なテキストファイルを作成して置いてます。 普段、秀丸エディタを使っているので、試しに "C:\\Windows\\notepad.exe C:\\a.txt" を "C:\\Program Files\\Hidemaru\\Hidemaru.exe C:\\a.txt" に変更した試したところ、USBメモリを停止することができました。 秀丸エディタだとUSBメモリを停止することができるので、起動される側のプログラムで何かすれば停止できるようになるとは思いますが、何をすればいいのかさっぱりわからず困っています。

  • CreateProcessでのウィンドウサイズの指定方法

    CreateProcessでプログラムを実行するようなプログラムを作成した際に表示されるウィンドウサイズを最大化したり最小化したりするのではなく、ある大きさにしたいのですが、うまくいかないのでご存知の方教えてください。 BOOL testProgram; STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si,0,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWDEFAULT; si.dwXSize = 500;  si.dwYSize = 400; // 例えばこんな風にサイズを指定したいのです testProgram = CreateProcess( NULL, "**.exe", // ここには具体的なものが入ります。 NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); if(testProgram!=TRUE)return FALSE; WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); このようなプログラムを書いてみたのですがうまくいきません。(プログラムは抜粋です) 何かいい方法ご存知の方教えていただけないでしょうか? よろしくお願いします。

  • C&C++から*.exeを呼ぶ方法の種類について

    C&C++から*.exeを呼ぶ方法として 私は今まで 1)CreateProcessを用いる方法 具体例は以下 ret = CreateProcess(NULL, "\"c:\\WINDOWS\\system32\\notepad.exe\" \"c:\\test.txt\"", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); でよんでいたのですが他に 方法はありますか??? あればできれば具体的に例でいいので簡単な ソースコード(API)をおしえてくださいm(___)m よろしくおねがいします。

  • createprocessで起動させる別.exeをモーダルで起動したい

    createprocessで起動させる別.exeをモーダルで起動したい お世話になります。 VC++6.0 MFCで開発しております。 現在A.exeのあるボタンを押すとcreateprocessでB.exeを起動させるようにしております。 B.exeを起動後、A.exeの画面表示をクリックするとA.exeがアクティブになるのです。 それを、B.exeが終了しないとA.exeがアクティブにならないように変更したいのですがどのようにすればよいでしょうか? 現状は PROCESS_INFORMATION pi; STARTUPINFO si; si.cb=sizeof(si); CreateProcess(実行EXEパス,コマンドライン,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); で起動しております。 また、実現不可能というお答えでもいいので教えていただければと思います。 お手数ですが何卒よろしくお願いします。

  • VC++ で.bat起動

    また、こちらを使わせていただきます。 VC++で.batファイルを起動しようとしていますが、cmdはあくのですが、.batが起動しません。他の参考にしてますが、なかなかたどり着きません。どなたか、アドバイスお願いいたします。 .bat fileは次のとおりです。 cd\Program Files\Wireshark> tshark -i.2 greater 170 -a duration:2 -w.... tshark -v-r e:\Test\test5.pcap.... VC++は次のとおり void CStartupapplicationView::OnBnClickedButtontest() { //cmdは、ShellExecuteでも、CreateProcessでも開けられますが、 //bat fileの起動がうまくいきません。 HINSTANCE ret = ShellExecute(m_hWnd,"open","cmd.exe",NULL,"c:\\Program Files\\Wireshark",SW_SHOWNORMAL); ShellExecute(m_hWnd,"open","c:Program Files\\Wireshark\\test.bat",SW_SHOW); //.batファイルは、c:Program Files\Wiresharkの下に入っています。//が、.Batは起動しません。 if (ret <= (HINSTANCE)32) AfxMessageBox("can not Shell.",MB_OK); //別の方法 STARTUPINFO sinfo; PROCESS_INFORMATION pinfo; ZeroMemory(&sinfo,sizeof(STARTUPINFO)); ZeroMemory(&pinfo,sizeof(PROCESS_INFORMATION)); sinfo.cb=sizeof (STARTUPINFO); sinfo.dwFlags=STARTF_USESHOWWINDOW; sinfo.wShowWindow=SW_SHOWNORMAL; if(!CreateProcess(NULL,_T("cmd.exe c:\\test2.bat "), // test2.batは、Document and settings/----------- //Startup applicationの下にはいっていますが、起動しません。 NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)); {//起動失敗 } //

  • VC++6.0からIEの起動ができない

    つぎのようなCodeを書きましたが、コメント行のようなnotepad.exeを指定すると起動できるのですがブラウザIE(iexplore.exe)を指定すると起動しません。  省略 STARTUPINFO si; PROCESS_INFORMATION pi; char buf[256]; LPTSTR lpCommandLine; strcpy(lpCommandLine,"iexplore.exe d:\\data\\update.html");  //strcpy(lpCommandLine,"notepad.exe d:\\data\\update.html");  //  strcpy(buf,lpCommandLine); ZeroMemory( &si, sizeof( STARTUPINFO )); si.cb = sizeof( STARTUPINFO ); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; BOOL t=CreateProcess( NULL, lpCommandLine, // コマンドライン文字列 NULL,NULL,FALSE, 0, NULL, NULL, &si, &pi)) // //起動したプロセスの終了を待たない場合 CloseHandle(pi.hThread); CloseHandle(pi.hProcess); :  省略 なを、「スタート」メニューの「ファイル名を指定して実行」に「iexplore.exe d:\data\update.html」を指定すれば起動します。 以上です。よろしくお願いします。