DelphiでのURL実行方法についての質問

このQ&Aのポイント
  • DelphiでのURL実行方法についての質問です。前回の質問で教えていただいた方法を試しましたが、特定のURLではうまくいかない問題が発生しました。
  • 特定のURLでの問題として、ダブルコーテーションが実行させると消えてしまい、目的のページにうまく飛べない状況です。
  • ダブルコーテーションを残すためには、どのようにすればよいのでしょうか?
回答を見る
  • ベストアンサー

Delphi URLを実行するときに

前回の質問で教えていただいた ソフト上からURLを実行する方法で 1.uses節にShellapiを追加 2.Edit1にURLを記述 3.Edit1のOnClickイベントに ShellExecute(handle, 'open', pchar(Edit1.Text), '', '', sw_shownormal);と記述 4.起動してEdit1欄をクリックしてみてください。 この場合でほとんどのURLではうまくいったのですが http://○○○○"USER"○○の場合の ダブルコーテーションが実行させると消えてしまい 目的のページにうまく飛びません。 ダブルコーテーションを残すにはどのうように すればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mimis
  • ベストアンサー率66% (16/24)
回答No.1

単純にダブルコーテーションのみ対応させるだけであれば、ダブルコーテーションを HTTPEncode後の%22に置き換えてあげれば簡単に対応できます。 もし、全ての文字列に対応させたい場合はホスト名の後ろの文字をHTTPAPPユニット内の HTTPEncode関数で変換してあげれば、対応できます。 procedure TForm1.Button1Click(Sender: TObject); var urlstr : string; begin urlstr := StringReplace(Edit1.Text,'"','%22',[rfReplaceAll]); ShellExecute(handle, 'open', pchar(urlstr), '', '', sw_shownormal); end;

kunihikomaru
質問者

お礼

ありがとうございます。 おかげ実行できるようになりました。 大変助かりました。

関連するQ&A

  • Delphiの型変換について教えてください

    DelphiからRubyプログラムを起動するには ShellExecuteを使えばいけそうなことがわかったのですが、コンパイルでエラーが出ます。 ShellExecute(Handle,'open'、'xxx.rb',OpenDialog1.FileName,syori,SW_SHOWNORMAL)としたのですが TFileNameとPAnsiCharには互換性がありませんとエラーが出ます。 どんな関数を使って変換すればいいのでしょうか?

  • 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++です。

  • 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窓が閉じないようにするにはどうすればいいのでしょうか?

  • 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ページでは、そもそも引き数の個数が上記と異なっていたりします。  ご助言をお願い致します。

  • 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です。

  • 98でBorlandC++5.51でメール送信させるため

    ShellExecute(NULL, "open", "mailto:****@abcdefg.com?subject=件名&body=本文。", NULL, NULL, SW_SHOWNORMAL); としたのですがこれだとメールウィンドウが最大化されずまた前面表示されない場合があります どうしたら最大化と確実な前面表示を実現できるでしょうか?

  • VC++からブラウザを起動して・・・

    VC++&MFCで画面を作成しています。 作成した画面のあるボタンをクリックすると、規定のブラウザが起動され、 指定したURLを表示にいくという処理を行いたいので、 ShellExecute( NULL, "open", "http://xxx.xxx.co.jp/", NULL, NULL, SW_SHOWNORMAL ); という様な感じでブラウザを起動しているのですが、このブラウザの起動時に、 アドレスバー・ツールバー等を非表示にしたいのです。 ShellExecute()じゃなくても良いので、VC++(SDK、MFC何でも可)で 実現する方法はあるのでしょうか?。 よろしくお願いします。

  • ShellExecuteでopenしたウィンドウのハンドルを取得

    こんにちは ShellExecuteでopenしたウィンドウのハンドルを取得して、MoveWindowでサイズや位置を変更したいのですが、どうしてもハンドルが取れません。 どのような記述をすればよろしいか、ご存知の方はいらっしゃいませんでしょうか 宜しくお願い致します。

  • VC6.0でクリック時にバッチファイルを実行し、終了したか知りたい

    VC6.0でクリック時にバッチファイルを実行し、終了したか知りたい 開発環境:VC6.0 OS:windowsXP HOME ダイアログのonclick時に バッチファイルを実行したいと思います さらに終了後に次の処理を行うような手順を検討しています バッチファイルを実行させる方法は WinExec(_T("abc.bat"),SW_SHOWNORMAL); のような方法で可能でしたが、 終了する前に次の処理に行ってしまいます。 終了を知る方法はありますでしょうか? よろしくお願いします

  • location.hrefのURLについて

    以下のリンクの場合、現在表示しているアドレス(URL)が送られますが、 <a onclick="window.open('http://exsample.com='+encodeURIComponent(document.title)+' '+encodeURI(location.href));" href="javascript:void(0);"> これを指定したURLに変更したいのですが、その記述方法がわかりません。 ご教授よろしくお願いします。