help svp problème simuler appuie touches avec blocage window

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

help svp problème simuler appuie touches avec blocage window

Message par david »

je veux simuler l'appuie de touches (genre TAB et ENTER) pour prendre les commandes d'une autre fenêtre. Je l'ai déjà fait par le passé avec le programme suivant :

Code : Tout sélectionner

Declare  SendKeys(handle,window$,keys$)
w$="titre de la fenetre qui a le focus"
SendKeys(0,w$,"{TAB}"):SendKeys(0,w$,"{ENTER}")

; ****************************************************************************************
; ************************ PROCEDURE ****************************************************
; ****************************************************************************************
Procedure SendKeys(handle,window$,keys$)
    If window$<>"" : handle=FindWindow_(0,window$) : EndIf ; Use window$ instead of handle.
    If IsWindow_(handle)=0 ; Does the target window actually exist?
        ProcedureReturn 0 ; Nope, so report 0 for failure to type.
    Else
        ; This block gives the target window the focus before typing.
        thread1=GetWindowThreadProcessId_(GetForegroundWindow_(),0)
        thread2=GetWindowThreadProcessId_(handle,0)
        If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf
        SetForegroundWindow_(handle) ; Target window now has the focus for typing.
        Delay(125) ; 1/8 second pause before typing, to prevent fast CPU problems.
        ; Now the actual typing starts.
        For r=1 To Len(keys$)
            vk$=Mid(keys$,r,1)
            If vk$="{" ; Special key found.
                s=FindString(keys$,"}",r+1)-(r+1) ; Get length of special key.
                s$=Mid(keys$,r+1,s) ; Get special key name.
                Select s$ ; Get virtual key code of special key.
                    Case "ALTDOWN" : keybd_event_(#VK_MENU,0,0,0) ; Hold ALT down.
                    Case "ALTUP" : keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT.
                    Case "BACKSPACE" : vk=#VK_BACK
                    Case "CONTROLDOWN" : keybd_event_(#VK_CONTROL,0,0,0) ; Hold CONTROL down.
                    Case "CONTROLUP" : keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL.
                    Case "DELETE" : vk=#VK_DELETE
                    Case "DOWN" : vk=#VK_DOWN
                    Case "END" : vk=#VK_END
                    Case "ENTER" : vk=#VK_RETURN
                    Case "F1" : vk=#VK_F1
                    Case "F2" : vk=#VK_F2
                    Case "F3" : vk=#VK_F3
                    Case "F4" : vk=#VK_F4
                    Case "F5" : vk=#VK_F5
                    Case "F6" : vk=#VK_F6
                    Case "F7" : vk=#VK_F7
                    Case "F8" : vk=#VK_F8
                    Case "F9" : vk=#VK_F9
                    Case "F10" : vk=#VK_F10
                    Case "F11" : vk=#VK_F11
                    Case "F12" : vk=#VK_F12
                    Case "ESCAPE" : vk=#VK_ESCAPE
                    Case "HOME" : vk=#VK_HOME
                    Case "INSERT" : vk=#VK_INSERT
                    Case "LEFT" : vk=#VK_LEFT
                    Case "PAGEDOWN" : vk=#VK_NEXT
                    Case "PAGEUP" : vk=#VK_PRIOR
                    Case "PRINTSCREEN" : vk=#VK_SNAPSHOT
                    Case "RETURN" : vk=#VK_RETURN
                    Case "RIGHT" : vk=#VK_RIGHT
                    Case "SHIFTDOWN" : shifted=1 : keybd_event_(#VK_SHIFT,0,0,0) ; Hold SHIFT down.
                    Case "SHIFTUP" : shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT.
                    Case "TAB" : vk=#VK_TAB
                    Case "UP" : vk=#VK_UP
                EndSelect
                If Left(s$,3)<>"ALT" And Left(s$,7)<>"CONTROL" And Left(s$,5)<>"SHIFT"
                    keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the special key.
                EndIf
                r=r+s+1 ; Continue getting the keystrokes that follow the special key.
            Else
                vk=VkKeyScanEx_(Asc(vk$),GetKeyboardLayout_(0)) ; Normal key found.
                If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,0,0) : EndIf ; Due to shifted character.
                keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key.
                If vk>304 And shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) : EndIf ; Due to shifted character.
            EndIf
        Next
        If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf ; Finished typing to target window!
        keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key if user forgot.
        keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key if user forgot.
        keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key if user forgot.
        ProcedureReturn 1 ; Report successful typing! :)
    EndIf
EndProcedure 
le pb c'est que je veux paramétrer automatiquement l'imprimante (emulation des touches nécessaires pour modifier les options et simuler ENTREE pour valider mon choix)
apparament la fenetre qui apparait est "blocante" ce n'est qu'après sa fermeture que mon programme continue. voir exemple :

Code : Tout sélectionner

If PrintRequester()
Delay(1500)
MessageRequester("hh","hhh"+valeur2$)
EndIf
comment empecher la fenetre "Imprimer" de me bloquer??? je veux faire TAB... dans cette fenetre pour aller sur "Options d'impression" et modifier automatiquement..

Si c'est pas faisable comme ça, comment modifier les paramètres imprimante avec PB
sachant que je ne dispose pas des droits ADMIN sur le PC
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: help svp problème simuler appuie touches avec blocage wi

Message par Ar-S »

Ta fenêtre "d'imprimante" doit avoir son propre handle. Il faut donc à mon avis que tu envois les SendKey nécessaires dans cette fenêtre aussi.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: help svp problème simuler appuie touches avec blocage wi

Message par david »

pourtant la procédure semble aller s'approprier le handle en question de la fenêtre active??
je ne la maitrise pas vraiment. c'était l'exemple pb pour modifier notepad.

je pense n'ayant pas de droits admin... sur le PC que je serais obligé de passer par cette fenetre pour modifier les parametres.

malheureusement, mon exemple2 avec messagerequester montre que mon programme PB est lui meme bloque par windows puisqu'il ne reprend que lorsque je ferme la fenetre
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: help svp problème simuler appuie touches avec blocage wi

Message par david »

Si je lance avec l'editeur PB le prog1:

Code : Tout sélectionner

If PrintRequester()
EndIf
Je laisse ouvert mais lance le prog2:

Code : Tout sélectionner

Declare  SendKeys(handle,window$,keys$)
w$="Imprimer"
Delay(1000) : SendKeys(0,w$,"{TAB}"):SendKeys(0,w$,"{TAB}"):SendKeys(0,w$,"{ENTER}")
ça marche??!!
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: help svp problème simuler appuie touches avec blocage wi

Message par Ar-S »

Mais pourquoi dois tu utiliser PrinterRequester() ?
DefaultPrinter() ne suffirait pas ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: help svp problème simuler appuie touches avec blocage wi

Message par david »

je ne veux pas changer d'imprimante.
Je veux aller dans Préférences pour mettre automatiquement en RECTO Simple ou en RECTO/VERSO, je ne trouve pas comment le faire sans passer par cette boite de dialogue
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: help svp problème simuler appuie touches avec blocage wi

Message par Ar-S »

david a écrit :je ne veux pas changer d'imprimante.
Je veux aller dans Préférences pour mettre automatiquement en RECTO Simple ou en RECTO/VERSO, je ne trouve pas comment le faire sans passer par cette boite de dialogue
Ah Ok je comprends.

Dans tous les cas, ça va faire moche que la fenêtre d'impression s'ouvre puis ouvre la fenêtre pref puis coche une option ou une autre etc..
(ça compter que ça va pas être facile à faire).

Je m'orienterai différemment.
Je me dis qu'il faudrait que tu vois si le fait de modifier recto/verso change quelque chose dans la base de registre ou dans un fichier .ini de ton logiciel d'impression. il serait ainsi plus facile de gérer tes impressions sans avoir à bidouiller cette fenêtre.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: help svp problème simuler appuie touches avec blocage wi

Message par kernadec »

salut David
regarde cette lib et cherche le mode "duplex"

http://www.purearea.net/pb/download/use ... 07_PB4.ZIP

Cordialement
Répondre