同じIEのウィンドウでリンクの内容だけ変更する方法は?

このQ&Aのポイント
  • VC超初心者の質問です。Visual C++ 2005 Express EditionのWin32コンソールで作成したアプリで、同じIEウィンドウでリンクの内容を変更したいです。
  • ShellExecute()関数でIEを起動することはできますが、2回目に起動しようとすると新規のIEブラウザが立ち上がってしまいます。対策方法を教えてください。
  • アプリはコマンドプロンプト上でxxx.exe #####と入力すると、http://localhost/index.html?id=#####というURLでIEを起動します。Mutexでは解決できないため、別の方法が必要です。お知恵をお借りしたいです。
回答を見る
  • ベストアンサー

同じIEのウィンドウで、リンクの内容だけ変更したいのですが

VC超初心者です。 Visual C++ 2005 Express EditionのWin32コンソールで作成しています。 ShellExecute()関数でIEを起動することはできたのですが、同じアプリで2回目に起動しようとすると、新規のIEブラウザが立ち上がってしまいます。これを既存IEウィンドウでリンク先だけ変更するには、どうすれば良いでしょうか? アプリは、コマンドプロンプト上で「xxx.exe #####」と入力しENTERを押すと、「http://localhost/index.html?id=#####」というURLでIEを起動する、といった単純なものです。 アプリはそのまま終了してしまうのでMutexでは無理なのだと気づき、皆様のお知恵を拝借したいと思っております。 よろしくお願いいたします。

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

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

そうですか ・・・ 当方で実験したところうまく動いたので投稿した次第ですが FindWindowにて対象を見つけているのでしょうか? 見つかっていれば hwndがNULL以外の値を保持しています ShellExecuteの第2引数は実行すべき操作なの『Open』が妥当だろうと思います ここに URLを設定してしまうと Explorerに制御が行ってしまって新たにIEを起動してしまうように思います 第3引数はファイル名となっていますがIE対してURLを渡してやれば渡されたURLに遷移すると思いますよ 第3または第4引数辺りを使ってURLを渡すのが妥当なように思います

foot-peng
質問者

お礼

redfox63様 度々の御回答有難う御座います。 結論から申しますと、無事できました^^; 御指摘頂きました通り、ShellExecute()の使い方に問題があったようです。 上手く動作しなかったソースは、  ShellExecute( hWnd, "Open", "IExplore",id_url , NULL, SW_SHOW);  // id_urlには、「http://..?id=###」という文字列がchar型配列で入っています。 上手く動作したソースは、  ShellExecute( hWnd, "Open", id_url, NULL, NULL, SW_SHOW); です。 第3引数に"IExplore"とプログラム名を記述した事で、新規にIEを起動するようになっていたようです。 ココを、URLに変更することで、起動済みのIEにURLを渡すことができました。 御記述頂いたソースではそうなっていたのですが、修正時にいつの間にか変更してしまいました・・・。 御教授頂きまして有難う御座いました。

その他の回答 (1)

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

IEで表示でしょうか? FindWindowでウィンドウハンドルを取得してからShellExecuteを実行してみてはいかがでしょう HWND hWnd = FindWindow( NULL, _T("http://localhost/index.html - Microsoft Internet Explorer") ); if ( hWnd != NULL ) {   TCHAR buf[256];   _stprintf( buf, _T("http://localhost/index.html?id=%s"), argv[1] );   ShellExecute( hWnd, _T("Open"), buf, NULL, NULL, SW_SHOW ); } else {   ShellExecute( NULL, _T("Open"), _T("http://localhost/index.html"), NULL, NULL, SW_SHOW ); } といった具合です ・・・ なお FindWindowの第2引数は 実情に合わせて修正してください

foot-peng
質問者

お礼

すみません、返事が遅くなりました。 なぜか会社からだと書き込めないという不具合・・・。 改めまして、ご回答頂きまして有難う御座います。 >IEで表示でしょうか? はい、その通りです。 作成したアプリを実行することでIEを起動し、二回目のアプリ実行の時には一回目に起動したIEの中で表示する、といったことを目的としています。(説明下手ですみません・・・;;) そこでまた質問なのですが、記載頂きましたソースで、 一回目の実行でelse分のShellExecute()でIEを起動し、二回目の実行でif文内のShellExecute()を実行するかと思います。 ShellExecute()の第1引数を、hWndとすることで既存のIEに表示するようになるのでしょうか? 現在、第2引数を可変のidに対応するよう修正していますが、二回目の実行でも新規のIEが起動してしまいます。 何か私の解釈が間違っていればご教授願います。

関連するQ&A

  • 任意のIEにリンクを指定したいです

    2つのIEが起動しており、そのうち指定するIEの方にリンク先を上書きする方法をご教授頂ければと思います。 環境はVisual C++ 2005 Express Editionのwin32コンソールで作成しています。 IEを起動する方法として、FindWindow関数で上書きしたいIEのウィンドウ名のハンドルを取得し、ShellExecute関数でそのハンドルにリンク先を指定する方法を取っています。 下記は作成したプログラムです。 確かに指定したウィンドウ名を参照し、hWndにNULL以外の値が入っておるのですが、URLを上書きするウィンドウが指定したウィンドウではなく、最後に起動したIEのウィンドウに表示されてしまいます・・・。 説明べたなので例を示します・・・。以下のような動作になります。 (1)作成したプログラムからIEを起動する。ウィンドウ名:test - Windows Internet Explorer (2)デスクトップから新規にIEを起動する。ウィンドウ名:yahoo - Windows Internet Explorer (3)もう一度作成したプログラムからIEを起動すると、(2)で起動したIEに上書きしてしまう。本当は(1)に上書きしたいのに・・・。 また、ShellExecuteの第一引数はそのハンドルを持つウィンドウを差していると認識しているのですが、違いますでしょうか? /////////////////////////////////////////////////// HWND hWnd = FindWindow( NULL, "ウィンドウ名") ); if ( hWnd != NULL ) {   ShellExecute( hWnd, "Open", URL, NULL, NULL, SW_SHOW ); } else {   ShellExecute( NULL, "Open", "IExplore",​ URL, NULL, SW_SHOW ); } ///////////////////////////////////////////////////

  • IE8インストールでIEクラッシュ

    XP-SP2でIE6をIE8にアップグレードしようとしてダウンロード。インストール中に応答しなくなり、一度Windowsを再起動しましたら、IEが起動しなくなりました。その他のアプリ、OEやコマンドプロンプトは正常動作するのですがIEが死んでいます。 FTPとかで入手するには具体的にどうすればよいのでしょうか?

  • vc++でtelnet

    お世話になります。 現在、コマンドプロンプトでtelnetを起動し、ある特定のコマンドを投げている作業があります。特定のコマンドが、一つのパラメーターが違うだけなので、ボタンを押してそのコマンドを投げられるような画面を作って...と言われました。 CreateProcessを使って、cmd→telnet→標準出力...で、 (1)画面アプリ起動(初期処理:CreatePorcess(cmd telnet xxx.xxx.xxx.xxx)) (2)ボタンクリック (3)cout << abc 1 2 3 <<endl (コマンド投入) (4)ボタンクリック (5)cout << abc 1 2 4 <<endl etc.. (6)終了ボタンclick(telnet終了:quit、cmd終了:exit) などでいけるかなと思ったのですが、(3)でアプリ画面のほうに制御が戻ってきません。 コンソール画面を表示して確認すると、投入はできてる感じで、入力待ちになってるようです。 そこでenterを押しても画面には戻らず、、enter→quitで戻る?! 通信系は苦手ですが、コマンドプロンプトでやってることをそのままだから とは思ったものの...omz 根本的に間違っているでしょうか? サンプルコードも探したのですが、見つからず質問させていただきました。 teratermマクロ...など見つけたのですが敷居が高いのとteratermのインストールは×みたいで。webアプリも駄目といわれ。。。 どうかアドバイスをお願いいたします!

  • VC、コンソールアプリ結果のウインドウサイズ

    OSはwindows2000proSP2、VC6スタンダードで コンソールアプリケーションを作っています。 アプリを実行すると、結果がコマンドプロンプトに出てきますが、 コマンドプロンプトのウインドウサイズ幅が小さく、 変なところで折り返って表示されてしまい、見栄えが悪くなってしまいます。 そこで、実行結果が出力されるコマンドプロンプトのウインドウサイズを 変更したいのですが、どう設定したらよいかわかりません。 どうしたらウインドウサイズを変更できるのでしょうか?

  • CLRアプリと通常のアプリとの違い

    について教えてください。 両者の使い分けはどのようにするのでしょうか? CLRアプリを実行するには特別な環境が必要なのでしょうか? VC++Express Edition を使って Win32コンソールアプリ(HelloWorld!表示) と CRLコンソールアプリ(HelloWorld!表示) を作ってみたのですが同じようなものができます。 どのように使い分けるのでしょうか?

  • Visual C++ Express Editionのランタイムなしで起動する方法

    いま、Visual C++ Express Edition を使って、開発しています。 前回、同じようなことを質問したのですが いまいちわからなかったので、もう一度質問させていただきます。 Visual C++ Express Edition で作ったWin32アプリケーションは、 VCランタイムが必要らしいですが、 VCランタイムをほかのPCにインストールしなくても 起動できるようにはできないのですか?

  • Microsoft Visual C++ 2008 Express Editionのコマンドプロンプトのついて

    Microsoft Visual C++ 2008 Express Editionのコマンドプロンプトからnotepad++を起動できるようにしたいのですがどうすればできますか?

  • 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で別の変数が適当であれば、そちらを教えていただけませんか?

  • Windows XPの回復コンソールの使い方

    先日、次のファイルが存在しないか壊れている...... と出てWindows XPが起動できなくなりました。 そこで回復コンソールというものがあると知り[http://pcblend.com/archives/51]のファイルをCDに焼いて壊れたPCに入れて起動させ、回復コンソールまで行きました。 しかし普通は Microsoft Windows(R) 回復コンソール。 回復コンソールはシステムの修復と回復機能を提供します。 「EXIT」と入力すると、回復コンソールを終了し、コンピューターを再起動します。 1: C:\WINDOWS どの Windows インストールにログオンしますか? (取り消すには Enter キーを押してください) こう出るらしいのですが私のは Microsoft Windows(R) 回復コンソール。 回復コンソールはシステムの修復と回復機能を提供します。 「EXIT」と入力すると、回復コンソールを終了し、コンピューターを再起動します。 C:\> しか出ません。 壊れたPCはWindows XP Home Editionでこの投稿は別のPCからしております。 どうすれば直りますでしょうか。ご教授おねがいします。

  • コンソールアプリ内でDosコマンドを使用したい

    kirishima8と申します。 よろしくお願いします。 開発環境 WindowsVista business 32bit Visual Studio 2005 VC++ Win32アプリでコンソールアプリで、Dosのコマンドラインを利用したいのです。 新たにbatファイル等を作成・実行するのではなく、ずっと同一のコンソールウィンドウを利用し、かつ、Dosコマンドをプログラム側から利用できたらと考えています。 コマンドプロンプトのような機能を、自分で作ったアプリに実装させたいというのが最終的な目標となります。 MSDNで調べてみたところ、WriteConsoleInput()や関連APIが見つかりました。 しかしながら、パラメータの説明が何を指すのかという点が、現時点で私には解り辛いです。 何らかの情報をお持ちの方、ご教授ください。 未熟者ですので、上記では内容が伝わらないかもしれません。 何か不明な点がございましたら、お尋ねになってください。 よろしくお願いします。