• 締切済み

ShellExecute で file://... をオープン

VC++, MFC を使ってプログラムを書いています。 ShellExecute で file://C:/TEMP/foobar.exe?foo=bar をオープンすると、ちゃんと foobar.exe が起動されますが、クエリーの部分(foo=bar)の情報を取る方法がわかりません。 GetCommandLine で帰る文字列は foobar.exe までしかない。 GetEnvironmentStrings で帰る環境変数にも含まれない。 ? 以降の部分の文字列を取得する方法は無いのでしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ShellExecuteなら4番目の引数 lpParametersに "foo=bar"を渡すべきでは無いでしょうか lpFileにEXEファイルのパスを渡して ShellExecute( hWnd, "open", "exeのパス", "foo=bar", NULL, SW_SHOW ); といった具合では ・・・

daneel
質問者

補足

すみません。情報不足でした。 ShellExecute を実行する側のプログラムには手を入れられないのです。 今の一般的なテキストエディターとかメールのエディター・ビューワーには、file://... をオープンする機能がありますが、その機能の実現には たいてい ShellExecute が使われているのではないか、と想像しています。 それら一般のプログラムから起動されたときに、foobar.exe のプロセスが ? 以降の文字列を取得する方法はないんだろうか、と思った次第です。

関連するQ&A

  • ShellExecute関数について(初心者です)

    VC++初心者です。 関数を調べていて「おお!、これはいい」と思ったのが、ShellExecute関数です。 それで自作プログラムで使用したのですが・・・・うまくリンクできません。 プロジェクトの設定は「MFCを使用しない」で、自作しております。 教えて頂きたい事は、 (1)「MFCを使用しない」で、うまくリンクしてShellExecute関数を使用するためのプログラミング方法です。 (2)うまくできない場合に(あるいは将来のため)に備えて「MFCのスタティック・ライブラリを使用」で、リンクする方法も教えて下さい。 もう一つ教えて頂きたいのですが、ウインドウハンドラというものは、クリエイトしたウインド(1つ)と同じ物を渡せば良いのでしょうか。 宜しくお願い致します。

  • javascript「連結難しい」

    // ---------------------------------------- // [文字列 - 連結3] // ---------------------------------------- // 文字列fooとbarを連結して出力してください let foo = "Hello "; let bar = "World"; console.log(); console.log("foo"+"bar");は違います。文字列fooとbarする方法は何でしょうか。

  • ファイルの特定行を取り出したい.

    こちらのサイトを参考にさせていただきました. http://www.namaraii.com/rubytips/?%A5%D5%A5%A1%A5%A4%A5%EB%A5%A2%A5%AF%A5%BB%A5%B9 やりたいことはファイルにアクセスして2行目,3行目の文字列をとってくることです. ===foo=== hoge hige foobar File::open("foo") {|content|  puts content.readlines[1]  puts content.readlines[2] } このようなプログラムだと, hige nil となります.ですが,以下のように分割するとうまくいきます. File::open("foo") {|content|  puts content.readlines[1] } File::open("foo") {|content|  puts content.readlines[2] } hige foobar できればopenは一回だけで済ませたいのですが可能でしょうか? Ruby初心者なのでくだらない質問かもしれませんが,ご教授ねがいます.

    • ベストアンサー
    • Ruby
  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • 文字列の変換

    超 C++ 初心者です。 コンソールで "Hello, world!" を学んでからニ,三ヶ月程度です。 C++ の string クラスのメンバ関数 c_str() を用いることで /**  * string(C++ の文字列)から C の文字列(文字配列)を取り出し  * その先頭のアドレスを返す  */ ということができるのを学びました。 今 C++ の string および VC++ の CString の変換をしたいと思っています。 例えば VC++ で MFC アプリケーションを作っているとき, C++ の string である temp を VC++ の CString として使えるように するには,どういう手段をとればよいのでしょうか。 逆に VC++ の CString である temp を C++ の string として使うとき の方法もご教授ねがえれば幸いです。 超初心者につき,方法があまりにも難しいようでしたら断念することも考えています。

  • カンマで区切った文字の抽出について

    環境 WIN98 VC++6.0 MFC にて ”あああ,いい,うえお” のようにカンマで区切った文字列を ”あああ” と ”いい” と ”うえお” のように取り出し変数に格納したいのですが、どのようにすれば良いのでしょうか? MFCの便利な関数があればお教えください。

  • Visual C++からpingを実行してその結果を得る方法

    Visual C++からpingを実行してその結果を得る方法を教えてください。 ICMPのパケットを送出するプログラムが書ければいいのですが、 MFCを使うとTCP, UDPを使うことになるので、この方法は取れないように 思われます。あとは、ping.exeをShellExecute()で実行することも 考えられますが、pingの実行結果(コンソールに出力された文字列)の 取得方法が分かりません。よろしくお願いします。

  • 前の入力が消えない

    JScriptで次の関数を作りました。 function foo(arg) {  var WshShell = new ActiveXObject("WScript.Shell");  var oExec = WshShell.Exec("abc.exe");    oExec.StdIn.Write(arg);  oExec.StdIn.Close();    var s = oExec.StdOut.ReadAll();    oExec.terminate();    return s; } 待機などの処理は、実際にはありますが、ここでは省いてあります。 これはabc.exe命令を実行し、その標準入力に文字列argを与え、その標準出力を得ます。 一度目は問題ありません。 二度目は、一度目の文字列に追加した結果が出ます。つまり 一度目 arg="FOO" 結果は、希望通り 二度目 arg="BAR" 結果は、まるでarg="FOOBAR"であるように動作する。 対症療法でも良いので、何か方法はないでしょうか。

  • 【VC++6.0(MFC)】CString型の変数から数字部分を取り出すには?

    いつも大変お世話になっています。 VC初心者です。 現在、VC++6.0(MFC)でコーディングしております。 早速ですが、有識者の方がいらっしゃいましたら ご教授頂きたくお願いします。 ===質問=== CString型変数に以下のような数値を含む文字列から 数値部分だけを取り出すにはどうやってソースを 組めば宜しいでしょうか? ===例01=== CString cs1 = "2009年7月29日"; この文字列から "2009","7","29"を取得したい ===例02=== CString cs2 = "AM10:00:00 -0.4℃"; この文字列から "10","0","0","-0.4"を取得したい 以上、よろしくお願いします。

  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------