Bonjour,

Je travaille sur une petite application qui me permettrait de gérer plusieurs copier-coller. Je souhaiterais pour cela pouvoir intercepter des raccourcis clavier quand mon application n'a pas le focus. (CTRL+C+NUMPAD1 par exemple).

J'ai fait pas mal de recherche et j'ai entre autre trouvé ceci qui m'a pas mal aidé: Contrôle du clavier et de la souris sous Windows

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
#include "hotkeys_thread.h"
 
Hotkeys_Thread::Hotkeys_Thread(QObject *parent) :
    QThread(parent)
{
    clipboard = QApplication::clipboard();
}
 
void Hotkeys_Thread::read(){
    keybd_event(VK_CONTROL, 0, 0, 0);
    keybd_event(VkKeyScan('c'), 0, 0, 0);
    keybd_event(VkKeyScan('c'), 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
 
void Hotkeys_Thread::write(){
    keybd_event(VK_CONTROL, 0, 0, 0);
    keybd_event(VkKeyScan('v'), 0, 0, 0);
    keybd_event(VkKeyScan('v'), 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
 
void Hotkeys_Thread::run(){
    //*
    const SHORT Mask = -32767;
    forever {
        // Event copy
        if(GetAsyncKeyState(VK_F7) == Mask) {
            read();
            Sleep(100);
            qDebug() << "1: " << clipboard->text();
            emit copy1(clipboard->text());
        }
        if(GetAsyncKeyState(VK_F8) == Mask) {
            read();
            Sleep(100);
            qDebug() << "1: " << clipboard->text();
            emit copy2(clipboard->text());
        }
 
        // Event paste
        if(GetAsyncKeyState(VK_F9) == Mask) {
            emit paste1();
        }
        if(GetAsyncKeyState(VK_F10) == Mask) {
            emit paste2();
        }
        Sleep(1);
    }
    //*/
}
J'arrive bien à détecter l'appuie sur une seul touche, ici F7 F8 F9 F10, mais je ne trouve pas comment faire pour détecter la saisie de raccourcis.

NB: J'utilise Qt mais comme je ne l'utilise pas pour faire ce que je veux je poste ici.

Merci d'avance pour votre aide.

EDIT:

J'ai réussi à avancer un peu grâce à cela: RegisterHotKey .

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
#include "hotkeys_thread.h"
 
Hotkeys_Thread::Hotkeys_Thread(QObject *parent) :
    QThread(parent)
{
    clipboard = QApplication::clipboard();
}
 
Hotkeys_Thread::~Hotkeys_Thread(){
    UnregisterHotKey(NULL, 1);
    UnregisterHotKey(NULL, 2);
    UnregisterHotKey(NULL, 3);
    UnregisterHotKey(NULL, 4);
    UnregisterHotKey(NULL, 5);
    UnregisterHotKey(NULL, 6);
    UnregisterHotKey(NULL, 7);
    UnregisterHotKey(NULL, 8);
    UnregisterHotKey(NULL, 9);
    UnregisterHotKey(NULL, 10);
}
 
void Hotkeys_Thread::read(){
    qDebug() << "Read";
 
    keybd_event(VK_CONTROL, 0, 0, 0);
    keybd_event(VkKeyScan('c'), 0, 0, 0);
    keybd_event(VkKeyScan('c'), 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
 
void Hotkeys_Thread::write(){
    qDebug() << "Write";
 
    Sleep(250);
    keybd_event(VK_CONTROL, 0, 0, 0);
    keybd_event(VkKeyScan('v'), 0, 0, 0);
    keybd_event(VkKeyScan('v'), 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
 
void Hotkeys_Thread::run(){
    //*
    // Hotkey copy:
    RegisterHotKey(NULL, 1, MOD_CONTROL, VK_F2);
    RegisterHotKey(NULL, 2, MOD_CONTROL, VK_F2);
    RegisterHotKey(NULL, 3, MOD_CONTROL, VK_F3);
    RegisterHotKey(NULL, 4, MOD_CONTROL, VK_F4);
    RegisterHotKey(NULL, 5, MOD_CONTROL, VK_F5);
 
    // Hotkey paste:
    RegisterHotKey(NULL, 6, MOD_ALT , VK_F1);
    RegisterHotKey(NULL, 7, MOD_ALT, VK_F2);
    RegisterHotKey(NULL, 8, MOD_ALT, VK_F3);
    RegisterHotKey(NULL, 9, MOD_ALT, VK_F4);
    RegisterHotKey(NULL, 10, MOD_ALT, VK_F5);
 
    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {
        switch (msg.wParam) { // msg.wParam retourne l'id du raccourcis clavier utilisé;
        case 1:
            qDebug() << "copy 1";
            read();
            Sleep(100);
            emit copy1(clipboard->text());
            break;
        case 2:
            qDebug() << "copy 2";
            read();
            Sleep(100);
            emit copy2(clipboard->text());
            break;
        case 3:
            qDebug() << "copy 3";
            read();
            Sleep(100);
            emit copy3(clipboard->text());
            break;
        case 4:
            qDebug() << "copy 4";
            read();
            Sleep(100);
            emit copy4(clipboard->text());
            break;
        case 5:
            qDebug() << "copy 5";
            read();
            Sleep(100);
            emit copy5(clipboard->text());
            break;
        case 6:
            qDebug() << "paste 1";
            emit paste1();
            break;
        case 7:
            qDebug() << "paste 2";
            emit paste2();
            break;
        case 8:
            qDebug() << "paste 3";
            emit paste3();
            break;
        case 9:
            qDebug() << "paste 4";
            emit paste4();
            break;
        case 10:
            qDebug() << "paste 5";
            emit paste5();
            break;
        default:
            break;
        }
    }
}
J’arrive donc à définir des raccourcis comme CTRL+F1 ou ALT+F1 mais je n'ai toujours pas trouvé comment définir un raccourcis CTRL+C+NUMPAD1.