[resolu] IMPRIMER AVEC WORDPAD

IMPRIMER AVEC WORDPAD [resolu] - C++ - Programmation

Marsh Posté le 01-10-2002 à 17:27:09    

voila j ouvre bien mon fichier directement avec la commande:
system(PATH_wordpad PATH_fichier);
 
mais je souhaiterais imprimer directement puis refermer
(en gros faire un CTRL-P puis fermeture ou au moins le CTRL-P)
 
1: est-ce possible?
2: possible avec system?
3: sinon avec koi d autre?
 
OS : Win2K
compilo : DEV-C++
EXE : mode-console
fichier en C (pas en C++)


Message édité par nicolasm le 02-10-2002 à 09:59:06
Reply

Marsh Posté le 01-10-2002 à 17:27:09   

Reply

Marsh Posté le 01-10-2002 à 19:08:23    

Question préalable : le but est d'imprimer du texte, ou d'utiliser obligatoirement NOTEPAD pour ce faire ?
 
Peut-être envoyer un message à Notepad une fois lancé (à condition de trouver son hWnd), mais "CTRL+P", marchera-ce ? C'est pas un message Windows....
 
A moins qu'il n'y ait un "notepad machin.txt /P" qui lancerait l'impression ?? Je viens d'essayer, c'est pas bon. :( /print non plus...
 
Une commande DDE "print" ? Ca, ça devrait fonctionner, vu qu'il ne faut pas choisir une imprimante sur la machine, sinon un dialogue de plus. A condition que NOTEPAD accepte DDE.


Message édité par Carbon_14 le 01-10-2002 à 19:08:51
Reply

Marsh Posté le 01-10-2002 à 19:18:47    

The simplest soluce :
 
PFE m'a aiguillé (éditeur concurent gratuit multi-document ASCII de NOTEPAD).
 
Faut faire  
path_notepad /p path_fichier
 
Avec PFE, ça devrait aussi marcher (si fichier trop gros), mais j'avais utilisé le commutateur /P en majuscule => il demande l'imprimante voulue (pas pratique pour être discret).

Reply

Marsh Posté le 01-10-2002 à 20:44:11    

Bien que la solution précédente marche très bien, j'aurais tendance à préferer l'utilisation de la fonction ShellExecute (ou ShellExecuteEx si tu souhaites plus de contrôle). Elle a plusieurs avantages : pas besoin de préciser l'éditeur à lancer, compatible même si wordpad disparaît ou n'est pas installé (et encore d'autres).
 
Exemple d'utilisation :

Code :
  1. ShellExecute( NULL, TEXT("print" ), TEXT("mondocument.rtf" ), NULL, NULL, SW_SHOW );


---------------
each day I don't die is cheating
Reply

Marsh Posté le 01-10-2002 à 21:26:15    

On reconnait les pros..
 
Son "system(path_notepad /p path_fichier)", il ne provoquerait pas l'affichage d'une feuille furtive ? ShellExecute est plus adapté.

Reply

Marsh Posté le 02-10-2002 à 01:03:59    

J'ai regardé vite fait comment est implémentée la fonction system dans Visual C++ .NET. Apparemment l'argument de la fonction (le programme choisi et ses éventuels paramètres) est lancée au travers de la variable d'environnement système ComSpec qui semble indiquer le programme implémentant la ligne de commande (par défaut Cmd.exe sous Windows NT/2000/XP et Command.exe sous Windows 95/98/ME).
Ce programme est lui même lancé au travers de la fonction _tspawnve.
 
On obtient donc au final une fonction du genre:

Code :
  1. argv[][] = { "C:\\WINNT\\system32\\Cmd.exe",  // ComSpec
  2. "/c",  // permet de quitter "Cmd.exe" à la fin de l'execution
  3. "\"C:\\Program Files\\Windows NT\\Accessoires\\wordpad.exe\" /p \"C:\\mydoc.rtf\"",  // argument de la fonction system
  4. NULL
  5. }
  6. _tspawnve(_P_WAIT,argv[0],argv,NULL)


 
Au final, cette fonction va donc executer la commande C:\WINNT\system32\Cmd.exe /c "C:\Program Files\Windows NT\Accessoires\wordpad.exe" /p "C:\mydoc.rtf". C'est sûr que cela semble un peu lourd !
 
La fonction ShellExecute (et sa soeur ShellExecuteEx) semble être la plus complète des fonctions et celle recommandée par Microsoft. Par contre une fonction telle que CreateProcessAsUser est indispensable si l'on veut executer l'application avec des privilèges autres que ceux de l'utilisateur en cours.


---------------
each day I don't die is cheating
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed