j'ai toujours utilisé dev, je vais mettre vc++
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
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 : Sélectionner tout - Visualiser dans une fenêtre à part #define _WIN32_WINNT 0x0500
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
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.)
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
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 : 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 <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(); }
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Toujours la même chose, j'ai regardé l'exemple de la FAQ et je vois pas ce qui cloche.
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 <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(); }
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Voilà sa fonctionne ...
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 #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 : 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 #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; } }
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
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
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
non, ce n'est pas plus propre.
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 #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; }
"The quieter you become, the more you are able to hear"
"Plus vous êtes silencieux, plus vous êtes capable d'entendre"
Attention Nicolas, on ne fait pas de CloseHandle() sur un HWND.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
ç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.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
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"...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
"The quieter you become, the more you are able to hear"
"Plus vous êtes silencieux, plus vous êtes capable d'entendre"
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
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.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
C'est bon j'ai trouvé la réponse tout de suite dans un newsgroup...
@
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Tu peux la poster (la réponse, la solution) ?Envoyé par darkwall_37
Oui désolé
Code : Sélectionner tout - Visualiser dans une fenêtre à part SendMessage(Handle,WM_CHAR,VkKeyScan(Flux[i]),0);
Cordialement
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager