tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルShell関数の引数の記述方法
記事No13421
投稿日: 2009/02/09(Mon) 13:07
投稿者きん
初めまして。VB初心者の者です。
Shell関数の第一の引数の記述の仕方について質問させて下さい。
現在、以下のようなコードを記述しています。
vIEPATH(0) = ""C:\Program Files\Internet Explorer\iexplore.exe" -nohome"
sUDID = TEST.HTM
Shell(vIEPATH(0) & Space(1) & sUDID, 1)
今回、質問したいのは、
@起動する「TEST.HTM」に値を複数渡したいのですが、その記述方法。
Aそもそも値を渡す事が出来るのかどうか。
という事です。
色々と検索してみたのですが、うまくいく方法に辿り着けず、この掲示板に書き込みさせて頂きました。
初歩的な質問で申し訳ありませんが、ご教授下さい。よろしくお願い致します。

[ツリー表示へ]
タイトルRe: Shell関数の引数の記述方法
記事No13422
投稿日: 2009/02/09(Mon) 14:03
投稿者
> 現在、以下のようなコードを記述しています。
> vIEPATH(0) = ""C:\Program Files\Internet Explorer\iexplore.exe" -nohome"
> sUDID = TEST.HTM
> Shell(vIEPATH(0) & Space(1) & sUDID, 1)

本当に上記のように記述してるんですか?
実行するまでもなくエラーになると思うんですが。

webページやローカルのhtmlファイル等をIEで開きたいならShellよりも
Objectを使った方が楽じゃないですかね。

    Dim IEObj As Object

    Set IEObj = CreateObject("InternetExplorer.application")
    IEObj.Navigate "開きたいURL"
    IEObj.Visible = True

    Set IEObj = Nothing

"開きたいURL"は当然フルパスで記述してください。
引数があるならまずは手動で開いて
その時のIEのアドレスバーの文字列と同じ記述法になるように作って
それを渡してあげればいいかな?

[ツリー表示へ]
タイトルRe^2: Shell関数の引数の記述方法
記事No13423
投稿日: 2009/02/09(Mon) 19:42
投稿者きん
琴さん、返信ありがとうございます。
少し補足させて頂きますと、
現在既存のプログラムがあり、それに対して改修を加えている最中です。
その中でShellを使用しているので、shellがそのまま使えるのか?使えるとするならば記述の方法が知りたいと思った次第です。
特にShellに固執するつもりもないので、よりよい方法を選択しようとは思います。

> 引数があるならまずは手動で開いて
> その時のIEのアドレスバーの文字列と同じ記述法になるように作って

引数について、もう少し質問させて下さい。
今回複数の引数を渡したいのですが、この引数はhtmlを表示するのには全く関係のない引数で、表示されたhtmlの内部処理で使用する値を渡したいのです。
そこの記述方法が分からないのですが、ご教授ください。よろしくお願い致します。

[ツリー表示へ]
タイトルRe^3: Shell関数の引数の記述方法
記事No13425
投稿日: 2009/02/10(Tue) 09:37
投稿者
> 今回複数の引数を渡したいのですが、この引数はhtmlを表示するのには全く関係のない引数で、表示されたhtmlの内部処理で使用する値を渡したいのです。
> そこの記述方法が分からないのですが、ご教授ください。よろしくお願い致します。

htmlファイルへの引数は

 test.html?引数

で渡すことができます。
ただ、引数の区切り文字等は受け手であるhtmlファイルの作り方次第なので
「htmlファイルが要求している形にして渡す」
としか言いようがありません。

検索したらこんなページがヒットしました。
参考にしてみてはどうでしょうか?
http://weapon.milkcafe.to/text/other/lecture004.html

[ツリー表示へ]
タイトルRe^4: Shell関数の引数の記述方法
記事No13426
投稿日: 2009/02/10(Tue) 20:38
投稿者きん
琴さん、お返事ありがとうございます。

> htmlファイルへの引数は
>
>  test.html?引数
>
> で渡すことができます。
> 検索したらこんなページがヒットしました。
> 参考にしてみてはどうでしょうか?
> http://weapon.milkcafe.to/text/other/lecture004.html

引数はご教授頂いた通り「?」を使用しました。
参考のHPも大変役に立ちました。
ありがとうございました!!

[ツリー表示へ]
タイトルRe: Shell関数の引数の記述方法
記事No13424
投稿日: 2009/02/09(Mon) 21:38
投稿者魔界の仮面弁士
> 現在、以下のようなコードを記述しています。
> vIEPATH(0) = ""C:\Program Files\Internet Explorer\iexplore.exe" -nohome"
これだと、"" で構文エラーになってしまうでしょう。
実際のコードは、パス情報を外部データから取り込んでいるのでは無いでしょうか?
もしくは、
 vIEPATH(0) = """C:\Program Files\Internet Explorer\iexplore.exe"" -nohome"
の書き間違いとか。


> sUDID = TEST.HTM
右辺が「"」で囲まれていませんが、これは
 sUDID = "TEST.HTM"
の意味では無く、TEST 変数の HTM プロパティのような意味なのでしょうか?


> Shell(vIEPATH(0) & Space(1) & sUDID, 1)
これも構文エラーになるでしょう。実際には
 Shell vIEPATH(0) & Space(1) & sUDID, 1
もしくは
 Call Shell(vIEPATH(0) & Space(1) & sUDID, 1)
ではありませんか?


> (1) 起動する「TEST.HTM」に値を複数渡したいのですが、その記述方法。
> (2)そもそも値を渡す事が出来るのかどうか。

複数の値をTEST.HTMに渡す、という言葉の意味が分からなかったのですが、
iexplore.exe に複数の html を渡すと言う意味であれば、
 vIEPATH(0) = """C:\Program Files\Internet Explorer\iexplore.exe"" -nohome"
 vIEPATH(1) = "C:\FOLDER1\TEST.HTM"
 vIEPATH(2) = "C:\FOLDER2\TEST.HTM"
 vIEPATH(3) = "C:\FOLDER3\TEST.HTM"
 For N = 1 To 3
  Shell vIEPATH(0) & " " & vIEPATH(N), vbNormalFocus
 Next
でどうでしょう。


あるいは、IE7 で複数のタブに表示させる、という意図であれば、
Const navOpenInNewTab = &H800 を Navigate させるとか。
http://bbs.kakaku.com/bbs/-/SortID=8186456/


また、ターゲットがそもそも IE では無いのだとしたら、その受け取り側の
アプリの仕様次第なので、一般解はありません。相手も自作 VB6 アプリなら、
適当な区切り文字(たとえば改行)を付加して送りつけるという手もありますが…。

'== 呼び出す側(Project1.exe) ==
Private Sub Command1_Click()
    Dim sUDID(2) As String
    sUDID(0) = "C:\a.html"
    sUDID(1) = "C:\b.html"
    sUDID(2) = "C:\c.html"

    Dim vPATH As String
    vPATH = "C:\Project2.exe"

    Shell vPATH & " " & Join(sUDID, vbCrLf), vbNormalFocus
End Sub


'== 受け取る側(Project2.exe) ==
Private sUDID() As String
Private Sub Command1_Click()
 Text1.Text = Command()
 sUDID = Split(Command(), vbCrLf)
End Sub

[ツリー表示へ]
タイトルRe^2: Shell関数の引数の記述方法
記事No13427
投稿日: 2009/02/10(Tue) 20:53
投稿者きん
魔界の仮面弁士さん、お返事ありがとうごさいます。

> これだと、"" で構文エラーになってしまうでしょう。
> 実際のコードは、パス情報を外部データから取り込んでいるのでは無いでしょうか?
> もしくは、
>  vIEPATH(0) = """C:\Program Files\Internet Explorer\iexplore.exe"" -nohome"
> の書き間違いとか。
おっしゃる通り、実際には情報は外部データから取り込んでいます。

> 右辺が「"」で囲まれていませんが、これは
>  sUDID = "TEST.HTM"
> の意味では無く、TEST 変数の HTM プロパティのような意味なのでしょうか?
これもおっしゃる通り、sUDID = "TEST.HTM"です。

> これも構文エラーになるでしょう。実際には
>  Shell vIEPATH(0) & Space(1) & sUDID, 1
> もしくは
>  Call Shell(vIEPATH(0) & Space(1) & sUDID, 1)
> ではありませんか?
これもおっしゃる通りです。
実際には、Call Shell(vIEPATH(0) & Space(1) & sUDID, 1)と書いています。

掲示板に簡潔に書こうとしたあまり必要な情報まで抜けていまいました。申し訳ありません。

つたない文章からここまで組みとっていただきありがとうございます。
引数で渡したかった内容は、1つのhtmlと、ここで指定されたhtmlの内部で使用する情報を引数としたかったのです。琴さんにご教授頂いた「?」の事を全く知らなかったので、
うまく引数が設定されていなかったようです。
別の処理でexe起動のShellも使用していますので、そこの部分の引数の渡し方が参考にさせていただきました。
ありがとうございました!!

[ツリー表示へ]