Bonjour je dois imprimer des documents PDF a partir de mon application.
pour cela j'utilise cette méthode :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
[DllImport("shell32.dll")]
private static extern int ShellExecuteA(IntPtr hwnd, string operation, string file, string paramters, string directory, int showcmd);
 
private void Print()
{
     if (_filename != null)
     { ShellExecuteA(IntPtr.Zero, "print", _filename, null, null, 0); }
}
A partir de la, aucun problème, il ouvre brièvement adobe et lance l'impression dans la foulé.

Seulement il ne me demande pas l'imprimante et lance sur celle par défaut.
Alors pour détourné cela je change l'imprimante par défaut juste avant ce cette manière :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SetDefaultPrinter(string Name);
 
public static void change(string printer)
{
     SetDefaultPrinter(printer);
}
 
if (printDlg.ShowDialog() == DialogResult.OK)
{
    change(printDlg.PrinterSettings.PrinterName);
//////////////////////////
    Print();
//////////////////////////
}
Avant sa je récupère l'imprimante par défaut actuel pour la remétre après mon traitement.

De cette façon je permet a l'utilisateur de choisir son imprimante, mais le problème est le suivant :
Quand je laisse l'imprimante par défaut, pas de problème !
Quand je choisie une autre imprimante, il continue a imprimé sur la dernière?!?!
Pourtant l'imprimante par défaut change bien
En recommencent un nombre aléatoire de fois l'impression se fait bien sur celle que je veux. Après je veux retenter sur celle par défaut et il imprime sur la dernière malgrés que se soit pas celle par defaut

je me suis aperçus d'une chose en mode debug : l'impression ne s'exécute pas juste après "Print();" mais une ou deux ligne après...

pouvez vous m'aider svp? je ne comprend vraiment pas!
merci d'avance