- PR -

VB.NETでのShellExecuteEx使用方法

投稿者投稿内容
たけ
常連さん
会議室デビュー日: 2004/02/23
投稿数: 42
お住まい・勤務地: 神奈川県/東京都
投稿日時: 2004-11-11 11:02
こんにちは。たけといいます。

現在WindowsCE上で動作するアプリを作成しています。
このアプリはVB.NETで作成していて、
ShellExecuteExを使用してボタンを押したときに指定したURLを開こうとしています。

APIを利用するのが初めてなので、
まずはWindows2000上で同じ動作をするアプリを作成しました。
しかし、「オブジェクト参照がオブジェクトインスタンスに設定されていません」
というエラーが起きてしまいうまくいきません。

過去ログに同じ状況についての投稿があったのですが、
そちらはProcessクラスを使用することで対処されていました。
しかし、私の場合はWindowsCE上で上記の処理を実行したいので、
Processクラスが使えないため、ShellExecuteExでなんとかしなければなりません。

どなたかこのエラーの解決方法を教えていただけないでしょうか。
よろしくお願いいたします。

以下にソースを示します。
====================================
Public Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (ByVal lpExecInfo As SHELLEXECUTEINFO) As Integer
Public Declare Function GetDesktopWindow Lib "user32" () As Integer

Public Structure SHELLEXECUTEINFO
  Dim cbSize As Long
  Dim fMask As Long
  Dim hWnd As Long
  Dim lpVerb As String
  Dim lpFile As String
  Dim lpParameters As String
  Dim lpDirectory As String
  Dim nShow As Integer
  Dim hInstApp As Long
  Dim lpIDList As Long
  Dim lpClass As String
  Dim hkeyClass As Long
  Dim dwHotKey As Long
  Dim hIcon As Long
  Dim hProcess As Long
End Structure

Public Const SEE_MASK_FLAG_NO_UI = &H400
Public Const SW_SHOW = 5

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim file As String = "C:\\\\index.html"
  Dim shellInfo As SHELLEXECUTEINFO

  With shellInfo
    .cbSize = Len(shellInfo)
    .fMask = SEE_MASK_FLAG_NO_UI
    .hWnd = GetDesktopWindow
    .lpVerb = "open"
    .lpFile = file
    .lpParameters = vbNullChar
    .lpDirectory = vbNullChar
    .nShow = SW_SHOW
    .hInstApp = 0
    .lpIDList = 0
  End With

  ShellExecuteEX(shellInfo)
End Sub
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-11 12:23
諸農です。

こちらのトピックが参考になるかも知れません。
Using Shell Execute to open IE



_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
たけ
常連さん
会議室デビュー日: 2004/02/23
投稿数: 42
お住まい・勤務地: 神奈川県/東京都
投稿日時: 2004-11-11 17:27
諸農さん、レスありがとうございます。

リンク先のページを見たのですが、いまいち理解できませんでした
(自分の英語力の無さを再確認しました・・・)

とりあえず載っているソースでIEの起動は出来たと書いてあったのですが、
やっていることは私のとかわりが無いように見えました。
違いはSHELLEXECUTEINFOで宣言したものすべてに値を代入している点で、
そこを修正してみましたがエラーは改善されませんでした。

なにか他にも情報があれば、教えていただけると幸いです。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-11-11 18:02
>どなたかこのエラーの解決方法を教えていただけないでしょうか。

その前にどの行で発生しているかを特定しましょう。

>「オブジェクト参照がオブジェクトインスタンスに設定されていません」

オブジェクト参照がnullの場合に発生します。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-11-11 18:14
たけさん、こんばんは。

引用:

違いはSHELLEXECUTEINFOで宣言したものすべてに値を代入している点で、


もう少しよく見て下さい。SHELLEXECUTEINFO 構造体の宣言が違ってますよね?
向こうは構造体ではなくてクラスを使用していたり、メンバの型が違ってたりしてますよ? 例えば Long って Int64 の事ですけど、その辺、大丈夫ですか?

ところで、何で Process.Start(New ProcessStartInfo("http://www.atmarkit.co.jp"))とか使わないんだろうと思ったら、最終的には「WindowsCE上で動作するアプリ」を目指してたんですね。
…って、Win32API、CE上で使えるんですか?
たけ
常連さん
会議室デビュー日: 2004/02/23
投稿数: 42
お住まい・勤務地: 神奈川県/東京都
投稿日時: 2004-11-11 18:19
todoさん、こんばんは。

>その前にどの行で発生しているかを特定しましょう。

エラーが起きている箇所は、ShellExecuteEXを実行しているところです。
SHELLEXECUTEINFOに値を入れているところは
指定した値がちゃんと入っていることを確認したのですが、
ShellExecuteEX(shellInfo)のところでエラーになってしまいます。

>オブジェクト参照がnullの場合に発生します。

このエラーの意味は色々調べてわかったのですが、
その原因がどこにあるのかがわかりません。

ネットで色々と調べたのですがVB6以前の情報ばかりで、
そこで示されているソースを使っても同様のエラーが起きてしまいます。

なにか問題解決のヒントになるようなものは無いでしょうか。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-11 18:51
諸農です。

引用:

とりあえず載っているソースでIEの起動は出来たと書いてあったのですが、
やっていることは私のとかわりが無いように見えました。
違いはSHELLEXECUTEINFOで宣言したものすべてに値を代入している点で、
そこを修正してみましたがエラーは改善されませんでした。

なにか他にも情報があれば、教えていただけると幸いです。



あ。。。
いや、あのコードはうまくいかないコードのはずです(^^;)

私はお伝えしたかったのは、RESを付けた人が紹介しているサイトのことだったんです。

http://www.opennetcf.org/

上記のサイトで公開されているOpenNetCFを使えば、
同じようにProcessクラスが使えますよ、ということです。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-11-11 19:18
Jubeiさん、こんばんは。

引用:

いや、あのコードはうまくいかないコードのはずです(^^


良く見てないのは私も同じ…。orz

引用:

http://www.opennetcf.org/


おぉ、グッジョブ…。

スキルアップ/キャリアアップ(JOB@IT)