- - PR -
VB.NETでShellExecuteExを使用する
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-06 20:54
初書き込みです。
現在VB.NETで開発しています。 ShellExecuteExでファイルを起動したいのですがエラーになります。 いろいろ調べたのですが解決できませんでした。 どなたか解決策をお教えください。 error------------------------------------------- オブジェクト参照がオブジェクト インスタンスに設定されていません。 ------------------------------------------------ source------------------------------------------ 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 Integer Dim fMask As Integer Dim hWnd As Integer Dim lpVerb As String Dim lpFile As String Dim lpParameters As String Dim lpDirectory As String Dim nShow As Integer Dim hInstApp As Integer Dim lpIDList As Integer Dim lpClass As String Dim hkeyClass As Integer Dim dwHotKey As Integer Dim hIcon As Integer Dim hProcess As Integer End Structure Public Const SEE_MASK_NOCLOSEPROCESS = &H40 Public Const SEE_MASK_FLAG_DDEWAIT = &H100 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 path As String = 起動したいファイル(.txt) Dim shellInfo As SHELLEXECUTEINFO With shellInfo .cbSize = Len(shellInfo) .fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_FLAG_DDEWAIT Or SEE_MASK_FLAG_NO_UI .hWnd = GetDesktopWindow .lpVerb = "open" & vbNullString .lpFile = path & vbNullString .lpParameters = vbNullString .lpDirectory = vbNullString .nShow = SW_SHOW .hInstApp = 0 .lpIDList = 0 End With ShellExecuteEX(shellInfo) End Sub -------------------------------------------------- 長くなりましたがよろしくお願いします。 | ||||||||
|
投稿日時: 2003-11-06 21:01
Processクラスで事は足りませんか?
どこで発生しているんですか?発生箇所のソースコードが反転表示してますよね? どこかの変数がNothingになっているようですが。 | ||||||||
|
投稿日時: 2003-11-06 21:15
ご回答ありがとうございます。
>Processクラスで事は足りませんか? 実はopenではなくprintでファイル印刷をしたかったのです。 ただprintでエラーが出たためopenで試していました。 エラーの発生箇所・メッセージは同じです。 >どこで発生しているんですか?発生箇所のソースコードが反転表示してますよね? >どこかの変数がNothingになっているようですが。 ShellExecuteEX(shellInfo)の箇所です。 また構造体で宣言しセットしたメンバをコンソール出力しました。 -----Console----- cbSize = 60 fMask = 1024 hWnd = 65556 lpVerb = open lpFile = 出力したいファイルパス lpParameters = lpDirectory = nShow = 5 hInstApp = 0 lpIDList = 0 ----------------- よろしくお願いします。 | ||||||||
|
投稿日時: 2003-11-06 23:25
VB6からの移植の注意点がヘルプの中にあるのですが,この中にメッセージやスレッドを扱うAPIについて動作保証できない旨の記述があったと思います(2行程度)。
ShellExecuteExがこれに該当するかどうかはわかりませんが,私はGetMessageで同じエラーがでました。 答えになってなくて申し訳ありませんが,参考までに。 | ||||||||
|
投稿日時: 2003-11-07 00:00
ProcessクラスのStartメソッドの引数に ProcessStartInfoクラスのインスタンスを渡す方法のことを言っているのですが、 エラーの発生箇所・メッセージが同じとは? | ||||||||
|
投稿日時: 2003-11-07 00:36
こんにちわ。諸農です。
こちらの参考コードでは、PRINTしているようですが、参考になりますか? ms-help://MS.NETFrameworkSDKv1.1.JA/cpref/html/frlrfSystemDiagnosticsProcessClassTopic.htm ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2003-11-07 10:31
大変遅くなりました。すみません。
よねKENさん、KeroKeroさん、Jubeiさんありがとうございました。 私の言葉不足と無知のため正確にお伝えできませんでした。 >実はopenではなくprintでファイル印刷をしたかったのです。 >ただprintでエラーが出たためopenで試していました。 >エラーの発生箇所・メッセージは同じです。 の真意は自動印刷がしたいので "ShellExcecuteEx"でlpVerbにprintとしたところエラーになりましたので lpVerbをopenにし調査をしましたら エラーの発生箇所"ShellExecuteEX(shellInfo)"、メッセージが同じということです。 よねKENさん、Jubeiさん 以前ShellExcecuteExを用いて自動印刷をしたことがありまして(Delphi) 固執しすぎました。すみません。 Processクラスで再度調査致します。 | ||||||||
|
投稿日時: 2003-11-07 18:49
Processクラスで自動印刷できましたが、新たな問題に悩まされています。
スレッドを変えた方がよろしかったでしょうか?。 PDF出力時AcrobatReaderが終了せず最小化され残ってしまいます。 AcrobatReaderを終了する方法をお教え下さい。 Processクラスのメソッドで色々試しましたが、 うまく終了できません。宜しくお願いします。 下記コードなのですが --------------------------------------- Dim startInfo As New ProcessStartInfo() Dim path As String = "ファイルパス" With startInfo .FileName = path .Verb = "print" End With Process.Start(startInfo) --------------------------------------- ファイルパスにExcelファイル(.xls)を指定すると Excel起動→印刷開始→Excel終了 ファイルパスにEditerファイル(.txt)を指定すると Editer起動→印刷開始→Editer終了 ファイルパスにPdfファイル(.pdf)を指定すると AcrobatReader起動→印刷開始 印刷はExcel、Editer、Pdf全て成功します。 |
1|2|3|4
次のページへ»