Symulacja klawisza
Ostatnio zmodyfikowano 2010-12-08 21:41
kt1117 Temat założony przez niniejszego użytkownika |
Symulacja klawisza » 2010-12-07 15:45:02 Cześć wszystkim! Ostatnio siedzę trochę w C++ i próbowałem zrobić program, który symuluje klawisze. Znalazłem funkcję SendInput i próbowałem ją wykorzystać, lecz chociaż znam nazwę biblioteki (windowsx.h) nie potrafię jej podlinkować. I tu moje pytanie, a mianowicie: jak to zrobić? :) |
|
pekfos |
» 2010-12-07 16:29:45 kolejny co bota pisze.. -lwindowsx spróbuj |
|
wojownik266 |
» 2010-12-07 16:30:42 Nie jestem pewien czy dobrze Cię zrozumiałem ale tak czy tak myślę że mały przykład nie zaszkodzi. Oto on, wykorzystanie funkcji sendinput:
#define _WIN32_WINNT 0x0501 #include <windows.h> #include <iostream>
using namespace std;
void main() { char end; HWND windowHandle = FindWindow( 0, "test.txt - Notepad" ); INPUT * key; if( windowHandle == NULL ) cout << "not found"; SetForegroundWindow( windowHandle ); Sleep( 1000 ); key = new INPUT; key->type = INPUT_KEYBOARD; key->ki.wVk = 41; key->ki.dwFlags = 0; key->ki.time = 0; key->ki.wScan = 0; key->ki.dwExtraInfo = 0; SendInput( 1, key, sizeof( key ) ); key->ki.dwExtraInfo = KEYEVENTF_KEYUP; SendInput( 1, key, sizeof( key ) ); cout << "key inputted"; cin >> end; }
|
|
kt1117 Temat założony przez niniejszego użytkownika |
» 2010-12-07 17:05:07 Nie działa :(. Wyskoczył błąd: 8 E:\Dev-Cpp\main.cpp `main' must return `int' E:\Dev-Cpp\Makefile.win [Build Error] [main.o] Error 1 ,co zrozumiałem jako: funkcja main musi zwracać int, jako że w kodzie zwracała void zmieniłem na int, i ku mojemu zaskoczeniu błąd: E:\Dev-Cpp\Makefile.win [Build Error] [Projekt1.exe] Error 255 ,którego nie rozumiem. |
|
malan |
» 2010-12-07 17:15:00 Nikt go nie rozumie. To cały Dev-Cpp ;p. Bug na bugu, bugiem popychany. Przeżuć się na Code::Blocks. Albo przebuduj projekt... Czasami pomaga. |
|
kt1117 Temat założony przez niniejszego użytkownika |
» 2010-12-07 17:36:20 Dzięki za radę. Przebudowanie projektu nic nie daje, więc będę musiał ściągnąć Code::Blocks Edit:Ściągnąłem Code::Blocks, i teraz po uruchomieniu wyskakuje not foundkey inputed, ale już w konsolce. |
|
malan |
» 2010-12-08 21:41:18 (...)po uruchomieniu wyskakuje not foundkey inputed(...) |
wojownik266 trochę się pospieszył... #define _WIN32_WINNT 0x0501 #include <iostream> #include <windows.h>
void wait() { std::cin.sync(); std::cin.get(); }
int main() { HWND windowHandle = 0; INPUT key[ 1 ]; windowHandle = FindWindow( 0, "Dev-C++ 4.9.9.2" ); if( !windowHandle ) { std::cout << "Nie znalazlem okna!"; wait(); return 1; } SetForegroundWindow( windowHandle ); Sleep( 2000 ); key[ 0 ].type = INPUT_KEYBOARD; key[ 0 ].ki.wVk = VK_RETURN; key[ 0 ].ki.dwFlags = 0; key[ 0 ].ki.time = 0; key[ 0 ].ki.wScan = 0; key[ 0 ].ki.dwExtraInfo = 0; if( !SendInput( 1, key, sizeof( key ) ) ) { std::cout << "SendInput error: " << GetLastError() << std::endl; wait(); return 1; } key->ki.dwExtraInfo = KEYEVENTF_KEYUP; if( !SendInput( 1, key, sizeof( key ) ) ) { std::cout << "SendInput error: " << GetLastError() << std::endl; wait(); return 1; } std::cout << "Wyslano!"; wait(); return 0; } Otwórz sobie Dev-Cpp. Stwórz jakiś plik (nie projekt). Wklej do niego np. ten kod. Ustaw kursor myszki za int main() . Po uruchomieniu programu, jeśli nie wystąpi jakiś błąd, po int main() powinna się pojawić linijka przerwy. |
|
« 1 » |