Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
klawiatura Makro (Wykańczanie)
#1
Cóż, jakiś czas temu poprosiłem o pomoc w przygotowaniu, a ja z chęcią pomogłem, jednak nie miałem zbyt dużo czasu, a teraz, gdy już go mam, skończyłem, ale są wątpliwości, trochę przeszukałem po prawie się to udało i okazało się, że muszę zadeklarować kilka zmiennych, ale nie znam tych argumentów.       Kod:   #include <iostream> #include <stdio.h> #include <time.h> #include <windows.h> #include <ctime> #include <string> using namespace std; const int KEYEVENTF_KEYUP = 0x2; <--- Dlaczego 0x2? To samo dotyczy wszystkich pozostałych. const int KEYEVENTF_KEYDOWN = 0x0; bajt VK_4 = 0x09; bajt VK_P = 0x08; int i = 0; int main () {while (1) {if (i> 657) {keybd_event (VK_P, 0, KEYEVENTF_KEYDOWN, 0); keybd_event (VK_P, 0, KEYEVENTF_KEYUP, 0); Sen (30000); } keybd_event (VK_4, 0, KEYEVENTF_KEYDOWN, 0); keybd_event (VK_4, 0, KEYEVENTF_KEYUP, 0); Sen (2300); i + = 4; } return 0; }   Co to za błąd? = \
Reply
#2
Nie jestem pewien, o co pytasz, ale myślę, że chodzi o parametry API. Jeśli nie rozumiesz parametrów api, odwiedź stronę http://www.msdn.com, a na pasku wyszukiwania u góry strony wstaw API, z którym potrzebujesz pomocy. Dlaczego to jest 0x2, nie mam pojęcia, tak właśnie Microsoft stworzył API. Prawdopodobnie istnieje powód techniczny, ale nie jestem pewien, co to jest. Makra są używane, aby ułatwić życie programistom i pomóc im w zmianie kodów. W tym przypadku Microsoft zdecydował, czy chcesz nacisnąć klawisz, możesz podać 0x2. Btw te definicje są już zdefiniowane w nagłówku okna, wierzę, więc tak naprawdę po prostu redefiniujesz je. Definicja jest jak makro. Pomyśl o tym w ten sposób. #define MY_DEFINITION 5 int i = MY_DEFINITION; Jeśli chodzi o kompilator, tak właśnie jest int i = 5;
Reply
#3
Przede wszystkim, dziękuję za odpowiedź. Było to bardzo pomocne, ponieważ nie miałem pojęcia, dlaczego / jakie były te liczby, prawdopodobnie otrzymam informacje o API jak najszybciej. Jednak te definicje nie znajdują się w , próbowałem usunąć kod definicji i zaczęły pojawiać się błędy. EDYTOWANIE: Po prostu sprawdź w msdn, że używam niewłaściwej biblioteki, powinienem używać i to naprawi problem z definicją. O błędzie zapomniałem wspomnieć o tym, o co chodziło, więc oto jest: Kod: const int KEYEVENTF_KEYUP = 0x2 Czy masz pojęcie, co powoduje ten błąd? Może niewłaściwy interfejs API, może to nie jest 0x2? EDIT Nº2: Z jakiegoś powodu mój kompilator informuje mnie, że mam 942 błędów, wszystkie w Winuser.h, nawet jeśli usunę cały kod.Out pomysłów ...
Reply
#4
Właśnie sprawdziłem twój kod i tylko 2 błędy "KEYEVENTF_KEYDOWN nie został zadeklarowany w tym zakresie" i "KEYEVENTF_KEYUP nie został zadeklarowany w tym zakresie". Więc będę musiał je zadeklarować, kiedy powinny zostać zadeklarowane w nagłówku? EDIT Nº2: Jak zmienić platformę SDK, ponieważ nie zmieniłem jej w sposób intencjonalny, więc jeśli ją zmieniłem, muszę wiedzieć, jak ją zmienić, czy możliwe jest "złe" kompilowanie, ponieważ nie używam VC ++, ale CodeBlocks o wiele lżejszy kompilator, może ma pewne problemy?
Reply
#5
Spójrz na moją edycję. Nie wszystkie wirtualne kody kluczy są zdefiniowane w WinUser. Jeśli kod w mojej edycji powoduje błędy, to zmodyfikowałeś platformę sdk, która albo musi zostać przeinstalowana, albo naprawiona, jeśli pamiętasz, co zmieniłeś. I użyj windows.h, a nie WinUser.h. Windows.h zawiera również nagłówki dla metody keybd_event.
Reply
#6
W końcu używałem całkowicie błędnych kodów API, zdarza się, że powinienem ich poprawne liczby (: P), które są ich wartością szesnastkową ^^. Dzięki za twoją pomoc Niestety z jakiegoś powodu nie mogę zmusić go do ingerencji w grę.
Reply




Users browsing this thread: 1 Guest(s)