Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Symulacja klawisza

Ostatnio zmodyfikowano 2010-12-08 21:41
Autor Wiadomość
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ć? :)
P-24910
pekfos
» 2010-12-07 16:29:45
kolejny co bota pisze.. -lwindowsx spróbuj
P-24911
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:

C/C++
#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;
}
P-24912
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.
P-24913
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.
P-24914
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.
P-24915
malan
» 2010-12-08 21:41:18
(...)po uruchomieniu wyskakuje not foundkey inputed(...)
wojownik266 trochę się pospieszył...

C/C++
#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; // Enter...
    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.
P-24937
« 1 »
  Strona 1 z 1