Pourquoi ne pas utiliser Visual C++ 2008 express?
Version imprimable
j'ai toujours utilisé dev, je vais mettre vc++
Pour les prochains : SOUS DEV C++
Pour inclure les SendIndputs, inclure avant windows.h
Mon code ne marche pas... Je devrais bien voir les caractères s'afficher dans notepad ? c'est pas caché ou quoique ce soit d'autre ?Code:#define _WIN32_WINNT 0x0500
Vu que SendInput() n'est pas destiné à un handle de fenêtre, tu dois d'abord t'assurer que la fenêtre de Notepad est au premier plan (SetForegroundWindow(), GetForegroundWindow() pour vérifier, etc.)
J'ai rajouté des informations pour essayer de comprendre ce qui ce passe.
wVk est un type WORD alrs que VkKeyScan retourne un short... Je sais pas trop comment faire ? forcer la cast ?
KeyboardEvent marche et me réecrit mystream : SendInput ne fait rien.
Code:
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 <stdio.h> #include <stdlib.h> #define _WIN32_WINNT 0x0500 #include <windows.h> #include <wchar.h> #include <Winuser.h> using namespace std; int main (void) { char Stream[] = "MyStream" ; int StreamSize = sizeof(Stream)/sizeof(char); printf("\nTaille : %d", StreamSize); INPUT *Letter ; Letter->type = INPUT_KEYBOARD; Letter->ki.wVk = 0 ; Letter->ki.dwFlags = 0 ; Letter->ki.time = 0 ; Letter->ki.wScan = 0 ; HWND Handle = FindWindow("Notepad", NULL); SetForegroundWindow(Handle); _sleep(1000); int i=0; for ( i=0; i<(StreamSize-1) ; i++ ) { Letter->ki.wVk = VkKeyScan(Stream[i]); short CodeLetter = VkKeyScan(Stream[i]); Letter->ki.dwExtraInfo = 0; SendInput(1,Letter,sizeof(Letter)); Letter->ki.dwExtraInfo = KEYEVENTF_KEYUP; keybd_event(VkKeyScan(Stream[i]),0,0,0); _sleep(500); keybd_event(VkKeyScan(Stream[i]),0,KEYEVENTF_KEYUP,0); printf("\n_____________________", i); printf("\n\n i : %d", i); printf("\ncode lettre : %u ", CodeLetter); } printf("\n\nTerminee"); getchar(); }
Toujours la même chose, j'ai regardé l'exemple de la FAQ et je vois pas ce qui cloche.Code:
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 <stdio.h> #include <stdlib.h> #define _WIN32_WINNT 0x0500 #include <windows.h> #include <wchar.h> #include <Winuser.h> using namespace std; int main (void) { char Stream[] = "MyStream" ; int StreamSize = sizeof(Stream)/sizeof(char); printf("\nTaille : %d", StreamSize); INPUT Letter[StreamSize] ; HWND Handle = FindWindow("Notepad", NULL); SetForegroundWindow(Handle); _sleep(1000); int i=0; for ( i=0; i<(StreamSize-1) ; i++ ) { Letter[i].type = INPUT_KEYBOARD; Letter[i].ki.dwFlags = 0 ; Letter[i].ki.time = 0 ; Letter[i].ki.wScan = MapVirtualKey(Stream[i], 0); Letter[i].ki.wVk = VkKeyScan(Stream[i]); short CodeLetter = VkKeyScan(Stream[i]); Letter[i].ki.dwExtraInfo = 0; SendInput(1,Letter,sizeof(Letter)); Letter[i].ki.dwExtraInfo = KEYEVENTF_KEYUP; keybd_event(VkKeyScan(Stream[i]),0,0,0); _sleep(500); keybd_event(VkKeyScan(Stream[i]),0,KEYEVENTF_KEYUP,0); printf("\n_____________________", i); printf("\n\n i : %d", i); printf("\ncode lettre : %u ", CodeLetter); } printf("\n\nTerminee"); getchar(); }
Voilà sa fonctionne ...
Code:
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 #include <stdio.h> #include <stdlib.h> #define _WIN32_WINNT 0x0500 #include <windows.h> #include <wchar.h> #include <Winuser.h> using namespace std; int main (void) { char Stream[] = "MyStream" ; int StreamSize = sizeof(Stream)/sizeof(char); printf("\nTaille : %d", StreamSize); INPUT Key={0}; KEYBDINPUT ki={0}; HWND Handle = FindWindow("Notepad", NULL); SetForegroundWindow(Handle); _sleep(2000); int i=0; for ( i=0 ; i<(StreamSize-1) ; i++ ) { Key.type = INPUT_KEYBOARD; Key.ki.wVk = VkKeyScan(Stream[i]); Key.ki.dwExtraInfo = 0; SendInput(1,&Key,sizeof(Key)); Key.ki.dwExtraInfo = KEYEVENTF_KEYUP; } printf("\n\nTerminee"); getchar(); }
EDIT : plus propre comme ça si y'en a qui cherche une réponse un jours, enfin je crois...
Code:
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 #include <stdio.h> #include <stdlib.h> #define _WIN32_WINNT 0x0500 #include <windows.h> #include <wchar.h> #include <Winuser.h> void UseSendInput( char *Stream, int StreamSize ); using namespace std; int main (void) { char Stream[] = "MyStream" ; int StreamSize = sizeof(Stream)/sizeof(char); HWND Handle = FindWindow("Notepad", NULL); SetForegroundWindow(Handle); _sleep(2000); UseSendInput( Stream, StreamSize ); } void UseSendInput( char *Stream, int StreamSize ) { INPUT Key={0}; KEYBDINPUT ki={0}; int i=0; for ( i=0 ; i<(StreamSize-1) ; i++ ) { Key.type = INPUT_KEYBOARD; Key.ki.wVk = VkKeyScan(Stream[i]); Key.ki.dwExtraInfo = 0; SendInput(1,&Key,sizeof(Key)); Key.ki.dwExtraInfo = KEYEVENTF_KEYUP; } }
Putin mais en fait je m'en bas les steaks de SendInput, pourquoi je me suis pris la tête avec cette daub ?, si j'ai choisi d'utiliser sendmessage c'est bien parce que je veux que ça simule les touches tout en me laissant la possibilité de faire autre chose sur le pc
non, ce n'est pas plus propre.
Code:
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 #define _WIN32_WINNT 0x0500 #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <windows.h> static void SendInputString(TCHAR const * input) { INPUT key = {INPUT_KEYBOARD, {0, 0, 0, 0, KEYEVENTF_KEYUP}}; while(*input != 0) { key.ki.wVk = VkKeyScan(*input); SendInput(1, &key, sizeof(key)); input++; } } int _tmain(void) { TCHAR input[] = _T("MyStream"); HWND handle = FindWindow(_T("Notepad"), NULL); if(handle != NULL) { SetForegroundWindow(handle); Sleep(200); SendInputString(input); } return 0; }
Attention Nicolas, on ne fait pas de CloseHandle() sur un HWND.
ça ne m'intéresse pas sendinput en fait! c'est presque pareil que keyboard même si vous le prosvrivez et c'est relou à utiliser en plus.
Faut que je fasse fonctionner sendmessage.
Mais comme dit dans le message vers lequel j'ai lié, ça ne marche pas correctement avec SendMessage() qui n'est pas fait pour ça.
Un truc que je sais par expérience, c'est qu'on ne peut pas envoyer une majuscule avec ça. Eh oui, tes conneries, je les ai essayées aussi "dans ma jeunesse"...
Sa tombe bien les majuscules ne font pas partie dans ce dont j'ai besoin ! pas de caractère spéciaux non plus ! donc...A
J'aimerais savoir comment faire pour simuler l'appuis de 'TAB' par exemple
Si SendMessage n'est pas fait pour ça, connais-tu une autre fonction qui le serait ! Y'a plein de programme codée en cpp je suppose qui font ce genre de truck alors je comprends pas pourquoi j'y arriverais pas avec le cpp non plus !Code:
1
2
3 SendMessage(Handle, WM_KEYDOWN, VK_TAB,0); _sleep(100); SendMessage(Handle, WM_KEYUP , VK_TAB,0);
Je pige pas pourquoi ça ne marche pas !
Tu veux bien m'aider dans mes conneries ou je dois aller chercher de l'aide ailleur ?
Sinon tu connais un livre, une newsgroup qui puisse m'aider s'il te plait ? car j'ai vraiment besoin de réussir cette fonction.
Sinon tant pis et merci quand même.
C'est bon j'ai trouvé la réponse tout de suite dans un newsgroup...
@
Tu peux la poster (la réponse, la solution) ?Citation:
Envoyé par darkwall_37
Oui désolé
Code:SendMessage(Handle,WM_CHAR,VkKeyScan(Flux[i]),0);
Cordialement