- - PR -
VB.NETでのShellExecuteEx使用方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 | ||||||||
|
投稿日時: 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-11-11 17:27
諸農さん、レスありがとうございます。
リンク先のページを見たのですが、いまいち理解できませんでした (自分の英語力の無さを再確認しました・・・) とりあえず載っているソースでIEの起動は出来たと書いてあったのですが、 やっていることは私のとかわりが無いように見えました。 違いはSHELLEXECUTEINFOで宣言したものすべてに値を代入している点で、 そこを修正してみましたがエラーは改善されませんでした。 なにか他にも情報があれば、教えていただけると幸いです。 | ||||||||
|
投稿日時: 2004-11-11 18:02
>どなたかこのエラーの解決方法を教えていただけないでしょうか。
その前にどの行で発生しているかを特定しましょう。 >「オブジェクト参照がオブジェクトインスタンスに設定されていません」 オブジェクト参照がnullの場合に発生します。 | ||||||||
|
投稿日時: 2004-11-11 18:14
たけさん、こんばんは。
もう少しよく見て下さい。SHELLEXECUTEINFO 構造体の宣言が違ってますよね? 向こうは構造体ではなくてクラスを使用していたり、メンバの型が違ってたりしてますよ? 例えば Long って Int64 の事ですけど、その辺、大丈夫ですか? ところで、何で Process.Start(New ProcessStartInfo("http://www.atmarkit.co.jp"))とか使わないんだろうと思ったら、最終的には「WindowsCE上で動作するアプリ」を目指してたんですね。 …って、Win32API、CE上で使えるんですか? | ||||||||
|
投稿日時: 2004-11-11 18:19
todoさん、こんばんは。
>その前にどの行で発生しているかを特定しましょう。 エラーが起きている箇所は、ShellExecuteEXを実行しているところです。 SHELLEXECUTEINFOに値を入れているところは 指定した値がちゃんと入っていることを確認したのですが、 ShellExecuteEX(shellInfo)のところでエラーになってしまいます。 >オブジェクト参照がnullの場合に発生します。 このエラーの意味は色々調べてわかったのですが、 その原因がどこにあるのかがわかりません。 ネットで色々と調べたのですがVB6以前の情報ばかりで、 そこで示されているソースを使っても同様のエラーが起きてしまいます。 なにか問題解決のヒントになるようなものは無いでしょうか。 | ||||||||
|
投稿日時: 2004-11-11 18:51
諸農です。
あ。。。 いや、あのコードはうまくいかないコードのはずです(^^;) 私はお伝えしたかったのは、RESを付けた人が紹介しているサイトのことだったんです。 http://www.opennetcf.org/ 上記のサイトで公開されているOpenNetCFを使えば、 同じようにProcessクラスが使えますよ、ということです。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2004-11-11 19:18
Jubeiさん、こんばんは。
良く見てないのは私も同じ…。orz
おぉ、グッジョブ…。 |