[..] Reconfigurer des raccourcis, MAIS que pour 1 appli.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Paatou
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 09 oct. 2009 18:38
Status : Hors ligne

[..] Reconfigurer des raccourcis, MAIS que pour 1 appli.

#1

Message par Paatou »

Salut,

Bon j'ai du abréger, mais le titre entier que je voulais mettre est "Reconfigurer des raccourcis clavier, MAIS uniquement pour une application".
J'ai un peu cherché, mais plutôt que de perdre trop de temps à chercher+tester, je voudrais demander de l'aide ici.

Ma problématique générale :
Je travaille chez un client chez qui le seul utilitaire que l'on peut utilisé est buggé. En pratique certains raccourcis claviers ne fonctionne pas et pas les moins courants puisqu'il est ici question des copier/coller/couper (CTRL+C/CTRL+V/CTRL+X).

Le point qui me pose problème :
Comme vous pouvez le voir dans le code ci-dessous je pense avoir fait le gros du travail (mais si vous voyez mieux que la méthode utilisée, je suis preneur de tout conseil), il ne me manque qu'une chose : arriver à identifier si la fenêtre active est bien celle de l'application de sorte à ne modifier les raccourcis clavier QUE si l'on est dans cette application (sinon le CTRL+C ne marcherait plus ailleurs héhé ^^).

Information complémentaire :
Avec l'espion, j'ai ceci, je pense que s'il est possible de récupérer le "PCSWS" que l'on voit ici dans "Class", ça le ferait : allez dites moi que c'est "tout con" à faire :mrgreen:
>>>>>>>>>>>> Window Details <<<<<<<<<<<<<
Title: B - sud2.ws - [24 x 80] - USER
Class: PCSWS:Main:00400000

Code : Tout sélectionner

; TOUCHE PAUSE = Mettre en PAUSE
; TOUCHE ESC   = Arreter le scripte
;

Global $Paused

;Option pour permettre l'utilisation de classname
AutoItSetOption("WinTitleMatchMode", 4)

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("+{ESC}", "Terminate")
HotKeySet("^c", "Copier")
HotKeySet("^C", "Copier")
HotKeySet("^x", "Couper")
HotKeySet("^X", "Couper")
HotKeySet("^v", "Coller")
HotKeySet("^V", "Coller")

Opt("SendKeyDownDelay", 100)

;Boite de message indiquant les raccourcis
;--------------------------------------------

MsgBox(0, "Actions", "CTRL + C       : Fait CTRL + Inser pour copier" & chr(13) & "CTRL + X       : Fait SHIFT + Suppr pour couper" & chr(13) & "CTRL + V       : Fait SHIFT + Pg Down pour coller" & chr(13) & "PAUSE            : Met/ôte la pause du programme de macros" & chr(13) & "SHIFT + ESC  : Arreter le programme de macros")

;Initialisations
;--------------- 
$i=0

;Boucle infinie formant le corps du programme
;--------------------------------------------
While 1
    Sleep(100)
    Select
;       ---cas ou l'on presse CTRL+C pour faire un copier en étant dans l'émulateur PCSWS = CTRL + Inser
        Case $i = 1
            Send("^{INSERT}")
            $i=0
;       ---cas ou l'on presse CTRL+X pour faire un couper en étant dans l'émulateur PCSWS = SHIFT + Suppr
        Case $i = 2
            Send("+{DELETE}")
            $i=0
;       ---cas ou l'on presse CTRL+V pour faire un coller en étant dans l'émulateur PCSWS = SHIFT + Pg Down
        Case $i = 3
            Send("+{PGDN}")
            $i=0
    EndSelect
WEnd

;********** MES FONCTIONS **********

;----------------------------------
Func Copier()
    $i=1
EndFunc
;----------------------------------
Func Couper()
    $i=2
EndFunc

;----------------------------------
Func Coller()
    $i=3
EndFunc
;----------------------------------

; Presser Pause/Attn pour mettre en pause

Func TogglePause()
     $Paused = NOT $Paused
     While $Paused
         sleep(100)
         ToolTip('Script is "Paused"',0,0)
     WEnd
;     ToolTip("")
EndFunc

;----------------------------------
; Presser Esc pour arreter le scripte

Func Terminate()
     Exit 0
EndFunc
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Reconfigurer des raccourcis, MAIS que pour 1 appli.

#2

Message par orax »

Pour ne faire ça que sur une seul fenêtre, il y a l'UDF Hotkeys : http://www.autoitscript.com/forum/index ... t&p=650817
Par exemple, pour assigner ctrl + c à une fenêtre (à moins que la syntaxe ait changé...) :

Code : Tout sélectionner

$h=WinGetHandle("[ACTIVE]")
_HotKeyAssign(BitOR($CK_CONTROL, $VK_C),"ctrl_c",$h)
func ctrl_c()
; ...
endfunc
(Edité : j'avais oublié la fonction...)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Paatou
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 09 oct. 2009 18:38
Status : Hors ligne

Re: [..] Reconfigurer des raccourcis, MAIS que pour 1 appli.

#3

Message par Paatou »

Merci pour ta réponse, je vais regarder ce lien que tu m'indiques. Ca va me demander un peu de temps car la manière de faire et totalement différente du code que j'ai fait :) et je ne vois pas encore comment il identifie l'application, enfin je veux dire la fenêtre active ....

Edit : bon finalement je trouve que la fonction HotKeyAssign que le gars à développée semble un peu trop complexe pour ce que je veux faire. vue le code que j'ai donné dans mon premier test, il manque juste un test IF testant la fenêtre active conditionnant l'exécution ou non du raccourcis alternatif. Je vais voir pour utiliser WinActive.
Par contre l'aide Autoit dit comment chercher une sous-chaine du "Title", mais est-il possible de chercher une sous-chaine de la "Class" ?
Avatar du membre
Paatou
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 09 oct. 2009 18:38
Status : Hors ligne

Re: [..] Reconfigurer des raccourcis, MAIS que pour 1 appli.

#4

Message par Paatou »

Re,

Bon finalement j'ai fait le code ci-dessous. Ca marche et ne marche pas tout à fait ^^. En fait après le premier CTRL+C dans la fenêtre de l'application ciblée, le copié se fait bien, mais ensuite l'appli. "perd les pédales" : les touches ont tendances à ne plus fonctionner correctement, ainsi ESC ne fait plus rien du tout, Orig ne renvoi plus le curseur en haut à gauche, tabulation ne tabule plus, ...

Qui à une idée ? Est-ce qu'il peut y avoir des interférence entre un script autoit qui tourne et les applications ?

Code : Tout sélectionner

; TOUCHE PAUSE = Mettre en PAUSE
; TOUCHE ESC   = Arreter le scripte
;

Global $Paused

;Option valant 2 pour permettre l'utilisation de WinActive en cherchant une sous-chaîne du titre
; => Matches any substring in the title.
; => In this mode a window titled Untitled - Notepad would be matched by "Untitled - Notepad", "Untitled", "Notepad", "pad", etc.
AutoItSetOption("WinTitleMatchMode", 2)

HotKeySet("+{PAUSE}", "TogglePause")
HotKeySet("+{ESC}", "Terminate")
HotKeySet("^c", "Copier")
HotKeySet("^C", "Copier")
HotKeySet("^x", "Couper")
HotKeySet("^X", "Couper")
HotKeySet("^v", "Coller")
HotKeySet("^V", "Coller")

Opt("SendKeyDownDelay", 100)

;Boite de message indiquant les raccourcis
;--------------------------------------------

MsgBox(0, "Actions(n'est effectif que dans la fenêtre de l'émulateur PCSWS)", "CTRL + C           : Fait CTRL + Inser pour copier" & chr(13) & "CTRL + X           : Fait SHIFT + Suppr pour couper" & chr(13) & "CTRL + V           : Fait SHIFT + Pg Down pour coller" & chr(13) & "SHIFT + PAUSE : Met/ôte la pause du programme de macros" & chr(13) & "SHIFT + ESC      : Arreter le programme de macros")

;Initialisations
;--------------- 
$i=0

;Boucle infinie formant le corps du programme
;--------------------------------------------
While 1
    Sleep(100)
    Select
;       ---cas ou l'on presse CTRL+C pour faire un copier en étant dans l'émulateur PCSWS = CTRL + Inser
        Case $i = 1
            If WinActive("- sud2.ws -") Then
                Send("^{INSERT}") 
            EndIf 
            $i=0
;       ---cas ou l'on presse CTRL+X pour faire un couper en étant dans l'émulateur PCSWS = SHIFT + Suppr
        Case $i = 2
            If WinActive("- sud2.ws -") Then
                Send("+{DELETE}")
            EndIf 
            $i=0
;       ---cas ou l'on presse CTRL+V pour faire un coller en étant dans l'émulateur PCSWS = SHIFT + Pg Down
        Case $i = 3
            If WinActive("- sud2.ws -") Then
                Send("+{PGDN}")
            EndIf 
            $i=0
    EndSelect
WEnd

;********** MES FONCTIONS **********

;----------------------------------
Func Copier()
    $i=1
EndFunc
;----------------------------------
Func Couper()
    $i=2
EndFunc

;----------------------------------
Func Coller()
    $i=3
EndFunc
;----------------------------------

; Presser Pause/Attn pour mettre en pause

Func TogglePause()
     $Paused = NOT $Paused
     While $Paused
         sleep(100)
         ToolTip('Script is "Paused"',0,0)
     WEnd
;     ToolTip("")
EndFunc

;----------------------------------
; Presser Esc pour arreter le scripte

Func Terminate()
     Exit 0
EndFunc
Répondre