tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルブラウザのウィンドウ指定
記事No9907
投稿日: 2010/03/02(Tue) 11:24
投稿者しえら
VB2008EEで、ボタンをクリックしてURLを標準ブラウザで開くように指定しましたが、クリックする度に
ウィンドウが開いてしまいます。
htmlのtargetのように指定するなどして、1つのウィンドウだけでURLを開くようにできるでしょうか?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
System.Diagnostics.Process.Start("http://test.co.jp")
End Sub

XP Pro SP3
IE8

[ツリー表示へ]
タイトルRe: ブラウザのウィンドウ指定
記事No9908
投稿日: 2010/03/02(Tue) 13:30
投稿者keisuke

   こんな感じでいかがですか?


Imports System.Web
Public objIE As Object
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)    Handles Me.Load
objIE = CreateObject("InternetExplorer.application")
objIE.Visible = true 'IE表示

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  objIE.Navigate("アドレス")'指定アドレスをいく
end sub

 

[ツリー表示へ]
タイトルRe^2: ブラウザのウィンドウ指定
記事No9909
投稿日: 2010/03/02(Tue) 14:13
投稿者しえら
ありがとうございます。
objIEは宣言されていません。と出たので、2行目はForm1_Loadの中に入れました。
これで実行してみましたが、ブラウザがボタンを押さずに最初から起動してしまい、途中でブラウザを閉じた後に
ボタンをクリックすると、RPCサーバーを利用できません。とエラーが出てしまいます。

私の環境という事でIE8と書きましたが、最初の通り、標準ブラウザで開くようにしたいです。
利用者の使用ブラウザが何か判断できないためです。

[ツリー表示へ]
タイトルRe^3: ブラウザのウィンドウ指定
記事No9910
投稿日: 2010/03/02(Tue) 14:28
投稿者Hongliang
汎用な方法はありません。
そもそもすでにブラウザが開いているって事は利用者はそのウィンドウ/ページを意図的に残していると考えられ、それを強制的に次のページに遷移させるというのは好ましくない挙動であると思います。

[ツリー表示へ]
タイトルRe^4: ブラウザのウィンドウ指定
記事No9911
投稿日: 2010/03/02(Tue) 14:45
投稿者しえら
実行するとブランクのウィンドウが起動してしまいます。
ボタンを押すことでそのURLが開くようにしたいです。これは押すことで強制的にそのページを開くという事です。

ボタンを押すことで開くので押す前の状態に影響しないようにしたいです。
実行したときに開くウィンドウを閉じると、ボタンを押してURLを開く事が出来ない。という状態はなってしまいます。

[ツリー表示へ]
タイトルRe^5: ブラウザのウィンドウ指定
記事No9912
投稿日: 2010/03/02(Tue) 15:18
投稿者keisuke
やっと、やりたいことが理解できました。
System.Diagnostics.Process.Start("http://test.co.jp")
この。命令だけでは無理ですね~(必ず新しいProcessを開きます)
ボタンを押して開いたウィンドウはその後どうされたいのですか?
開く閉じるボタンでは駄目なのか??
流れとしてはボタンを押すと
System.Diagnostics.Process.Start("http://test.co.jp")
が在るかを探して、無ければ起動しあればそのアドレスに移動するという感じですね
ただし、他にホームページが開かれている可能性はありますか?
あの当たりも考慮に入れてください。
.Processを調べればでてくると、思います。

[ツリー表示へ]
タイトルRe^6: ブラウザのウィンドウ指定
記事No9913
投稿日: 2010/03/02(Tue) 15:21
投稿者keisuke
追伸、多分このコーディングを全部教えてというのは大変だと思いますので、
自分なりにある程度書いたほうが解ると感じます。
http://jeanne.wankuma.com/tips/vb.net/process/
に解りやすい解説があります。

[ツリー表示へ]
タイトルRe^7: ブラウザのウィンドウ指定
記事No9914
投稿日: 2010/03/02(Tue) 15:44
投稿者しえら
> 追伸、多分このコーディングを全部教えてというのは大変だと思いますので、
> 自分なりにある程度書いたほうが解ると感じます。

実行前に他のウィンドウが開いていても、同じURLが開いていても、
ボタンを押すたびにURLを同じウィンドウで開く。という事をしたかったのです。
そして最後は閉じるだけです。これは手動で閉じるでも構わないと思っていました。
.Process調べてみます。

ありがとうございました。

[ツリー表示へ]
タイトルRe^3: ブラウザのウィンドウ指定
記事No9915
投稿日: 2010/03/02(Tue) 15:47
投稿者魔界の仮面弁士
> objIEは宣言されていません。と出たので、2行目はForm1_Loadの中に入れました。
2行目というと、「Public objIE As Object」ですか?
Sub Form1_Load の中で、Public 宣言はできないハズですけれども…。

> これで実行してみましたが、ブラウザがボタンを押さずに最初から起動してしまい、
Form1_Load 内に、objIE を生成/表示するコードを書いてしまうとそうなります。
それらをボタンの Click イベントに置き換えれば、ボタン押下時に起動します。

> 途中でブラウザを閉じた後にボタンをクリックすると、RPCサーバーを利用できません。とエラーが出てしまいます。
フィールド変数の objIE As Object を WithEvents objIE As InternetExplorer に変更し、
その OnQuit イベントにて、終了されたかどうかを拾うようにしてみてください。
(もしも終了していた場合には、InternetExplorer オブジェクトを再生すれば良いかと)

> 私の環境という事でIE8と書きましたが、最初の通り、標準ブラウザで開くようにしたいです。
標準ブラウザを対象とする場合、さほど細かい制御はできません。

たとえば Process.Start( URL ) で呼び出す場合には、レジストリで指定された
アプリケーションが呼び出されますが、そのアプリの振る舞いは、
アプリ側の実装に依存しています。

たとえば、指定された URL を常に新しいアプリ上で開こうとするブラウザや、
多重起動は一切行わえず、以前開いていたブラウザ上に、新たなページを
開こうとするものもありえるかと思います。

そもそも、標準ブラウザに“自作アプリ”を登録したような場合、そのアプリに
「外部プログラムから制御させるための機能」を実装していなかったとすれば、
どうしようもありませんよね。なので、統一的な操作方法は恐らく無いと思います。


> 利用者の使用ブラウザが何か判断できないためです。
逆に言うと、判断さえできれば御自身で対処可能ということですか?

[ツリー表示へ]