ou pour etre cohérent avec le reste, ce qui revient au meme, utilise sendmessage avec WM_GETTEXTLENGTH
ou pour etre cohérent avec le reste, ce qui revient au meme, utilise sendmessage avec WM_GETTEXTLENGTH
mais apres comment faire pour ne faire la selection qu'au niveau de ce qu'a selectionné la souris?
il faut que je calcule la position de la souris avant et apres??![]()
et un Edit c'est une zone de texte telle que le notepad par exemple?
et du texte contenu dans une page internet n'est pas considérée comme un Edit non?![]()
Dans NotePad, ça doit être un RichEdit ...
Le CRichEditCtrl permet de gérer la sélection de texte et le copier/coller (et bien d'autres choses...)
oui mais non en fait, j'en reviens toujours au meme probleme![]()
Le problème, c'est que WM_GETTEXT ne marche pas sur tous les types de controles.
A mon avis, et j'ai pas encore vraiment étudié la question plus en détail, il faudrait récuperer le type de zone sur laquelle tu double-cliques avec GetWindowLong et GWL_ID, puis suivant le type, appliquer soit ce message, soit un autre (EM_SETSEL par ex pour edit), etc ...
Je crains qu'il n'y ait pas un message "générique".
oui je pense malheureusement. merci de tes precisions.![]()
je viens d'avoir une autre idée :
comme mon but est de recuperer un mot selectionné par la souris pour l'envoyer dans le presse-papier, ne pourrais-je pas simuler un double-clic gauche pour que le mot soit selectionné, et ensuite simuler l'appui des touches CTRL+C ??
j'avais cru comprendre que tu n'arrivais pas à simuler le CTRL+C, non ?
ben oui, mais bon... je vais rééssayer du coup![]()
sinon peut etre que passer par le clipboard serait plus simple non??
moi j'étais parti sur ca, mais du coup, ca complique la récupération de la zone selectionnée.
Si tu arrives à simuler le CTRL+C, je pense que c'est plus simple
le probleme est que le CTRL+C agit avant la selection du mot lors du double-clic ou apres??
car dans le premier cas, du coup, ca ne marcherait pas puisque rien ne serait selectionné.
pour le moment, ce code ne marche pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam) { if(wParam==WM_LBUTTONDBLCLK) keybd_event( VK_LCONTROL, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); keybd_event( 43, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); keybd_event( 43, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); keybd_event( VK_LCONTROL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); return CallNextHookEx(VueDonnees.MouseHookHandle,nCode,wParam,lParam); }
meme dans un programme tout bete, je n'arrive pas à simuler le CTRL-C, tu y arrives toi ?
à propos, je pense pas que le 0x45 et le KEYEVENTF_EXTENDEDKEY soit utile
oui mais bon par depit, j'avais essaye![]()
je vais essayer dans un programme de test oui.
j'ai essaye ca :
et ca a pour effet de produire en continu la touche C...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 keybd_event( 0x11, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 ); keybd_event( 0x43, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 ); keybd_event( 0x43, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); keybd_event( 0x11, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
donc l' appui sur la touche control ne doit pas etre pris en compte.
ca y est j'ai trouve! ( enfin presque )
la ca me fait bien le copier. le probleme est que comme je ne relache pas les touches, tout mon pc s'est plante apres et il a fallu que je reboot.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam) { if(wParam==WM_LBUTTONDBLCLK) keybd_event( 0x11, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 ); keybd_event( 0x43, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 );
donc le probleme se situe au niveau du relachement des touches![]()
quelqu'un aurait il une idée pour résoudre ce probleme?![]()
![]()
Partager