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
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.