Poslao: 18 Jan 2006 01:27
|
offline
- beshtija
- Novi MyCity građanin
- Pridružio: 13 Okt 2005
- Poruke: 26
|
Koja procedura postoji u delphiju da oponasa pritiskanje dugmeta? Recimo hocu da se na svaku sekundu pritisne ctrl (a da nije zaglavljivanjem cackalice ),pretpostavljam da ce to ici u OnTimer event ali ne znam koja mi je proc potrebna?
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 18 Jan 2006 03:24
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
A zasto bi to tako radila. To je lose resenje, a i malo je komplikovano. Zar ti nije bolje da uradis jedan SendMessage na kontrolu koju zelis?
|
|
|
|
Poslao: 18 Jan 2006 17:44
|
offline
- Strog
- Stručni saradnik
Web programiranje
- Bojan Kopanja
- Web & Mobile developer @ ZeusSoftware
- Pridružio: 26 Jul 2003
- Poruke: 2597
- Gde živiš: Stara Pazova
|
Evo ti recimo ovako nekako:
procedure TForm1.Timer1Timer(Sender: TObject);
var key: Char;
begin
key:='c';
Form1.KeyPress(key);
end;
E sad samo vidi koji je kod za ctrl i ovo moje kay:='c' zameni sa odgovarajucim kodom i resen problem .
|
|
|
|
Poslao: 18 Jan 2006 18:46
|
offline
- Srki_82
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Ako zelis da stvarno simuliras pritisak na neki taster onda ti ovi nacini koji su do sad predlozeni nece biti dovoljni. Recimo... ne mozes iz programa na ovaj nacin "pritisnuti CTRL + ALT + DEL" ili "WIN + E" ili neku slicnu kombinaciju. Ako je to ono sto ti treba koristi funkciju keybd_event. Nju koristi drajver tastature... a mozes i ti
|
|
|
|
Poslao: 18 Jan 2006 19:40
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
@Strog
To reshenje ne valja. To je cist "botch" iliti zbrzavanje preko one stvari.
Srki je dao bolje resenje, ali i to nije najsrecnije.
@Beshtija
Pazi ovako. S obzirom da shvatam da tvoja aplikacija hvata event-e, s obzirom da hoces da pritisnes taster, pretpostavljam da nije konzolna.
Da bi uhvatila event, mora da je ili servis, ili aktivna.
Ako je aktivna, onda ima kontrolu koju treba "stisnuti" ili na bilo koji nacin "triggerovati" sa paramtrom "pritiska na CTRL".
Iz tog razloga ti kazem, najbolje, najpravilnije, a i najlakse resenje je proslediti poruku kontroli.
Za to se koristi SendMessage ili PostMessage API funkcija (SendMessage ako ti ne treba povratni rezultat). Ukljuci "windows" u USES, i pogledaj help za SendMessage.
Prvi parametar je HANDLE kontrole, onda ide MESSAGE (Win32Sdk.hlp), onda u wParam postavis code koji hoces, u ovom slucaju code tvog CTRL-a.
U delfiju takodje mozes da iskoristis komandu PERFORM.
|
|
|
|
|
Poslao: 19 Jan 2006 11:54
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
Nije rekla sta joj tacno treba... ali mi nije jasno kako to ne znas handle?! Pa imas FindWindow ako nije tvoja aplikacija, a ako jeste, onda znas handle.
|
|
|
|
Poslao: 19 Jan 2006 13:31
|
offline
- beshtija
- Novi MyCity građanin
- Pridružio: 13 Okt 2005
- Poruke: 26
|
E evo ovako ako nije bilo jasno cemu sve to:
U jednoj igrici se puca pritiskom na CTRL(znaci ne drzanjem CTRL-a nego se stalno pritiska). I lepo umesto da ja sama stalno pritiskam CTRL bice pucanje stalno ukljuceno a ja samo pilotiram
Zato mi zvuci da bi SendMessage posluzilo, ako kao handle dam tu igricu a poruka bi verovatno bila MK_CONTROL ako sam dobro shvatila?
Dopuna: 19 Jan 2006 13:31
Srki, nije mi jasno kako cu ja sa keybd_event bas odrediti da se taj signal pritiska dugmeta salje igrici? Recimo poziv bi ovako bio
keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0)
Za drugi parametar sam stavila da je nula posto neam blage veze sta on predstavlja
|
|
|
|
Poslao: 19 Jan 2006 14:51
|
offline
- beli0135
- Executor
- Pridružio: 03 Jan 2005
- Poruke: 2990
- Gde živiš: Beograd
|
eee to je u pitanju...
1. napravi aplikaciju koja ce da pishe imena prozora u fajl, startuj igru, kreni malo da pucash i izadji
2. Kad nadjes ime prozora koje je za igricu (pazi, moze da se desi da glavni prozor igrice ne prihvata CTRL nego da tamo gde se puca ima drugi handle)
Sad znas ime prozora da napises program
1. Nadjes handle pomocu FindWindow
2. Posaljes poruku CTRL sa SendMessage na handle tog prozora
A moze i seljacka varijanta, (not recommended)
BroadcastMessage
|
|
|
|
Poslao: 19 Jan 2006 15:41
|
offline
- Srki_82
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Kada pozoves keybd_event to je kao da si stvarno pritisnula neki taster. Pritisak tastera ce uhvatiti ona aplikacija koja bi ga uhvatila da stvarno pritisnes taster.
Ja ovo koristim za pucanje u SpaceInvaders2:
keybd_event(VK_RSHIFT, 0, 0, 0);
keybd_event(VK_RSHIFT, 0, KEYEVENTF_KEYUP, 0);
Imam jednu petlju koji vrtim sve dok je SpaceInvaders pokrenut i ako je NUM Lock ukljucen, prvi igrac ima automatsko pucanje (kod koji vidis se poziva svaki put kada se prodje kroz petlju), a kada je SCROLL Lock ukljucen, drugi igrac ima automatsko pucanje (umesto VK_RSHIFT salje se VK_LSHIFT taster).
|
|
|
|