Page 1 sur 2
coller simulé
Publié : ven. 27/mars/2015 5:35
par SPH
Bonjour,
voici un code qui copie la chaine a$ dans le presse papier :
Ma question est : peut on forcer le collage avec une instruction ?
Re: coller simulé
Publié : ven. 27/mars/2015 7:13
par Marc56
Presque toutes les commandes qui commencent par
Set (définir) ont leur opposé
Get (saisir)
SetClipboardText <->
GetClipboardText
SetClipboardImage <-> GetClipboardImage
La bibliothèque
Clipboard à 5 commandes
http://www.purebasic.com/french/documen ... index.html
Code : Tout sélectionner
a$="Bonjour"
SetClipboardText(a$)
;coller
b$ = GetClipboardText()
Debug b$
Et d'une manière générale, si tu cliques sur un mot clé, que tu appuies sur F1 et que tu va dans le bas de la page d'aide contextuelle, tu as tous les autres mots clés liés.

Re: coller simulé
Publié : ven. 27/mars/2015 7:21
par SPH
Merci mais ce n'est pas exactement ce que je voulais :
Je veux qu'a l'instruction de copie, se copie le texte du presse papier sur le curseur actif de l'ecran (par exemple le curseur en cours du blocnote)
Tu vois la nuance ?

Re: coller simulé
Publié : ven. 27/mars/2015 7:38
par Marc56
Ah, OK.
Si le point d'insertion est dans un objet externe à PB, alors il faut jouer avec les outils de gestion
OLE (En PB, il y a la lib tiers ComatePlus)

Re: coller simulé
Publié : ven. 27/mars/2015 11:01
par falsam
Marc56 a écrit :Et d'une manière générale, si tu cliques sur un mot clé, que tu appuies sur F1 et que tu va dans le bas de la page d'aide contextuelle,
Marc56, je ne sais pas si tu as vu mais SPH est inscrit sur le forum
depuis 2005. Un pilier qui lit tout le forum depuis des années tout en regardant SouthPark avec son thé dans la main.
SPH n'est pas un noob: Ok il ne connait pas les gadgets, mais la touche F1 sur un mot clé il connait (
J’espère)
Rassures toi SPH est magnanime et tu es pardonnée jeune effronté.

Re: coller simulé
Publié : ven. 27/mars/2015 11:13
par Ar-S
Du moment ou tu passes sur de la fenêtre externe, tu vas devoir chercher (sous windows) du coté de l'API SendMessage_
Recherche le terme dans le forum il y a plein d'exemples.
Re: coller simulé
Publié : ven. 27/mars/2015 12:41
par falsam
1 - Vu que tu donnes peu d'information, on va supposer que tu colles dans le bloc note standard de windows (
notepad.exe)
2 - d'après ce que tu dis notepad est déja ouvert.
Tu vas commencé par recherché le handle de Notepad à l'aide de l'API
FindWindow.
Notepad comprenant plusieurs composantes (
Fenêtres filles), on va rechercher l'Edit à partir de son handle (
hwnd) à l'aide de l'API
FindWindowEx.
Maintenant qu'on connait le handle de l'edit (
subhwnd, on va coller le contenu de ta variable à l'aide de l'API
SendMessage.
■ Le code complet
Code : Tout sélectionner
;Ton code
a$="Bonjour"
SetClipboardText(a$)
;coller
b$ = GetClipboardText()
;Debug b$
;Vu que tu donnes peu d'information, on va supposer que tu colles dans le bloc note de windows
;Recherche du bloc note suposé ouvert (notepad.exe)
hwnd = FindWindow_("notepad",#Null)
If hwnd
;Ho Yeahhhh trouvé
;On cherche le componsant principal de l'application qui est l'editeur (Edit)
subhwnd=FindWindowEx_(hwnd, #Null, "Edit", #Null)
;Et on colle (Paste)
SendMessage_(subhwnd, #WM_PASTE, 0, 0)
EndIf
Re: coller simulé
Publié : ven. 27/mars/2015 14:55
par nico
Simulation du ctrl+v et tu n'auras pas besoin de connaitre la fenetre.
Re: coller simulé
Publié : ven. 27/mars/2015 15:26
par SPH
nico a écrit :Simulation du ctrl+v et tu n'auras pas besoin de connaitre la fenetre.
C'est exactement ce que je demande : comment SIMULER ctrl+v !?
Re: coller simulé
Publié : ven. 27/mars/2015 15:31
par nico
Compiler sous unicode.
Code : Tout sélectionner
#KEYEVENTF_UNICODE = 4
Procedure.l KeyCombi(Ctrl.l, Alt.l, Shift.l, WinKey.l, key.a)
Protected Extended.l, Scan.l, Scancode.w, j.l=-1, Nb.l, Win.l
Protected Dim SendInputData.INPUT(0)
If MapVirtualKey_(key, 2) = 0 ;MAPVK_VK_TO_CHAR=2
Extended.l = #KEYEVENTF_EXTENDEDKEY
; get scan code
Scan.l = MapVirtualKey_(key, 0) ;MAPVK_VK_TO_VSC=0
Scancode.w=Scan & $FFFF
Else
Extended = 0
Scancode = 0
EndIf
If WinKey
Win = 1
EndIf
Nb=(Ctrl + Alt + Shift + Win)*2
If Key
Nb = Nb + 2
EndIf
ReDim SendInputData.INPUT(Nb)
If Ctrl
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_CONTROL
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Alt
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_MENU
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Shift
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_SHIFT
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 1
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_LWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 2
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_RWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Key
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= Key
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|Extended
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = Scancode
j=j+1
SendInputData(j)\Type = #INPUT_KEYBOARD
SendInputData(j)\ki\wVk = Key
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP|Extended
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = Scancode
EndIf
If Shift
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_SHIFT
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Alt
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_MENU
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If Ctrl
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_CONTROL
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 2
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_RWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
If WinKey = 1
j=j+1
SendInputData(j)\type= #INPUT_KEYBOARD
SendInputData(j)\ki\wVk= #VK_LWIN
SendInputData(j)\ki\dwExtraInfo = 0
SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
SendInputData(j)\ki\time = 0
SendInputData(j)\ki\wScan = 0
EndIf
SendInput_(Nb, SendInputData(0), SizeOf(INPUT))
EndProcedure
Delay(5000)
KeyCombi(1, 0, 0, 0, #VK_V)
Re: coller simulé
Publié : ven. 27/mars/2015 16:08
par Marc56
SPH a écrit :C'est exactement ce que je demande : comment SIMULER ctrl+v !?
Same player play again, je retente ma chance
Installe un gestionnaire de macro genre
autohotkey
(il y en a des d'autres plus légers, il suffit de chercher "text expansion windows")
Pour AHK, Ajoute dans le script, par exemple
Pour d'autres gestionnaires de macro, la syntaxe est par exemple
xxx={controldown}V{controlup}
Sauvegarde, fais Reload sur l'icone.
Chaque fois que tu écrira
;copie il fera ctrl+v (peu importe dans quelle application)
Mais tu as intérêt à mettre des mots qui ne sont pas courant, ou alors désactiver chaque fois que tu te t'en sert pas.

Re: coller simulé
Publié : ven. 27/mars/2015 17:56
par falsam
Alors là je n'ai rien compris SPH. Le code que j'ai posté en PureBasic simule ton Ctrl+V. Qu'est ce qu'il te faut de plus ?
Le lien au cas ou tu aurais lu en diagonal
http://www.purebasic.fr/french/viewtopi ... 15#p171415
Re: coller simulé
Publié : ven. 27/mars/2015 22:20
par SPH
Si si, j'ai vu ton code. En fait, il y a eu un deluge de reponse et je ne sais pas ou donner de la tete.
Bon, j'avoue, j'ai triché : ce n'etait pas dans notepad que je voulais copier le presse papier mais dans chrome. Dans ton tchat precisement. J'ai remplacé le mot NOTEPAD par CHROME dans ton code mais bien sur, ca n'a pas marché.
Enfin, qqun m'a donné ce code qui me conviens :
Code : Tout sélectionner
res = keybd_event_(#VK_CONTROL,0,0,0) ;" Appuyer sur CTRL
res = keybd_event_(#VK_V,0,0,0) ;" Appuyer sur V
res = keybd_event_(#VK_V,0,2,0) ;" Relacher V
res = keybd_event_(#VK_CONTROL,0,2,0) ;" Relacher CTRL
Merci a tous pour vos reponses, je les testerais tous

Re: coller simulé
Publié : ven. 27/mars/2015 22:32
par falsam
La prochaine fois donne plus de précision dans ce cas.
SPH a écrit :e veux qu'a l'instruction de copie, se copie le texte du presse papier sur le curseur actif de l’écran (par exemple le curseur en cours du blocnote)
Blocnote non ? Ha pardon fallait comprendre une web application interpréter par chrome Chrome !!
Re: coller simulé
Publié : sam. 28/mars/2015 10:51
par Marc56
En passant, merci à toi falsam pour cet exemple clair et
bien commenté sur l'utilisation des API
FindWindow,
FindWindowEx,
SendMessage.
Je n'avais jamais bien compris leur utilisation car c'est souvent perdu dans un fouillis d'explications et rarement en français.
Ça m'ouvre d'autres horizons pour l'automation via PB.
Je met ça dans mon bloc note (et vais pouvoir comprendre un peu mieux les données de AutoIt Windows info)
