• 締切済み

ShellExecuteのコマンドについて

すみません、どなたか教えてください。 下記のコマンドですが、 ShellExecute(null,"open","cmd.exe","実行したいもの",NULL,SW_HIDE); "実行したいもの" の書き方なんですが、 "/c c:\\work\\test.bat" のように書くと、cmd.exeにtest.batを実行させることができたんですが、 実行したいtest.batが指定できず、変数でセットする場合の書き方が分かりません。 ShellExecute(null,"open","cmd.exe","/c c:\\work\\test.bat",NULL,SW_HIDE); ↓ ShellExecute(null,"open","cmd.exe","/c c:\\work\\ "" & 変数 & "",NULL,SW_HIDE); こんな感じだと思うのですが、変数をダブルクォーテーションで囲むときに、ダブルクォーテーションをいくつ重ねるのかが分かりません。ググっているのですが、どこを調べていいのか分からず、はまっています。どなかたアドバイスお願いします。C++です。

みんなの回答

  • hue2011
  • ベストアンサー率38% (2800/7250)
回答No.2

こういうことはなぞでも何でもなく、仕様が公開されているのだからちゃんと読んでください。 どこを調べていいのか分からないというのはおかしいでしょう。 Microsoftの情報を転載します。 HINSTANCE ShellExecute( HWND hwnd, // 親ウィンドウのハンドル LPCTSTR lpVerb, // 操作 LPCTSTR lpFile, // 操作対象のファイル LPCTSTR lpParameters, // 操作のパラメータ LPCTSTR lpDirectory, // 既定のディレクトリ INT nShowCmd // 表示状態 ); なんでlpFileにパラメータをコンカチしようとしているのですか。 バッチ実行のシステムはどうなっているのでしょうか。 バッチは、コマンドラインの処理をそのまま記載してファイル化し、それをCMDに実行させるものではないでしょうか。 だったらバッチファイルがなければ実行なんてできないでしょう。 memoかなにかで処理自体を作成し、savetofileした上、そのバッチファイルを渡さなければいけないでしょう。 そして実行後そのバッチファイルを削除すればいいのです。

u95059j
質問者

お礼

すみません、アドバイスと叱咤激励?ありがとうございました! ちょっと時間に追われていて、頭がパニックに陥り、「どこをどうしらべていいのか分からない」などといったことを書いてしまいました。もう少し落ち着いて、ググって調べたいと思います。ありがとうございました!

noname#212058
noname#212058
回答No.1

投稿するカテゴリを以下に変えて、再質問したほうが良いです。 [技術者向] コンピューター ⇒ プログラミング ⇒ C・C++ なお、質問者さんの書かれたプログラムは C++ と Visual Basic の記法が混じっていますので、動きません。正しい記法は上記カテゴリで聞いてください (私は C++ は自信がないのでパス)。

関連するQ&A

  • ShellExecuteでDOSコマンド実行したら...

    VC++6.0においてShellExecuteでDOS窓をたち上げてコマンドを 実行したいのですが、うまくいきません。 1.ShellExecute(m_hWnd,"open","command.com","dir",NULL,SW_SHOW); ...とすると”指定された COMMAND 検索ディレクトリが違います.”となり、 なにも実行されません。 2.ShellExecute(m_hWnd,"open","command.com","dir /?",NULL,SW_SHOW); ...とするとちゃんとdirのヘルプが表示されますが、すぐに窓が閉じます。 3.ShellExecute(m_hWnd,"open","command.com","dir /? > out.txt",NULL,SW_SHOW); ...としてもファイルが作られず、2.と全く同じ結果になってしまいます。 これはどうしてこのような現象が起きるのでしょうか? DOSプロンプトをたち上げて同様なコマンドを実行した場合はちゃんと期待通りの結果が得られます。 あと、DOS窓が閉じないようにするにはどうすればいいのでしょうか?

  • 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)); {//起動失敗 } //

  • ShellExecuteの使い方について

     既存のプログラム(他の人が作成したもの)を参考にプログラムを作成しましたが、どうしても、希望通りの挙動となりません。ShellExecuteの部分が要点と思いますので、その点について教えてください。言語は JavaScript です。  以下のような記述がありました。 ---- var launcher = new ActiveXObject("Shell.Application"); launcher.ShellExecute(cmd, param, "", "open", "1"); ----  ShellExecute の引き数の cmd は、実行ファイル名(ファイルパス付)、param は実行ファイルの引き数です。これはこれで動いています。  さて、これを参考に、cmd の部分にDOSコマンドを与えました。すると、DOSコマンドは実行されたものの、実行の瞬間に黒いウィンドウ(おそらく、コマンドプロンプトと思われます)が一瞬表示されました。この黒いウィンドウを表示させずにDOSコマンドを実行させたいのですが、引き数を調整することでそのようなことは可能でしょうか。  Webで調べたところ、ShellExecute の引き数として SW_SHOWNORMAL や SW_MAXIMIZE などを与える方法もあるようですが、SW_*** を紹介しているWebページでは、そもそも引き数の個数が上記と異なっていたりします。  ご助言をお願い致します。

  • ShellExecuteのことで。

    はじめまして。 最近c言語のプログラミングを始めて、 cでフォルダを開くプログラムをテストしていましたら、 あるフォルダだけ、エラーが発生して、開けません。 フォルダのほうも色々見たのですが、 どうしてもわからないのでどなたか教えてください。 普通に開けたときは33だったのですが 開けなかったフォルダでの戻り値は42でした。 #include<stdio.h> #include<windows.h> int main(void){ HINSTANCE a; a=ShellExecute(NULL,"open","test",NULL,"D:\\",SW_SHOWNORMAL); printf("return = %d",a); return 0; }

  • ShellExecuteで外部アプリを起動したい

    こんにちは。 ShellExecuteを使って外部アプリを起動するために、 ShellExecute(NULL,NULL,"Program Files/XWaveClient/XWavePDA.exe",NULL,NULL,SW_SHOWNORMAL); というコードをかいているのですが、この行で  error C2065: 'ShellExecute' : undeclared identifier というコンパイルエラーがでてしまい、困っています。 ShellExecuteを使うためにはなにかヘッダファイルを includeしなくてはならないのでしょうか? 環境は、eVC++4.0です。 よろしくお願い致します。

  • PATHを効かせてコマンド実行したい

    コンソールコンパイラランチャのアプリケーションを作っているのですが、 command.comの設定でつまずいてしまいました。 やりたいことは 1.コンパイラのパスを設定する 2.コンパイルコマンドをパラメータ付きで実行する の2ステップなんですが、ShellExecuteを使って別々なら出来るんですけど、 下記の方法では1.のパス設定が2回目のShellでは無効になってしまいます。 なにか良い方法はないでしょうか? ShellExecute(NULL,"open","command.com", "/c set PATH=%PATH%"+m_strCompPath,NULL,SW_SHOW); ShellExecute(NULL,"open","command.com", "/k "+CommandString,NULL,SW_SHOW); 環境はVC++6.0,MFCです。

  • データベースのオープンエラーが発生

    WindowsVista SP1にてメニューから特定のプログラムを実行すると Accessデータベースのオープンにてエラーが発生します。 言語はVB6.0です。 メニューからShellExecute "runas"にて実行を行うとAccessデータベースのオープンにて 実行時エラー3051が発生します。 EXEをダブルクリックしたり、Shellにて実行した場合は正常にオープンされます。 lngLoadPgm = ShellExecute(0, "runas", "C:\WORK\TEST.EXE", "", vbNullString, 1)  NG lngLoadPgm = Shell("C:\WORK\TEST.EXE", vbNormalFocus)               OK 原因がまったくわかりません。 わかる方がいましたら教えて下さい。 よろしくお願いします。

  • ShellExecuteをつかって・・・

    もしかしたら非常に簡単な問題かもしれないんですけど、 SDIベースでShellExecuteをつかって以下のような関数を作ってコンパイルすると、 ”error C2065: 'm_hWnd' : 定義されていない識別子です。” がでます。 前に別プロジェクトでやったときは特に定義せず使えたような気がするのですが、 何か使い方が間違っているのでしょうか? #include "stdafx.h" #include "FCwin.h" #include "MainFrm.h" #include "FCwinDoc.h" #include "FCwinView.h" ・・・中略・・・ int CFCwinApp::DosFcExe() { HINSTANCE ret = ShellExecute(m_hWnd,"open","command.com",NULL,"c:\\",SW_SHOW); if((int)ret <= 32 ){AfxMessageBox("DOS窓開けません",MB_OK);return 1;} return 0; }

  • VC++ Express m_hWnd

    VC++ Express edition 2008で、Command Promptを起動、directoryを替えようとして、 HINSTANCE ret = ShellExecute(m_hWnd,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW) で、m_hWndが定義されていないとエラーが出てきました。VC++2005 standard version では出るようですが、Express edition 2008では定義されてないようです。この部分、Expression editionではどのように定義するのか教えてください。2008 Express editionで別の変数が適当であれば、そちらを教えていただけませんか?

  • ShellExecuteについて質問です。

    ShellExecuteについて質問です。 ShellExecuteで関連づけられている画像ビューワを起動させたいと考えています。 (自分のマシンの場合、画像とFAXビューワが立ち上がります。) 画像はネットワークディスク上にあります。 以下コードです。 sPASS = ”画像のフルパス" lRet = ShellExecute(0, "open", sPASS, vbNull, vbNull, SW_NORMAL) しかし、ネットワーク上の他のマシンに画像ビューワが起動しないものがあります。 動作環境はAccess2000で、VBAで構築しています。 調べた結果、C:\WINDOWS\system32\shell32.dllは入っていました。 テスト結果は3台中、1台が起動しません。 何が原因しているのでしょうか? アドバイスよろしくお願いいたします。

専門家に質問してみよう