掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PrintDlgでプリンタの名前を正しく取得するには? (ID:140069)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
エラー処理を抜きにすれば、こんな感じでは。 # 差分になりそうなところのみ記述。 # 直うちなので、間違っているところを適宜修正してください。 Public Type DEVNAMES wDriverOffset As Integer wDeviceOffset As Integer wOutputOffset As Integer wDefault As Integer End Type Dim vDevNames As DEVNAMES Dim abBuffer() As Byte Dim iLength As Long vDevNames.wDriverOffset = 8 abBuffer = StrConv(Printer.DriverName, vbFromUnicode) iLength = UBound(abBuffer) + 1 vDevNames.wDeviceOffset = 8 + iLength + 1 abBuffer = StrConv(Printer.DeviceName, vbFromUnicode) iLength = UBound(abBuffer) + 1 vDevNames.wOutputOffset = vDevNames.wDeviceOffset + iLength + 1 abBuffer = StrConv(Printer.DriverName & vbNullChar & _ Printer.DeviceName & vbNullChar & Printer.Port & vbNullChar, _ vbFromUnicode) iLength = UBound(abBuffer) + 1 ' 略 Call CopyMemory(ByVal lpDevNames, vDevNames, 8&) Call CopyMemory(ByVal lpDevNames + 8&, abBuffer(0&), iLength) ただ、こうまでしなくても、 vPrintDlg.lStructSize = Len(vPrintDlg) vPrintDlg.Flags = PD_RETURNDEFAULT vPrintDlg.hDevMode = 0& vPrintDlg.hDevNames = 0& Call PrintDlg(vPrintDlg) とすれば、 vPrintDlg.hDevNames と vPrintDlg.hDevMode に有効な値が入ってくるので、 わざわざ DEVNAMES などを自作しないでもすみます。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.