Soyez le premier à donner votre avis sur cette source.
Vue 13 702 fois - Téléchargée 1 281 fois
'utilisé pour word Dim docword As New Word.Application 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 'La fonction FindWindow va permettre de retouver un Handle afin de pouvoir fermet la tache Acrobat Reader Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private docPdf As Boolean Private Const GW_HWNDFIRST = 0 Private Const GW_HWNDNEXT = 2 'Je ne sais pas vraiment ce que ca contrôle mais c'est présent sur tout les windows. 'Grace à ce "Shell_TrayWnd" windows va nous retourner son handle qui sera bien pretique Private Const monSuperHandle = "Shell_TrayWnd" Public Sub GoImprime(unChemin As String) 'teste permettant de savoir si le fichier est un RTF ou un PDF Dim teste As String teste = UCase$(Right$(unChemin, 3)) If teste = "PDF" Then Dim Retour As Long docPdf = True '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, vbNullString, 1) 'mise en route du timer Timer1.Enabled = True '150 miliseconde avant la fermeture de word Timer1.Interval = 150 Else docPdf = False '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 'en gros fals va permètre d'ouvrir WinWord en tache de fond 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() If docPdf = True Then 'cette partit de code à été récupéré je l'ai un tout petit peut modifié 'la source de ce code http://www.vbfrance.com/article.aspx?ID=5188 Dim CurrWnd As Long Dim Parent As Long Dim Length As Long Dim NomTache As String Dim NomAAR As String ' Handle de la fenetre active 'pourquoi un findWindow??? 'Je sais pas si vous avez déja de récupérer un handle depuis un Controle ActiveX 'c'est pas gagné, c'est pour cela qu'ici on récupère le Handle d'un composant toujours 'présent dans windows CurrWnd = GetWindow(FindWindow(monSuperHandle, vbNullString), 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 '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 'on ferme l'application reSultat = PostMessage(CurrWnd, 16, vbNull, vbNull) End If End If CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT) DoEvents Wend Else 'estinction du timer Timer1.Enabled = False 'fermeture de word docword.Application.Quit (0) End If End Sub
Merci quand même.
et celui-ci est utilisé à la ligne 46
45 # 'mise en route du timer
46 # Timer1.Enabled = True
il permet de marquer une pose le temps que la page s'imprime.
je suis désolé de ne pas pouvoir apporter plus de précision, ce code a été fait lors de l'un de mes stage (2005), et depuis celui ci je n'est plus touché au VB.
En description tu dis "Au faite vous allé avoir besoin d'un controle Timer... " cad il y a quelque chose a installer?
Bien a toi.
Franchement aucune idée. Et comme ca fait un moment que je n'est pas touché à ce code, c'est possible qu'il ne fonctionne plus avec XP SP2.
Désolé de ne pas pouvoir t'apporter plus de réponse.
J'ai un soucis avec ce code, il me fait planter internet explorer, y a t'il des trucs spécifique a installer pour le faire marcher?
Bien à vous.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.