- PR -

VB.NETでShellExecuteExを使用する

投稿者投稿内容
KeroKero
常連さん
会議室デビュー日: 2003/11/06
投稿数: 26
投稿日時: 2003-11-10 13:19
APIの使い方を書いておきます。

Declare Function GetProfileString Lib "Kernel32.dll" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer) As Integer


Dim Temp As String
Dim RC As Integer
Dim P1 As Integer, P2 As Integer

Temp = Space(255)
RC = GetProfileString("windows", "device", "", Temp, 255)
If RC = 0 Then
'デフォルトのプリンタが無いのでここでエラー処理
End If
P1 = InStr(Temp, ",")
P2 = InStr(P1 + 1, Temp, ",")

printernameはLeft(Temp, P1 - 1)で,drivernameはMid(Temp, P1 + 1, P2 - P1 - 1)でそれぞれ取得できます。


時間があれば試してみて下さい。
空条Q太郎
会議室デビュー日: 2003/11/06
投稿数: 19
投稿日時: 2003-11-10 14:31
KeroKeroさん、ありがとうございます。

AcrobatReaderのコマンドラインパラメータでの
自動印刷も是非試してみたいです。

実は自動印刷パフォーマンスに対しての要望が厳しい為、
導入コスト、パフォーマンス、セキュリティ、保守に優れたものを
幾つかリストアップし御客様に提示する必要があるのです。

現在も自動印刷ソフトを試しています。
ブラウザ(IE5.5 SP2以上推奨)にActiveXを実装し
ファイルをURL指定することで自動印刷が開始されるとういう代物です。

ブラウザを起動するのでプロセスを終了する必要があり、
Jubeiさんからのご返答で解決しましたAcrobatReder同様にしたところ、
今度はIEで問題が発生しました。

>引数有りのStartメソッドはstaticなんですね。
staticでないと思うのですが。

毎度申し訳ございませんが、宜しくお願い致します。

----------source----------
Private Sub PdfPrint(ByVal Url As String)
  Dim myProcess As New Process()
  Try
    myProcess.StartInfo.FileName = Url
    myProcess.StartInfo.Verb = "Open"
    myProcess.StartInfo.CreateNoWindow = False
    myProcess.Start()
    myProcess.WaitForExit(5000)'''エラー箇所
  Catch e As Exception
    MsgBox(e.Message)
  Finally
    myProcess.Kill()''''''''''''''エラー箇所
  End Try
End Sub
'※エラー箇所の内容は"このオブジェクトに関連付けられているプロセスはありません。"です。
--------------------------
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2003-11-10 15:37
引用:

>引数有りのStartメソッドはstaticなんですね。
staticでないと思うのですが。



えっ??
うちのドキュメントがおかしいのかなぁ。。

SDKドキュメント
【Process.Start メソッド (ProcessStartInfo) [C#]】のページ。
ms-help://MS.NETFrameworkSDKv1.1.JA/cpref/html/frlrfsystemdiagnosticsprocessclassstarttopic2.htm

そういえば、つい最近公開されたドキュメントアップデートをしたので、
そこでおかしくなっているのかも知れませんね。
元に戻さないといけないのかなぁ。
#日経で10万円近く出して購入したリファレンスセットも確認しておこうっと。

いずれにせよ、私のコメントは、基本的にこの間違ったSDKドキュメントを
ベースにしているので、これからは私の発言は参考にしないほうがいいかも
しれませんよ(^^ゞ


ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
空条Q太郎
会議室デビュー日: 2003/11/06
投稿数: 19
投稿日時: 2003-11-10 15:55
Jubeiさんご返答ありがとうございます。

>えっ??
>うちのドキュメントがおかしいのかなぁ。。

こちらの間違いかもしれないので再度ドキュメント確認します。

>いずれにせよ、私のコメントは、基本的にこの間違ったSDKドキュメントを
>ベースにしているので、これからは私の発言は参考にしないほうがいいかも
>しれませんよ(^^ゞ

そんなことありませんよ。いつも心底助かっております。
これからも宜しくお願いします。

しかし、なぜIEは駄目なのかなぁ。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2003-11-10 16:32
引用:

Jubeiさんの書き込み (2003-11-10 15:37) より:
引用:

>引数有りのStartメソッドはstaticなんですね。
staticでないと思うのですが。


えっ??
うちのドキュメントがおかしいのかなぁ。。



お二人の言葉の認識が違っているだけでは?
jubeiさんのおっしゃっているのはstatic(C#)であり、
VB.NETで言うところのSharedの意味かと思います。

ProcessクラスのStartメソッドでProcessStartInfoクラスを引数に取るものは、
static(C#)(静的)/Shared(VB.NET)(共有)なメソッドです。


[ メッセージ編集済み 編集者: よねKEN 編集日時 2003-11-10 16:31 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2003-11-10 18:00
こんにちわ。諸農です。

引用:

お二人の言葉の認識が違っているだけでは?
jubeiさんのおっしゃっているのはstatic(C#)であり、
VB.NETで言うところのSharedの意味かと思います。



ありゃりゃ。失礼しましたm(__)m
ご助言ありがとうございます。

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

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2003-11-11 09:42
こんにちわ。諸農です。

先の発言では失礼しました。お許しください。

引用:
ブラウザを起動するのでプロセスを終了する必要があり、
Jubeiさんからのご返答で解決しましたAcrobatReder同様にしたところ、
今度はIEで問題が発生しました。

コード:
Private Sub PdfPrint(ByVal Url As String)
  Dim myProcess As New Process()
  Try
    myProcess.StartInfo.FileName = Url
    myProcess.StartInfo.Verb = "Open"
    myProcess.StartInfo.CreateNoWindow = False
    myProcess.Start()
    myProcess.WaitForExit(5000)'''エラー箇所
  Catch e As Exception
    MsgBox(e.Message)
  Finally
    myProcess.Kill()''''''''''''''エラー箇所
  End Try
End Sub



'※エラー箇所の内容は"このオブジェクトに関連付けられているプロセスはありません。"です。



との事なので、「HasExited」で判定してみてはいかがでしょうか。

ではでは(^^)/

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

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-11-11 11:08
引用:

よねKENさんの書き込み (2003-11-10 16:32) より:
お二人の言葉の認識が違っているだけでは?
jubeiさんのおっしゃっているのはstatic(C#)であり、
VB.NETで言うところのSharedの意味かと思います。

ProcessクラスのStartメソッドでProcessStartInfoクラスを引数に取るものは、
static(C#)(静的)/Shared(VB.NET)(共有)なメソッドです。


なんとなく、別のオーバーロードのものを見てしまっていただけのような気がしないでもないです…

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