Hej hopp!! Försök med nedanstående kod ja det funkar ju hyffsat.. kan läsa mig fram till rätt skrivare och så men jag anväder ju inte printer-objectet för att skriva ut utan datareports. Går det att via typ API eller något annat att byta defaultskrivare i koden till den man sökt fram och sedan efter att man gjort sin utskrift då byta tillbaka om man så önskar? Hej..Flera skrivare..
Har en applikation som använder sig av två olika skrivare beroende på typ av utskrift (en kvittoskrivare och en "vanlig" skrivare). De flesta utskrifter använder kvittoskrivare för sina utskrifter och därför är den satt som default i windows och jag kan ju då bara skicka iväg utskrifterna direkt och det går ju fint.
Men på ett ställe vill jag skriva till den "vanliga" skrivare och då har jag i dagsläget gjort så att jag kör en show på min printreport för att få upp möjligheten att välja vilken skrivare jag ska skriva till.
Finns det något sätt att kringgå detta? Jag vet ju vad skrivarna heter och vilka utskrifter som ska till vilken skrivare. Kan man via VB byta default-skrivare eller på något sätt säga till datorn att ta HP-skrivaren istället för default?
/peter
Ps. Jag har använt VBs egna DataReports för mina utskrifter så jag skriver ju ut med rapportnamn.PrintReport [True] Sv: Flera skrivare..
<code>
Dim P As Object
For Each P In Printers
If P.DeviceName Like "*Skrivarnamn*" Then
Set Printer = P
Exit For
End If
Next P
</code>
Man kan också välja utifrån skrivarport om det skulle vara enklare.
(Jag har för mig att man använder P.Port i så fall.Sv: Flera skrivare..
Mvh
PeterSv: Flera skrivare..
Lägg detta i en modul:
<code>
Public Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const HWND_BROADCAST = &HFFFF&
Public Const WM_WININICHANGE = &H1A
Public Function SetDefaultPrinter(objPrn As Printer) As Boolean
Dim x As Long, sztemp As String
sztemp = objPrn.DeviceName & "," & objPrn.DriverName & "," & objPrn.Port
x = WriteProfileString("windows", "device", sztemp)
x = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0&, "windows")
End Function
</code>
//fredda