Bonjour,
je développe actuellement sous Builder 6 et je cherche à changer l'imprimante par défaut de Windows directement par programme et sans que l'utilisateur n'intervienne.
Quelqu'un connait-il une commande pour cela ?
Merci
Version imprimable
Bonjour,
je développe actuellement sous Builder 6 et je cherche à changer l'imprimante par défaut de Windows directement par programme et sans que l'utilisateur n'intervienne.
Quelqu'un connait-il une commande pour cela ?
Merci
Une recherche avec Google t'aurait amener par exemple sur cette page
Je connais ce tutoriel et la fonction est valable pour le programme mais ne change pas l'imprimante par défaut de Windows.
Mon problème réel est que je fais des éditions avec QuickReport 5.02 et j'ai diverses impressions qui peuvent sortir ou sur des imprimantes différentes ou sur une même imprimante avec plusieurs bacs.
Dans le cas de l'imprimante à bac, j'ai installé autant de fois l'imprimante qu'elle a de bacs, avec une sélection forcée d'un bac et non une sélection automatique.
Dans mon code, j'ai une page de paramètres où j'attribue à chaque impression le nom d'une imprimante (stocké dans un fichier ini) et dans le code le récupère le nom et force normalement l'imprimante choisie de cette manière :
IMPRESSION_ORDO est un int indiquant le numéro de mon impression.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 int TiMain::ForceImprimanteRapport(int Index_Imp) { AnsiString Imprimante=""; int ImpRapport; ImpRapport = Printer()->Printers->IndexOf(iReg->ReadString((AnsiString)Index_Imp,"imprimante","")); return ImpRapport; } . . . iImpRegistre->isrep1->PrinterSettings->PrinterIndex = iMain->ForceImprimanteRapport(IMPRESSION_ORDO);
Avec ce code :
- lorsque je fais iImpRegistre->isrep1->Print(), la feuille sort sur l'imprimante par défaut
- iImpRegistre->isrep1->Preview() puis que j'appuie sur le bouton "impression", la feuille sort sur l'imprimante par défaut,
- iImpRegistre->isrep1->Preview() puis que j'appuie sur le bouton "paramètre d'impression" et que je valide l'imprimante (qui est bien celle sur laquelle je souhaite imprimer), la feuille sort bien sur la bonne imprimante.
Donc sois je trouve comment configurer correctement les composants QuickReport, sois je force l'imprimante de windows sur l'imprimante que je souhaite.
Salut magicseb007
Il faudrait peut ere regarder du cote de l'aide BCB6 Windows SDK " PRINTER_DEFAULTS "
Voila ma fonction qui change l'imprimante par défaut :
En gros, ça change l'imprimante par défaut dans la base de registre (HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Window\Device="nomimprimante,spooler,port")Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 //**************************************** //! @brief Change l'imprimante par défaut //! //! @param nomImpr : nom de l'imprimante par défaut //! //! @return vrai si le changement a été effectué, faux sinon //**************************************** bool _fastcall ChangerImprimanteParDefaut(String nomImpr) { bool ok = true; // Vrai si changement OK, faux sinon TCHAR pBuffer[1024]; // Buffer de réception TCHAR *pSpooler; // Nom du spooler TCHAR *pPort; // Nom du port de communication try { // Récupération du port de communication if (!(GetProfileString("PrinterPorts", nomImpr.c_str(), "", pBuffer, 1024) > 0)) throw Exception("Le changement d'imprimante n'a pu être effectué."); // Récupération du spooler pSpooler = _tcstok(pBuffer, ","); if (pSpooler) { // Récupération du nom du port de communication pPort = _tcstok(NULL, ","); if (pPort) { // Définition de l'imprimante par défaut _stprintf(pBuffer,"%s,%s,%s", nomImpr.c_str(), pSpooler, pPort); WriteProfileString("windows", "Device", pBuffer); // Propagation du changement d'imprimante #if WM_WININICHANGE != WM_SETTINGCHANGE // Ancien message SendNotifyMessage(HWND_BROADCAST,WM_WININICHANGE,0, (LPARAM)(LPCTSTR)"windows"); #endif SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)(LPCTSTR)"windows"); } else throw Exception("Le changement d'imprimante n'a pu être effectué."); } else throw Exception("Le changement d'imprimante n'a pu être effectué."); } // fin du try catch (Exception& except) { if (!except.Message.IsEmpty()) // Affichage d'un message d'erreur ShowMessage(except.Message); ok = false; } // Retour de fonction return ok; } // fin de ChangerImprimanteParDefaut
et ça broadcast un message de changement de paramètres (WM_SETTINGCHANGE) pour notifier toutes les applications (windows y compris) qu'un paramètre (l'imprimante par défaut) a changé.
Nirgal76