Api et controle Active X

cs_Waldo2188 Messages postés 142 Date d'inscription jeudi 12 février 2004 Statut Membre Dernière intervention 20 mai 2008 - 14 févr. 2005 à 14:53
cs_Cheval Messages postés 81 Date d'inscription dimanche 21 juillet 2002 Statut Membre Dernière intervention 11 octobre 2015 - 28 mars 2005 à 19:27
Salut à tous

Je suis donc en stage où l’on ma demandé de créer un
contrôle active X permettant d’imprimer un fichier qui lui est passé en
paramètre.




Le contrôle est appelé dans une page web par une fonction
javascript.









Ce contrôle doit pouvoir imprimé deux types de
fichier :




-
Document Word avec comme extension RTF




-
Document Acrobat Reader avec comme extension PDF









Mon Problème :




Je bloque sur l’utilisation de certaines API, car le
contrôle Active X doit être capable d’imprimer un fichier au forma PDF. Pour
cela j’ouvre le fichier passé en paramètre grâce à la fonction « ShellExecute ». Par la suite je
dois fermer cette application, pour cela il faut récupérer son Handle, mais je
n’y arrive pas du tout.









J’ai donc récupéré du code sur Internet qui permet de lister
toute les applications en cours. Sur celui-ci je pouvais récupérer le Handle de
Adobe Acrobat Reader. J’ai donc recréé le même code sur mon contrôle active X,
mais cela ne marche pas. Je ne vois pas d’où viens mon problème.









Je vous met ci dessous le code de mon contrôle active X (Il
a besoins de deux contrôle Timer)









'utilisé
pour word




Dim docword
As New Word.Application









'utilisé pour Adobe Acrobat Reader




'Ouvre AAR




Private
Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String,
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As
String, ByVal nShowCmd As Long) As Long









'Permet de fermer la fenetre




Private
Declare Function PostMessage Lib "user32.dll" Alias
"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam
As Long, ByVal lParam As Long) As Long









' La fonction GetParent recherche le handle du parent
propriétaire de la fenêtre indiquée.




Private
Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long









' La fonction GetWindow recherche le handle de la fenêtre
active




Private
Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal
wCmd As Long) As Long









' La fonction GetWindowTextLength recherche la longueur, en
caractères, du texte de barre du titre de la fenêtre indiquée (si la fenêtre a
une barre de titre). Si la fenêtre indiquée est une commande, la fonction
recherche la longueur du texte dans la commande. Cependant, GetWindowTextLength ne peut pas rechercher la longueur
du texte d'une commande d'édition dans une autre application.




Private
Declare Function GetWindowTextLength Lib "user32" Alias
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long









' La fonction GetWindowText copie le texte de la barre du
titre de la fenêtre indiquée (si elle a un) dans un buffer. Si la fenêtre
indiquée est une commande, le texte de la commande est copié. Cependant,
GetWindowText ne peut pas rechercher le texte d'une commande dans une autre
application.




Private
Declare Function GetWindowText Lib "user32" Alias
"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal
cch As Long) As Long









Private
meHwnd As Long




Private
Const GW_HWNDFIRST = 0




Private
Const GW_HWNDNEXT = 2














Public Sub
GoImprime(unChemin As String)




'teste permettant de savoir si le fichier est un RTF ou un
PDF









Dim teste
As String




Dim toto As
Boolean









teste =
Right$(unChemin, 3)









If teste "pdf" Or teste "PDF" Then




Dim Retour As Long









'la fonction
ShellExecute va ouvrir l'application adapté à l'extention et le paramètre Print
va permetre d'imprimer, l'application sara ensuite fermé




Retour =
ShellExecute(hwnd, "print", unChemin, "", vbNullString, 0)














'mise en route du
timer




Timer2.Enabled =
True









'10 sec avant la
fermeture de word




Timer2.Interval = 10000









Call Timer2_Timer














Else









'Enonciation des
variables




'Création d'une
instance de WinWord




Set docword =
CreateObject("word.application")




'True pour word visible et false
pour le mettre en arrière plan





docword.Visible = False










docword.DisplayAlerts = False
'évite les erreurs de traitement









'ouverture du
document, sans la sélection du type de selui-ci




doc =
docword.Documents.Open(unChemin, 0)




'impression de
celui ci





docword.ActiveDocument.PrintOut









'mise en route du
timer




Timer1.Enabled =
True









'10 sec avant
la fermeture de word




Timer1.Interval = 1000









End If














End Sub









Private Sub
Timer1_Timer()




'estinction
du timer




Timer1.Enabled = False




'fermeture
de word




docword.Application.Quit (0)









End Sub









Private Sub
Timer2_Timer()




Dim
reSultat As Long




MsgBox (meHwnd)




'Récupération des handle afin de trouver celui de acrobat
Reader




Dim CurrWnd As Long




Dim Parent As Long




Dim Length As Long




Dim NomTache As String




Dim NomAAR As String




Dim monHandle As Long




Dim reSultat As Long









' Handle de la fenetre active




CurrWnd = GetWindow(hwnd,
GW_HWNDFIRST)




While CurrWnd 0




' On prend la
fenetre mere de l'application




Parent = GetParent(CurrWnd)




Length = GetWindowTextLength(CurrWnd)




NomTache = Space$(Length + 1)




Length = GetWindowText(CurrWnd,
NomTache, Length + 1)




' Ici on a le nom de la fenetre
qui apparait dans la barre du CTRL+ALT+SUPP




NomTache = Left$(NomTache,
Len(NomTache) - 1)









If NomTache "" Then




List1.AddItem NomTache +
":" + Str(CurrWnd)









'récupération d'une partie
du nom du processus




NomAAR =
Left$(NomTache, 14)




'on recherche un certain processus afin
de récupérer son handle




If NomAAR = "Acrobat
Reader" Then




meHwnd = CurrWnd




'on
ferme l'application




reSultat = PostMessage(meHwnd,
WM_CLOSE, vbNull, vbNull)




End If




End If









CurrWnd = GetWindow(CurrWnd,
GW_HWNDNEXT)









Wend









End Sub









Je vous remercie d’avance pour votre réponse.




MWT

2 réponses

pepsidrinker Messages postés 151 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 15 avril 2009
18 févr. 2005 à 01:29
Pepsidrinker
Tu peux toujours essayer , avec, Findwindow comme API, (pour avoir le classename, utilise un APIspyer ...j'en ai un si tu le veux).
Grace a sa, tu vas pouvoir récuperer tout les hwnd des fenetre utilisant Acrobat Reader. Ensuite, tu passe le handle pour l'imprimerie..
0
cs_Cheval Messages postés 81 Date d'inscription dimanche 21 juillet 2002 Statut Membre Dernière intervention 11 octobre 2015
28 mars 2005 à 19:27
Bonjour a tous,

J'ai creer un prog en VB pour extraire les icone.

Tou va bien sauf que si je demande d'extraire toutes les icones des dll du systeme il y en a 3312 en gros et à 1200 j'ai memoire insuffisante.

Quelqu'un pourait-il me donner la solution pour fermer les buffer qui se créer.
Un fois les icones sauvegardées je voudrai fermer ou effacer les buffer inutils.

Devant etre absent quelque temp pourriez vous me faire parvenir les réponses sur
mon mel perso : serge.cheval@laposte.net

Merci
0
Rejoignez-nous