CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Wciśnięcie klawisza w obcym programie

Wciśnięcie klawisza w obcym programie

dział ogólny

Wciśnięcie klawisza w obcym programie

Postprzez Corvis » środa, 27 sierpnia 2014, 22:01

Witam,

Chciałbym zasymylować wciśnięcie klawisza "G" z klawiatury w innym programie - robię to tak:

KOD cpp:     UKRYJ  
HWND__ *hCurrentWindow = FindWindowW(L"FalconDisplay",NULL);

if(hCurrentWindow!=0) {

                PostMessage(hCurrentWindow,WM_KEYDOWN,0x47, MapVirtualKey(0x47,MAPVK_VK_TO_VSC));
                Sleep(100);
                PostMessage(hCurrentWindow,WM_KEYUP,0x47, MapVirtualKey(0x47,MAPVK_VK_TO_VSC));

}
 

Uchwyt pobiera do okna ale nie wciska symualtor nie reaguje na ten klawisz :( wie ktoś może co robię źle ?
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez Corvis » środa, 27 sierpnia 2014, 22:52

Wysłanie: PostMessage(hCurrentWindow,WM_CLOSE,0,0); zamyka aplikację. Ale czemu nie działa wciśnięcie klawisza ?

Dodam jeszcze, że próbowałem wszelkie kombinacje:

KOD cpp:     UKRYJ  
PostMessage(hCurrentWindow,WM_KEYDOWN,0x47, 0);


KOD cpp:     UKRYJ  
PostMessage(hCurrentWindow,WM_KEYDOWN,0x47, 0);
PostMessage(hCurrentWindow,WM_KEYUP,0x47, 0);


Jeszcze zrzut z WINID

KOD text:     UKRYJ  
Falcon BMS
HWND: 0x2F06BA
ID: 0x0
Wnd Pos: X = 0; Y = 0; W = 1920; H = 1080
Client Pos: X = 0; Y = 0; W = 1920; H = 1080
Wnd Brds: CX = 0; CY = 0
Wnd Ver: 0x0500
Wnd Stat: Enabled = 1; Visible = 1; Unicode = 1
Class: FalconDisplay
Class C++:
Class Desc: ""
HMODULE: 0x4470000
Atom: 0xC364
WndProc Class: 0xFFFF07E9
WndProc Window: 0x71216BB5 (Subclassed)
Menu: 0x0
Window DC: 0xD10114BD
Client DC: 0xB2012AD3
HICON: 0x36E0675
HICON(sm): 0x36E0675
HCURSOR: 0x0
HBRUSH: 0x751025F7
Xtra [Cls, Wnd]: 0x0, 0x0
Class Styles: 0x223 = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_NOCLOSE
Proc ID: 0x1538
Proc Open Lvl: 2
Proc Ver: 5.1; Wow64 = 1
Priorty Class: 0x20 = NORMAL_PRIORITY_CLASS
Proc Crtd: 08/27 22:57:17
Proc Krnl Time: 00:02.340
Proc Usr Time: 00:15.132
Proc Affty Msk: 0xFF
Proc Hndls: 306
Proc GDI Hndls: 71
Proc USER Hndls: 56
Mod Alloc Base: 0x4470000
Mod Entry Pnt: 0x4970A2A
Mod Sz: 0xE36000
Proc WrkSet Sz: 0x2983C000
Proc Min WrkSet Sz: 0x32000
Proc Max WrkSet Sz: 0x159000
Proc Pg Flts: 0x71757
Proc Pk WrkSet Sz: 0x2C0C9000
Proc Qt Pk PgdPl Usg: 0xAC720
Proc Qt PgdPl Usg: 0x68DA0
Proc Qt Pk NPgdPl Usg: 0xFC30
Proc Qt NPgdPl Usg: 0xE088
Proc Pgfl Usg: 0x2B70B000
Proc Pk Pgfl Usg: 0x2C6AA000
Proc I/O Rd Nm: 70780
Proc I/O Wt Nm: 620
Proc I/O Oth Nm: 44931
Proc I/O Rd: 0xB1DA4AA
Proc I/O Wt: 0x22A4
Proc I/O Oth: 0x1762B4
Proc Prvlgs: {
 {SeChangeNotifyPrivilege: 0x3 = SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT},
}
Thrd ID: 0x14D4
Priorty Lvl: 0x0 = THREAD_PRIORITY_NORMAL
Thrd Priorty Boost: 0
Thrd Crtd: 08/27 22:57:17
Thrd Krnl Time: 00:01.92
Thrd Usr Time: 00:02.480
Base Priorty (Bkgnd): 7
Base Priorty (Frgnd): 9
Img Path: "D:\Falcon BMS 4.32\bin\x86\Falcon BMS.exe"
Img Type: [32bit-GUI]
Mod Path: "D:\Falcon BMS 4.32\bin\x86\Falcon BMS.exe"
Mod Type: [32bit-GUI]
HINST: 0x4470000
ShtDn Priorty Lvl: 0x280
ShtDn Flgs: 0x0
ShtDn No Retry: 0
Parent HWND:
Parent Class:
Wnd Styles: 0x94000000 = WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS
Wnd ExStyles: 0x40008 = WS_EX_TOPMOST | WS_EX_APPWINDOW
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez polymorphism » czwartek, 28 sierpnia 2014, 08:55

Użyj funkcji keybd_event.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wciśnięcie klawisza w obcym programie

Postprzez Cyfrowy Baron » czwartek, 28 sierpnia 2014, 09:33

Pytanie tylko, czy chodzi o kliknięcie bezpośrednio w oknie programu, czy w jakiejś kontrolce tegoż programu, czy też może w MainMenu tegoż okna?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Wciśnięcie klawisza w obcym programie

Postprzez Corvis » czwartek, 28 sierpnia 2014, 19:34

bezpośrednio w oknie.

keyb_event też nie działa :(

KOD cpp:     UKRYJ  
        HWND__ *hCurrentWindow = FindWindow(L"FalconDisplay", L"FALCON BMS");

        if(hCurrentWindow!=0) {
//              SetForegroundWindow(hCurrentWindow); // czy z tym czy bez tego też nie działa
                 keybd_event('G', 0, 0, 0);
                 keybd_event('G', 0, KEYEVENTF_KEYUP, 0);

        }

 


W notatniku mi piszę ggggg nie wiem o co tu chodzi już. Jak klikam g z klawiatury w symylatorze to podwozie się wysuwa albo chowa. Nie mogę tego wywołać własnym programem
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez polymorphism » czwartek, 28 sierpnia 2014, 21:33

A ustawiałeś fokusa w oknie do którego wysyłasz?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Wciśnięcie klawisza w obcym programie

Postprzez Corvis » czwartek, 28 sierpnia 2014, 21:36

Nie bardzo wiem jak
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez Corvis » czwartek, 28 sierpnia 2014, 21:41

SetForegroundWindow(hCurrentWindow); to jest chyba to samo co ustawienia focusa
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez polymorphism » czwartek, 28 sierpnia 2014, 21:55

Masz pewność, że fokusa dostaje ta kontrolka, do której chcesz wysłać zdarzenia?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Wciśnięcie klawisza w obcym programie

Postprzez Cyfrowy Baron » piątek, 29 sierpnia 2014, 09:39

To jakaś gra okienkowa? Przeprowadziłem testy z inną grą i to co działa z oknem programu w ogóle nie sprawdza się z oknem gry. Niemniej jednak gdy zaprogramowałem w klawiaturze symulację przycisku to zadziałało, ale to zawsze działa w tylko aktywnym oknie programu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Wciśnięcie klawisza w obcym programie

Postprzez Corvis » piątek, 29 sierpnia 2014, 09:47

polymorphism,

Uchwyt pobieram dobry bo WinId pokazuje ten sam numer

Cyfrowy Baron,

To symulator Falcon BMS .

Może ja to źle piszę ? Zrobiłem Nową aplikację która w TTimer co 1000 sekundę symuluje klawisz G ( pobiera uchwyt do okna itp ) . Następnie odpalam symulator i czekam. Żadnego rezultatu :(
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez Cyfrowy Baron » piątek, 29 sierpnia 2014, 14:20

Nowa aplikacja, symulująca...? Teraz to dopiero nie rozumiem. Więc nie działa ci symulacja wciśnięcia klawisza w oknie własnego programu czy w oknie gry?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Wciśnięcie klawisza w obcym programie

Postprzez Corvis » piątek, 29 sierpnia 2014, 14:25

Inaczej moim celem jest stworzenie aplikacji która pobierze informację przez USB i na jej podstawie zasymuluje wciśnięcie odpowiedniego guzika. Całość ma działać na symulatorze lotu Falcon BMS 32. Czyli odpalam swoją aplikację która odbiera dane z USB. Odpalam grę Falcon BMS 32 i wszystko ma śmiagać :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez polymorphism » piątek, 29 sierpnia 2014, 15:35

Jeśli to gra, to być może problem jest z direcinput.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    LinuxChrome

Re: Wciśnięcie klawisza w obcym programie

Postprzez Cyfrowy Baron » piątek, 29 sierpnia 2014, 15:43

polymorphism napisał(a):Jeśli to gra, to być może problem jest z direcinput.


Z informacji jakie znalazłem w sieci wynika, że tak właśnie jest. Wiele osób o to pyta, ale jeszcze nie znalazłem odpowiedzi. Problem w tym, że DirectX nie działa z SendMessage i PostMessage. Musisz więc chyba poczytać o DirectInput.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 15 gości