Newsgroup: it.comp.lang.visual-basic
Titolo: come settare una stampante come predefinita?

Ho provato a utilizzare il comando 
SET PRINTER
ma mi pare abbia efficacia solo durante la sessione dell'applicazione
in corso.
Devo invece cambiare la stampante predefiniìta di windows affinchè una
altra applicazione successivamente usi tale printer.
Sbaglio da qualche parte?
Non e' possibile da codice?
Ho provato ad investigare nel registry, ma mi pare una via non
praticabile (ogni stringa di printer, porta associato il suo
progressivo, che può essere diverso da pc a pc..)
Ciao a tutti
   Nicola Tornieri
   ----------------------------
  Manens Intertecnica srl
  tornieri[at]
manens.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 wrote in message
39f99581...@192.168.30.240...

Cito da MSDN
Sintassi
oggetto.PrinterDefault [= valore]
La sintassi della proprietà PrinterDefault è composta dalle seguenti parti:
Parte Descrizione
oggetto Espressione oggetto che definisce un oggetto dell'elenco "Si applica
a".
valore Espressione booleana che specifica se le selezioni dell'utente
vengono utilizzate per modificare le impostazioni della stampante
predefinita del sistema, come indicato nella sezione "Impostazioni".
Impostazioni
Le possibili impostazioni di valore sono:
Impostazione Descrizione
True Le selezioni eseguite dall'utente nella parte di impostazione della
finestra di dialogo Stampa (selezione della stampante, orientamento e così
via) vengono utilizzate per modificare le impostazioni di stampa nel
registro di configurazione.
False Le selezioni dell'utente non modificano le impostazioni di stampa
predefinite del sistema.
(
http://www.microsoft.com/Italy/msdn/library/cmdlg98/vbproprinterdefault.htm
)
Ciao =)
Matteo

 wrote in message
8tc764$skl$1...@lacerta.tiscalinet.it...

Scusa, ho sbagliato mira.
Questo credo sia quello che stai cercando.
SUMMARY
To set the default printer programmatically under Windows 95, use the
SetPrinter() Win32 API function.
Note that the SetPrinter() API call is a valid method, but is
platform-dependent and should work only on Windows 95 (it does not work on
Windows NT or on a 16-bit platform).
MORE INFORMATION
To set or change the default printer under Windows 95, call:
SetPrinter(HANDLE hPrinter, DWORD dwLevel, LPBYTE lpbPrinter,
DWORD dwCommand)
Obtain the hPrinter parameter from OpenPrinter() as a handle that identifies
the desired printer. Set the dwLevel parameter to 5, and point lpbPrinter to
the PRINTER_INFO_5 structure. Set the dwCommand parameter to 0 (zero). Fill
out the PRINTER_INFO_5 structure appropriately making sure that the
Attributes field has PRINTER_ATTRIBUTE_DEFAULT set.
(
http://support.microsoft.com/support/kb/articles/Q140/5/60.asp
)

 (
http://support.microsoft.com/support/kb/articles/Q140/5/60.asp
)
stando alla guida, potrebbe bastare un metodo piu' semplice. in teoria.
l'esempio ms e':
Dim X As Printer
For Each X In Printers
   If X.Orientation = vbPRORPortrait Then
      ' Imposta la stampante come predefinita di sistema.
      Set Printer = X
      ' Interrompe la ricerca di una stampante.
      Exit For
   End If
Next
ho provato a mettere un listbox e un command:
Option Explicit
Private Sub Command1_Click()
    If List1.List(List1.ListIndex) = "" Then
        MsgBox "Pick-A-Printer :)"
        Exit Sub
    End If
    Dim a As Printer
    For Each a In Printers
        If a.DeviceName = List1.List(List1.ListIndex) Then
            Set Printer = a
            Exit For
        End If
    Next
End Sub
Private Sub Form_Load()
    Dim a As Printer
    For Each a In Printers
        List1.AddItem a.DeviceName
    Next
End Sub
non da' nessun errore, ma in windows 2000 non ci pensa proprio a settare
predef ne' le stampanti in linea ne' quelle che non trova.
(fra l'altro, sono a casa, e mentre giustamente non ne trova una collegata a
un printserver e una collegata a un server dell'ufficio, win me ne da'
pronta una che la' ha scheda di rete e ip suoi. dove la trovi bill solo lo
sa).
qualcuno con win95/98/me puo' provare il codice e vedere se funziona ?
grazie, a.

 wrote in message
8tcifh$m9poc$4...@ID-51318.news.dfncis.de...


 Next
Questo codice non va a toccare le impostazioni della stampante predefinita
di Windows, ma ne utilizza una a caso tra le tante (la prima che trova) che
gli possa andar bene.
Io avevo capito che Nicola volesse modificare proprio la stampante
predefinita di Windows via codice.


 predefinita di Windows via codice.
ho come il sospetto che quello che tu intendi con "stampante predefinita di
windows" assomigli tanto a quello che ms chiama "stampante predefinita di
sistema" (quarta riga dell'esempio ms). il "sistema" per antonomasia, specie
in vb, per ms credo sia uno solo. e quel codice, se ricordo, mi funzionava
in w95 con vb5sp3.

sai usare ado e dao.
Aggiungerei anche che so fare copia e incolla da MSDN =)

 Aggiungerei anche che so fare copia e incolla da MSDN =)
:)
siamo in due. prova a confrontare il tuo esempio col mio.
solita incoerenza ms: una riga dice "di sistema". tre righe sotto "per
l'applicazione".
comunque provero' il tuo esempio con l'api. questo codice in win2k non
funzia proprio.
almeno, in win2ksp1ita + vb6sp3ita.
magari con sp4 ha ripreso...

 wrote in message
8tjsup$n5qes$1...@ID-51318.news.dfncis.de...

Quella chiamata all'API dovrebbe funzionare solo con Win95 (MSDN dice cosě).
Non capisco... forse mi sfugge qualcosa...
Ma come cavolo fa uno ad impostare una stampante predefinita con sistemi
operativi successivi?
Microsoft non ne parla proprio :)
Fammi sapere se con Windows 2000 funziona...
Appena ho tempo lo provo col 98 e con WinMe.
Ciao Pal =)

 Ho bisogno di sapere qual'è la stampante di default prima di effettuare
delle operazioni di stampa con la CommonDialog per poi ripristinarla al
termine. (Non ditemi di non usarla poiché la specifica è quella). Ho quindi
bisogno di due API (credo), una per salvare in qualche modo la stampante di
default e l'altra per ripristinarla.
Ho tempo solo di copiarti l'esempio dell' MSDN
_____________________________________________
Notes to Keep in Mind
The Device value you get or set actually contains three elements
separated by commas as follows:
<printer name>,<driver name>,<port>
For example:
My Printer,HPPCL5MS,lpt1:
When setting the default printer, you must specify valid names for these
elements. That is, you must specify a valid printer,
driver, and port. If not, programs such as Print Manager may set the printer
back to the previous valid printer, and other programs
may become very confused. You can use the EnumPrinters API to retrieve the
printer name, driver name, and port name of all available
printers.
Windows 95 and Windows NT map most .INI file references to the registry.
Because of this mapping, GetProfileString and
WriteProfileString still function as they do under 16-bit Windows (Microsoft
Windows and Windows for Workgroups).
After setting the default printer, notify all other applications of the
change by broadcasting the WM_WININICHANGE message.
// This code uses a sample profile string of "My Printer,HPPCL5MS,lpt1:"
// To get the default printer for Windows 3.1, Windows 3.11,
// Windows 95, and Windows NT use:
GetProfileString("windows", "device", ",,,", buffer, sizeof(buffer));
// To set the default printer for Windows 3.1 and Windows 3.11 use:
WriteProfileString("windows", "device", "My Printer,HPPCL5MS,lpt1:");
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0L);
// To set the default printer for Windows 95 use:
WriteProfileString("windows", "device", "My Printer,HPPCL5MS,lpt1:");
SendMessageTimeout(HWND_BROADCAST, WM_WININICHANGE, 0L,
(LPARAM)(LPCTSTR)"windows", SMTO_NORMAL, 1000, NULL);
// To set the default printer for Windows NT use:
/* Note printer driver is usually WINSPOOL under Windows NT */
WriteProfileString("windows", "device", "My Printer,WINSPOOL,lpt1:");
SendMessageTimeout(HWND_BROADCAST, WM_WININICHANGE, 0L, 0L,
SMTO_NORMAL, 1000, NULL);