batch-automatyczne naciskanie klawisza;/

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
Czy da sie napisać plik wsadowy *.bat tak by co np 5 sekund przez jakis czas naciskał mi jakiś klawisz np: ENTER ? jesili tak to jak to zrobić?
 

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Kod:
#include <windows.h>
int main()
{
while(1)
    {
Sleep(5000); //w ms
   keybd_event( 'A',                                // wciska
                      0x1E,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
   keybd_event( 'A',                             //puszcza
                      0x1E,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
}
}
 

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
<div class='quotetop'>CYTAT(darecki44 @ 24.08.2009, 13:04) <{POST_SNAPBACK}></div>
Kod:
#include <windows.h>
int main()
{
while(1)
    {
Sleep(5000); //w ms
   keybd_event( 'A',                                // wciska
                      0x1E,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
   keybd_event( 'A',                             //puszcza
                      0x1E,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
}
}
[/b]


nie wiem czy rozumiem dobrze ten kod ale czy w nim nie trzyma jednego klawisza przez 5s? bo mi chodzi o jedno wciśnięcie co piec sekund dam inny przykład: chce by mi nacisną klawisz strzałki jeden raz potem innej 2 i w pętli co 5 sekund(graficznie: "<-" 1sekunda przerwy "->" 5 sekund przerwy i od nowa) a z tego co zauważyłem ten program będzie trzymał 5 sekund.chyba że się mylę.
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
Niby dobrze ale jak pisać to poprawnie. Najpierw wciskamy klawisz a potem sprawdzamy warunek (jeden przebieg mniej
smile.gif
) sleep raczej też w innym miejscu powinien być...
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
Czy to nie powinno być mniej-więcej tak: (?)
Kod:
#include <windows.h>
int main()
{
while(1)
    {

   keybd_event( 'L',                                // wciska L
                      0x26,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
   keybd_event( 'L',                             //i puszcza L
                      0x26,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);

Sleep(1000); //czeka 1000 ms (1 sec.)

   keybd_event( 'P',                                // wciska P
                      0x19,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
   keybd_event( 'P',                             //i puszcza P
                      0x19,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);

Sleep(5000); //czeka 5000 ms (5 sec.)
}
}
To odnośnie
(graficznie: "<-" 1sekunda przerwy "->" 5 sekund przerwy i od nowa)[/b]
Programistą nie jestem, ale to [chyba] będzie coś w ten deseń
<
//no i trzeba jeszcze zmienić numery klawiszy
<
 

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Key Scan Code
~ ` 29
! 1 2
@ 2 3
# 3 4
$ 4 5
% 5 6
^ 6 7
& 7 8
* 8 9
( 9 0A
) 0 0B
_ - 0C
+ = 0D
Backspace 0E
Tab 0F
Q 10
W 11
E 12
R 13
T 14
Y 15
U 16
I 17
O 18
P 19
{ [ 1A
} ] 1B
| \ 2B
Caps Lock 3A
A 1E
S 1F
D 20
F 21
G 22
H 23
J 24
K 25
L 26
: ; 27
“ ‘ 28
Enter 1C
L SHIFT 2A
Z 2C
X 2D
C 2E
V 2F
B 30
N 31
M 32
< , 33
> . 34
? / 35
R SHIFT 36
L CTRL 1D
L ALT 38
Space Bar 39
R ALT E0 38
R CTRL E0 1D
Insert E0 52
Delete E0 53
L Arrow E0 4B
Home E0 47
End E0 4F
Up Arrow E0 48
Dn Arrow E0 50
Page Up E0 49
Page Down E0 51
R Arrow E0 4D
Num Lock 45
Numeric 7 47
Numeric 4 4B
Numeric 1 4F
Numeric / E0 35
Numeric 8 48
Numeric 5 4C
Numeric 2 50
Numeric 0 52
Numeric * 37
Numeric 9 49
Numeric 6 4D
Numeric 3 51
Numeric . 53
Numeric - 4A
Numeric + 4E
Numeric Enter E0 1C
Esc 1
F1 3B
F2 3C
F3 3D
F4 3E
F5 3F
F6 40
F7 41
F8 42
F9 43
F10 44
F11 57
F12 58
Print Screen ??
Scroll Lock 46
Pause ??
Left Win E0 5B
Right Win E0 5C
Application E0 5D
ACPI Power E0 5E
ACPI Sleep E0 5F
ACPI Wake E0 63[/b]
Kod:
keybd_event( 'A',                                // 'A'
                      0x1E,        // kod ASCII dla 'A'
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
[/b]
 

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
dobra z programowania nie byłem za dobry morze mi ktoś przerobić ten program tak aby klawisze były w kodzie ASCII i tak: włączam program a on automatycznie naciska mi klawisz F1 czeka mi 10 sekund naciska klawisz F2 czeka sekundę i odnowa F1........ bo to co piszecie rozumiem i nawet mi wychodzi ale dla klawiszy literowych.
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
1.
może (a i tak uważam, że powinna być użyta forma 'mógłby'...)
2. Przecinki ( , ) i inne znaki interpunkcyjne zjadło?
3. Dlaczego ASCII? Przecież masz podane że np. za F1 masz 3B a za F2 - 3C
Masz wszystko podane (wszelkie potrzebne sposoby i dane) w postach usera darecki44. 'Szkielet' możesz oprzeć o to co ja napisałem (pozamieniaj dane...)
 

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
oki sorry za orty.
ale jak zrobić by nacisnąć f2 i f1? to znaczy co napisać w miejscu przykładowej litery "a" bo mi albo wyskakuje błąd albo nic nie pokazuje. dokładne miejsce jest pokazane wytłuszczonym drukiem:

keybd_event( 'A', // CO TU WPISAĆ?
0x3B,
KEYEVENTF_EXTENDEDKEY | 0,
0 );[/b]
 

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Kod:
#include <windows.h>
int main()
{
while(1)
    {
   keybd_event( VK_F1,  
                      0x3B,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
   keybd_event( VK_F1,
                      0x3B,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);

Sleep(10000);

   keybd_event( VK_F2,
                      0x3C,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
   keybd_event( VK_F2,
                      0x3C,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
Sleep(1000);
}
}
Edit
'VK_F1' na VK_F1
 

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
kompiluje ten program i wydawało by się że działa ale nie wciska klawiszy F1 i F2
<
musi być gdzieś błąd bo w devie mam komunikat "[warning] charakter constant too long for its type" inny kompilator pokazuje podobny komunikat.

już wszystko gra dzięki....
 

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
mam jeszcze jedno pytanko a co ze strzałkami? wszystkie klawisze opanowałem prócz strzałek... więc co podać w tym miejscu gdzie literka by była strzałka?
 

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
zrobiłem tak:
#include <windows.h>
int main()
{
while(1)
{
Sleep(1500);
keybd_event( VK_Up Arrow E0,
0x48,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( VK_Up Arrow E0,
0x48,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);

Sleep(9000);
keybd_event( VK_Dn Arrow E0,
0x50,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( VK_Dn Arrow E0,
0x50,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);

}
}[/b]

i nie działa;/
 

greg007

Użytkownik
Dołączył
Czerwiec 28, 2007
Posty
314
już sam sobie poradziłem:

#include <windows.h>
int main()
{
while(1)
{
keybd_event( VK_UP,
0x48,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( VK_UP,
0x48,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);

Sleep(1000);

keybd_event( VK_DOWN,
0x50,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
keybd_event( VK_DOWN,
0x50,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
Sleep(1000);
}
}[/b]
 
Do góry Bottom