Bon voilà, j'ai pondu cela....

V4 Beta 9
ce n'est pas tres jolie pour 2 raisons :
1°) Dans la procedure liste_imprimante() il me demande un tableau de 9000 imprimante, je ne comprends pas pourquoi ????
2°) Pour choisir l'imprimante j'ouvre une PrintRequester() et je choisi l'imprimante avec un envoie de touche à la fenetre
Mais bon en attendant mieux, cela marche
Je post le code, si vous avez une idée pour améliorer cela, je suis preneur.
Code : Tout sélectionner
Procedure liste_imprimante(id_combo)
nb_imprimante_a_lister.w=10 ;inconnu pour l'instant, on commence à 10
nb_imprimante_lister.w=0
taille_tableau=nb_imprimante_a_lister
Dim imprimante.PRINTER_INFO_2(taille_tableau)
Repeat
taille_tableau=nb_imprimante_a_lister
Redim imprimante.PRINTER_INFO_2(taille_tableau)
resu=EnumPrinters_(#PRINTER_ENUM_NAME,"",2,@imprimante(),taille_tableau,@nb_imprimante_a_lister,@nb_imprimante_lister)
Until resu=1
For i=nb_imprimante_lister To 0 Step -1 ;pour les avoir dans l'odre alphabetique !
If imprimante(i)\pPrinterName<>0
AddGadgetItem(id_combo,-1, PeekS(imprimante(i)\pPrinterName))
EndIf
Next
Debug "taille_tableau des imprimante = "+Str(taille_tableau)
SetGadgetState(id_combo,0)
EndProcedure
Procedure SimulateKeyPress(vk, Delay=50, control=0, alt=0, shift=0) ;par DROOPY
If control
keybd_event_(#VK_CONTROL, 0, 0,0)
EndIf
If alt
keybd_event_(#VK_MENU, 0,0,0)
EndIf
If shift
keybd_event_(#VK_SHIFT, 0,0,0)
EndIf
keybd_event_(vk, 0,0,0)
Delay(Delay)
keybd_event_(vk, 0, #KEYEVENTF_KEYUP, 0)
If control
keybd_event_(#VK_CONTROL, 0, #KEYEVENTF_KEYUP,0)
EndIf
If alt
keybd_event_(#VK_MENU, 0,#KEYEVENTF_KEYUP,0)
EndIf
If shift
keybd_event_(#VK_SHIFT, 0,#KEYEVENTF_KEYUP,0)
EndIf
EndProcedure
Procedure choix_imprimante(num); bon ça c'est pas tres beau mais pour l'instant je n'ai pas mieux....
Delay(50)
SimulateKeyPress(#VK_HOME)
For i=1 To num
SimulateKeyPress(#VK_DOWN)
Next
SimulateKeyPress(#VK_RETURN)
EndProcedure
OpenWindow (0,10,10,200,200, "ess", #PB_Window_SystemMenu )
CreateGadgetList ( WindowID (0))
ComboBoxGadget(1,10,10,180,200)
ButtonGadget(2,5,35,100,20,"ess")
liste_imprimante(1)
Repeat
event= WaitWindowEvent ()
Select event
Case #PB_Event_Gadget ; *****************Choix d'un bouton
Select EventGadget()
Case 2
i=GetGadgetState(1)+1
CreateThread(@choix_imprimante(), i)
PrintRequester()
StartPrinting("Test impression")
StartDrawing(PrinterOutput())
DrawText(10,10,"test")
StopDrawing()
StopPrinting()
EndSelect
EndSelect
Until event=#WM_CLOSE