利用可能なプリンタをリストボックスに表示して、そのうちのひとつを
選択して「変更」ボタンをクリックすると、通常使うプリンタが
選択したプリンタになる画面を作成しているのですが、
うまく動作しません。
リストボックスに利用可能なプリンタを表示することは出来たのですが
変更が出来ません。
他のページ等でサンプルがあったので使用してみたのですが、
どうしても通常使うプリンタの変更が出来ません。
よい方法がある方は教えてください。
ちなみに、環境は下記の通りです。
Windows2000とWindowsXP
VB6(SP5)
APIのSetDefaultPrinterで出来ませんか?
編集 削除SetDefaultPrinter では、一部出来ないようなことを聞いたことがあります。
下の方法を使用すれば大丈夫だと思います。
Option Explicit
Private Declare Function GetVersion Lib "kernel32.dll" () As Long
Private Declare Function WriteProfileString Lib "kernel32.dll" Alias _
"WriteProfileStringA" (ByVal lpszSection As String, _
ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const HWND_BROADCAST As Long = &HFFFF&
Private Const WM_WININICHANGE As Long = &H1A&
Private Function isWindowsNT() As Boolean
isWindowsNT = IIf(GetVersion() And &H80000000, False, True)
End Function
Private Sub SetWindowsDefaultPrinter( _
ByVal DeviceName As String, ByVal DriverName As String, ByVal Port As String)
Dim param As String
param = DeviceName & "," & DriverName & "," & Port
WriteProfileString "windows", "device", param
If isWindowsNT Then
'Windows NT/2000
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0&, ByVal 0&
Else
'Windows 95/98/Me
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0&, ByVal "windows"
End If
Printer.EndDoc
End Sub
Private Sub Form_Load()
Dim tp As Printer
For Each tp In Printers
If tp.DeviceName = "変更したいプリンタ" Then
SetWindowsDefaultPrinter tp.DeviceName, tp.DriverName, tp.Port
Exit For
End If
Next tp
End Sub
# 私の書き込みから
# 当ページを最初に表示させた時
# エンコードが“西ヨーロッパ言語”
# になるようになってしまいました。
みなさんも最初、そうなって、
文字化けしていませんか?
回答の方、有難うございます。
実際に実行してみたのですが、変更が更新されるまでにかなり時間が
かかっています。(SendMessageが実行される時に時間がかかっています。)
変更する時に時間がかからない方法はありませんか?
よろしくお願いします。
WSH使うとか?
Dim objWsh As Object
Set objWsh = CreateObject("WScript.Network")
objWsh.SetDefaultPrinter デバイス名
Set objWsh = Nothing