Imprimante par défaut en vb - la solution


Contenu du snippet

Après être venu ici, et avoir vu un lien vers MSDN je suis allé voir sur ce dernier comment les gens de µ$ résolvaient cette question.

Après analyse du code (plus de 300 lignes), il s'avère qu'il est toujours possible de faire compliqué quand on peut faire simple!

Voilà donc mon petit module que vous pourrez adapter à votre sauce.

Source / Exemple :


Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lparam As String) As Long
Sub Main()
  If Command$ = "" Then
    For Each Prt In Printers: Set Printer = Prt: m$ = m$ + vbCrLf + Printer.DeviceName: Next
    MsgBox "Pour changer l'imprimante par défaut, passez en paramètre au programme une sous-chaîne unique d'une des chaînes suivantes (attention aux majuscules/minuscules) :" + _
           vbCrLf + m$, 64, "ImpDefaut"
  Else
    For Each Prt In Printers
      If InStr(Prt.DeviceName, Command$) > 0 Then Set Printer = Prt: Exit For
    Next
    
    r = WriteProfileString("windows", "Device", Printer.DeviceName + "," + Printer.DriverName + "," + Printer.Port)
    l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows")
  End If
End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.