2012-03-20 13 views
0

私はこのコード部分を使用して、自分のプログラム(スクリーンショットを作る)にコマンドを生成させ、終了(閉じる)するよう指示します。これは、 "gimp"やユーザが使用したい別のイメージエディタを起動するなど、自分のプログラム内のキーを使ってプログラムに切り替えるために使用できます。例えばシェルコマンドを実行する(c)

case SWITCH_TO: 
    if(arg) { 
     char commandline[ 256 ]; 
     snprintf(commandline, sizeof (commandline), "%s &", arg); 
     system(commandline); 
     cmd->quit = 1; 
    } 
    break; 

使用:

program-command SWITCH_TO "gimp" 

は、私のプログラム呼び出しシステム( "GIMP &")を持っている(近い)自体を終了してGIMPを実行します。

program-command SWITCH_TO "fotoxx" 

は、私のプログラム呼び出しシステム( "fotoxx &")を持っている(近い)自体を終了してfotoxxを実行します。 "programline command SWITCH_TO"が実行されず、プログラムが閉じられていない( "cmd-> quit = 1")場合、私のプログラムは "commandline"が有効かどうか($ PATHにアプリケーションがあるかどうか)これを行う、プログラムを終了する)。

おかげ

+0

プログラムを起動したいのであれば、私はexecファミリー、http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html に行くだろうが、プログラムはすでに生きているはずだから、私はエグゼクティブとシステムのどちらにも属しません。 –

+0

"プログラムで切り替えたいアプリケーションが存在するかどうかを確認したいのですが、そうでない場合は、"プログラムコマンドSWITCH_TOは何もしないでプログラムを実行し続けますか? –

+0

これはあなたを助けるかもしれません:http://stackoverflow.com/questions/1014822/how-to-know-which-window-has-focus-and-how-to-change-it –

答えて

1

は、初期解として、あなたはsystem()呼び出しの戻り値のチェックを追加してみてくださいすることができます。

エラーが発生した場合は-1、実行するプログラムの戻り状況は-1になります。子プロセスを取得するのに&を使用すると後者の動作が不明です。それがあなたの親から十分に子供を切り離すかどうかも確かではありません。もしそうでなければ、あなたはあなたの申請をやめるときに子供は終わります。

他の人が示唆しているように、fork()exec()の呼び出しを参考にしてください。あなたはexec()からの平文を使用して、あなたのプロセスをのプログラムに置き換えることができます。それが失敗してもまだ実行されているので、その場合は終了フラグを設定する必要はありません。

関連する問題