Page 1 sur 2

Clic global 2 boutons souris,personne n'a 1 meilleure idée ?

Publié : mar. 08/mai/2007 22:12
par Kwai chang caine
Bonjour à tous

N'etant pas arrivé a trouver comment modifier la BDR pour ajouter une ligne dans le menu contextuel du bureau ou de ses icones et apparement personne ne connait la solution. :(
Je crois que c'est presque impossible d'apres ce qu'en disent les internautes des divers forums.

http://www.purebasic.fr/french/viewtopi ... c&start=15

Je cherche à faire une commande rapide, comme par exemple le clic des 2 boutons à la fois pour declencher mon appli.
J'ai trouvé quelques codes parlant des hooks globaux, mais je ne sais pas bien les adapter pour cette simple commande.

Selon vous, quel serait le code le plus simple, qui prendrait le moins de ressources pour detecter le clic des 2 boutons dans toutes les applications.

Je vous remercie

Re: Hook souris global pour la detection du clic des 2 bouto

Publié : mar. 08/mai/2007 23:03
par minirop
Kwai chang caine a écrit :N'etant pas arrivé a trouver comment modifier la BDR pour ajouter une ligne dans le menu contextuel du bureau ou de ses icones et apparement personne ne connait la solution. :(
Je crois que c'est presque impossible d'apres ce qu'en disent les internautes des divers forums.
c'est à dire ? rajouter une ligne sur le menu clic droit comme font les antivirus ?
Kwai chang caine a écrit :Je cherche à faire une commande rapide, comme par exemple le clic des 2 boutons à la fois pour declencher mon appli.
ou çà les deux cliques ? sur les fihciers ayant une extension précise ?

Publié : mer. 09/mai/2007 8:03
par Kwai chang caine
Bonjour Minirop

Je cherchais a rajouter une ligne dans le menu contextuel lorsque l'on clique sur le bureau ou a coté des fichiers ou bien sur un icone du bureau.
Apparement on peux facilement le faire sur un fichier avec ou sans extension, un repertoire mais pas quand on clique dans le vide.

Regarde mes exemples de modif de BDR

http://www.purebasic.fr/french/viewtopi ... c&start=15

Pour les deux clics c'est n'importe ou.........
Je voudrais récuperer l'evenement clic droit et clic gauche a n'importe quel endroit ou l'on clique.
En fin de compte faire un hook souris global mais au plus simple et surtout prenant le moins de ressources afin de ne pas gener les autres applications et aussi pour pouvoir tourner sur n'importe quelle machine meme pas trop rapide..
Comme l'a montré NICO et FLYPE, je crois qu'il faut obligatoirement créer une DLL afin que ça agisse en dehors de PURE

D'ailleur si on intercepte l'evenement clic souris droit (par exemple) est ce que l'interception se fait avant toute autre action ....
C'est à dire avant l'apparition du menu contextuel de window, ou bien le menu apparait et on a l'interception. :roll:

Merci de ton aide.

Publié : mer. 09/mai/2007 10:39
par RV
Salut Kwai Chan Cain,

je ne sais pas si ça répond entièrement à ce que tu cherches mais jette un oeil sur ce code:

Code : Tout sélectionner

If OpenWindow(0,100,100,200,100,"Essai Mouse Buttons",#PB_Window_SystemMenu)
    StickyWindow(0,1)
    HideWindow(0,1)
    
    Repeat
    
        event=WindowEvent()
    
        If GetAsyncKeyState_(#VK_RBUTTON) And GetAsyncKeyState_(#VK_LBUTTON)
            HideWindow(0,0)
        EndIf
        
    Until event=#PB_Event_CloseWindow
    
    End
EndIf

Publié : mer. 09/mai/2007 12:58
par Kwai chang caine
Alors la merci beaucoup :D

C'est exactement ce que je voulais.
Hyper simple, court et ça marche partout.

J'en reviens pas, moi qui croyait que fallait des hooks etc ......
Va meme falloir que je change le titre du POST :lol:

Connaitrais tu une combine pour empecher l'apparition du menu contextuel, car meme en cliquant gauche en premier et en tenant appuyé il apparait. :?

Encore merci.
Excelente journée

Publié : mer. 09/mai/2007 13:08
par Kwai chang caine
Je viens de m'apercevoir d'un truc genant...
Quand on clique gauche puis droit ça marche quand meme 8O

Il doit y avoir une memoire avec la fonction GetAsyncKeyState_

Comment la remettre à zero ???

Moi je voudrais que ça bloque que quand les 2 sont appuyé en meme temps.

Publié : mer. 09/mai/2007 13:15
par Kwai chang caine
C'est bon je viens de trouver comment remettre à zéro le buffer du clic gauche.

Code : Tout sélectionner

If OpenWindow(0,100,100,200,100,"Détection Bi-Click",#PB_Window_SystemMenu) 

 HideWindow(0,1) 
    
 Repeat 
  GetAsyncKeyState_(#VK_LBUTTON)
  Event = WindowEvent() 
  Delay(1)
    
  If GetAsyncKeyState_(#VK_RBUTTON) And GetAsyncKeyState_(#VK_LBUTTON) 
   MessageRequester("Détection BiClick","Vous venez de cliquer sur les 2 boutons en meme temps",0)
  EndIf 
        
 Until event=#PB_Event_CloseWindow 
    
 End 
 
EndIf
Reste encore le probleme de désactivation du menu contextuel

Publié : mer. 09/mai/2007 15:24
par minirop
Kwai chang caine a écrit :J'en reviens pas, moi qui croyait que fallait des hooks etc ......
GetAsyncKeyState est un hook ! :lol:

Publié : jeu. 10/mai/2007 8:19
par Kwai chang caine
Aaaaah d'accord.....

Mois je croyais que les hooks c'etait avec les dll et des codes mega compliqué.

Merci pour l'info, la route est encore longue..............

Et pour le menu contextuel, t'a rien qui pourrait l'intercepter ????

Publié : jeu. 10/mai/2007 9:08
par Kwai chang caine
Ooouuuaaaahh j'suis super content :D

J'ai eu une idée, sans le faire expres (Normal me direz vous :) )

En cliquant droit ,puis cliquant gauche tout de suite au dessus, j'ai vu que le menu contextuel disparaissait. (Normal aussi)

Donc, j'ai éssayé de creer un code qui le fait à ma place, grace à plusieurs codes de deplacement et simulation de click , ainsi que le HOOK de RV.

Ce code s'arrette en tapant simultanément SHIFT et ESCAPE

Voila, si quelqu'un peux l'améliorer (On voit encore legerement le menu contextuel apparaitre), ou me donner son avis, il sera le tres bienvenu:

Code : Tout sélectionner

; Code de RV modifié par KCC 

Dim Pos.Point(1) 

Procedure MouseEvent(EvenementSouris.l) 
 Mem.l=GlobalAlloc_(0,8) 
 GetCursorPos_(Mem) 
 mouse_event_(EvenementSouris|#MOUSEEVENTF_ABSOLUTE,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_()) 
 GlobalFree_(Mem) 
EndProcedure 
    
Repeat 
 
 GetAsyncKeyState_(#VK_LBUTTON) ; Vide le buffer clic gauche 
 GetAsyncKeyState_(#VK_RBUTTON) ; Vide le buffer clic droit 
 Event = WindowEvent() 
 Delay(1) 
   
 If GetAsyncKeyState_(#VK_RBUTTON) And GetAsyncKeyState_(#VK_LBUTTON) 
  GetCursorPos_(Pos(1)) ;Mémorise la position du curseur 
  Delay(130) 
  SetCursorPos_(Pos(1)\x - 5, Pos(1)\y - 5) ; Déplace le curseur de quelques pixels au dessus pour le click gauche 
  MouseEvent($2) ; Simule le click gauche appuyé 
  MouseEvent($4) ; Simule le click gauche relaché 
  MessageRequester("Détection BiClick","Vous venez de cliquer sur les 2 boutons en meme temps",0) 
 ElseIf GetAsyncKeyState_(#VK_SHIFT) And GetAsyncKeyState_(#VK_ESCAPE)
  MessageRequester("Détection BiClick","BiClick viens de s'arretter",0) 
  End
 EndIf 
       
ForEver
   
End 

Publié : jeu. 10/mai/2007 12:45
par gnozal
Il y a cet exemple Context Menu Item Shell Extension example (Windows) qui permet de modifier le menu contextuel de l'explorateur.
Il est un peu hardu ...

Publié : jeu. 10/mai/2007 12:49
par Kwai chang caine
Merci GNOZAL

Je vais voir, mais si TOI tu y trouve "hardu"........................ :)

Publié : jeu. 10/mai/2007 12:59
par Kwai chang caine
Je viens d'essayer et ça marche, mais que pour les menus contextuels concernant les fichiers, pas sur les repertoires et encore moins sur le bureau ou dans le "vide".

Comme je l'avais indiqué dans ce post

http://www.purebasic.fr/french/viewtopi ... 4089#64089

D'apres le "OUEB" c'est presque impossible a modifier le menu du bureau :cry:
J'suis triste....

Publié : ven. 11/mai/2007 8:11
par Kwai chang caine
J'suis triste............personne n'a une meilleure idée que la mienne, ou bien peux améliorer mon code ? :cry:

Publié : ven. 11/mai/2007 8:30
par Frenchy Pilou
Et cela çà ne marche pas? :lol:
http://www.1-click.jp/