2012-02-14 13 views
0

のためにCで簡単なシェルを作成しようと、私は、MSDNのドキュメントhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspxに与えられたデモコードを経て、私はあなたがCreateProcess機能で実行するargv[]コマンドを取得する方法を知っていたかどうかを知りたいと思った...とき私はあなたが必要と、私は次のスニペットを試した後、私はちょうどあなたが投稿、リンクの例のように実行可能Win32 APIの

if(!CreateProcess(NULL, 
     argv[1],   
     NULL,   
     NULL,   
     FALSE,   
     0,    
     NULL,   
     NULL,   
     &pi)   
    ) 
+0

要するに、私は作成プロセスにdirのようなコマンドライン引数を渡すのですか? –

答えて

1

Dirはcmd.exeが実行するコマンドです。 CreateProcessで実行できるプログラムではありません。だから、あなたが望むことをするには、cmd.exeを起動し、コマンドラインに "dir"を渡す必要があります。これを行う最も簡単な方法はシステム機能です。あなたのプログラムは次のようなものになります。もちろん

#include <process.h> 

int main(int argc, char *argv[]) 
{ 
    system(argv[1]); 
} 

を、あなたは、エラーチェックを追加する必要があるが、これは、あなたが欲しいものを行う必要があります。

ここに、CreateProcessを使用した実例があります。/kフラグは、コマンド実行後に開いたままにするようにcmd.exeに指示します。コマンドを実行して終了するには、/ kを/ cに変更します。

#include <windows.h> 

void main() 
{ 
    STARTUPINFO si; 
    PROCESS_INFORMATION pi; 

    memset(&si, 0, sizeof(si)); 
    si.cb = sizeof(si); 

    CreateProcess(NULL, 
       "cmd.exe /k dir", 
       NULL,   
       NULL,   
       FALSE,   
       CREATE_NEW_CONSOLE,    
       NULL, 
       NULL,   
       &si,   
       &pi);   
} 
+0

このプログラムを実行すると、どこに "dir"と入力すればいいですか?また、私はcreate processを使用している理由で、これらのコマンドを新しいプロセスで実行することになっています。 –

+0

プログラムのコマンドラインに "dir"と入力します。したがって、プログラムの名前がfoo.exeの場合は、 "foo dir"と入力します。システム関数は新しいプロセスを作成するので、あなたはそれをうまく使います。 –

+0

はしようとします...ありがとうござい場合(のCreateProcess(C:!\ ... \ CMD.EXE、 ARGV [1]、 NULL、NULL 、 FALSE、 0、 NULL、NULL 、 &パイ)は動作しますか? –

0

を取得した後にディレクトリを入力しようとすると失敗し、それがプロセスを作成すると言う、ファイルを実行してみてください2番目の最後のパラメータとしてSTARTUPINFOへのポインタ。コマンドライン引数は2番目のパラメータとしてCreateProcessに渡されます。 CreateProcessのドキュメントを参照してください。

+0

oh ..yeah ..私もそうしました...私はSTARTUPINFO siを使って、&sをCreate Process関数に渡しました...実行するプログラムのコマンドライン引数をどこに入力すればよいかわかりません。 –

+0

私は、このプログラムをビルドし、clコンパイラでコンパイルすると、私はオブジェクトファイルと.exeを取得し、私は.exeを実行しますが、どのようにプログラムをシェルとして機能し、 "dir"を実行するか尋ねます。 –

+0

@maya:batファイルまたはwindowsコマンドライン – Necrolis

関連する問題