Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: SetAsyncKeyState-funktio

Sivun loppuun

Cc [11.08.2006 00:48:04]

#

Eli onko Visual Basic 6:sella mahdollista matkia SendKeys:in tavoin näppäimistöä, mutta ohjelman, johon näppäimen painallukset lähetettäisiin EI olisi focuksen alaisena?

Metabolix [11.08.2006 01:07:55]

#

Funktio nimeltä keybd_event auttaa, jos ihan yleisesti haluat saada näppäimiä paineltua. Yhteen ainoaan ohjelmaan voi yrittää vaikuttaa PostMessage-funktion avulla. Kummastakin löytyy varmasti lukuisia esimerkkejä, ja luultavasti tätä on joskus kyselty myös Putkassa ainakin jollakin kielellä.

Cc [11.08.2006 15:52:47]

#

Pystyykö PostMessage-funktiolla vaikuttamaan ohjelmaan, mikä ei ole focuksen alaisena, jos pystyy niin miten, itse en keksinnyt tapaa siihen.

Blaze [11.08.2006 16:16:16]

#

Cc kirjoitti:

Pystyykö PostMessage-funktiolla vaikuttamaan ohjelmaan, mikä ei ole focuksen alaisena, jos pystyy niin miten, itse en keksinnyt tapaa siihen.

PostMessagehan ottaa ikkunan hWnd:n, joten ei sitä mikään sido aktiiviseen ikkunaan.

Cc [11.08.2006 18:32:28]

#

Miten käytän tuota PostMessage-funktiota esim. notepadiin ja lähetän sinne keybd_event:in avulla näppäinten painalluksia?

panttu [11.08.2006 19:31:01]

#

Tuolta löytyy selvitus postMesage-funktiosta
http://windowssdk.msdn.microsoft.com/en-us/library/ms644944.aspx

Ensimmäiseksi työksi joudut kaivamaan halutusta ohjelmasta esim. notepadistä kahvan, joka onnistuu ehken tällä http://windowssdk.msdn.microsoft.com/en-us/library/ms633499.aspx

Sitten pitää etsiä tuo sanoman kahdelle parametrille oikeat viestit vielä.

elikkä msg = WM_KEYDOWN
ja wParam = haluttu nappi esim. VK_F2 olisi funktionäppäin F2

Cc [11.08.2006 19:37:19]

#

Tuossa kun kaivaisin jonkun ohjelman kahvan niin on LPCTSTR lpWindowName, johon pitäis laittaa ikkunan otsikko, jos oikein ymmärsin, mutta mitä jos ikkunan otsikkoa ei tiedetä?

Antti Laaksonen [11.08.2006 21:09:00]

#

Jos tiedät prosessin nimen, niin ikkunan tunnus selviää näin:
https://www.ohjelmointiputka.net/keskustelu/12932-fokuksen-vaihto

Jos tiedät ikkunasta jotain muuta, niin mitä?

WinAPIn funktioissa tarvitaan melkein aina ikkunan tunnusta (hWnd), joten moinen pitää tavalla tai toisella selvittää.

Cc [12.08.2006 00:59:58]

#

Kun käytän tuota PostMessage-funktiota näin:

Private Const VK_B = 66
x = PostMessage(ikkuna, &H100, VK_B, 0)

niin ohjelma lähettää tuohon ikkunaan kirjaimen b eikä matki kirjaimen b painallusta. Missä ongelma?

Blaze [14.08.2006 09:16:28]

#

Cc kirjoitti:

niin ohjelma lähettää tuohon ikkunaan kirjaimen b eikä matki kirjaimen b painallusta

Miten noi eroaa toisistaan? :)
Ei, mut sen perusteella, mitä minä tiiän ja äsken googletin, tuon pitäis kyllä toimia. Toi ikkunahan on se "formi", oothan varma, että haluat noitten viestien menevän just sille formille, eikä esim. jollekin TextBoxille sen sisällä?

Cc [14.08.2006 13:10:47]

#

Blaze kirjoitti:

Cc kirjoitti:

niin ohjelma lähettää tuohon ikkunaan kirjaimen b eikä matki kirjaimen b painallusta

Miten noi eroaa toisistaan? :)

En osaa kylläkään selittää miten ne eroaa :), mutta tiedän kyllä että ne eroaa jotenkin :D

olen ihan varma, että haluan viestien menevän formille (ei ole oma tekemä ohjelma) enkä mihinkään TextBoxiin.

panttu [15.08.2006 18:05:07]

#

Niin, kun nappia painetaan näppäimistöltä näppäin singnaalin nousevareuna on keydown, josta hetken päästä windows lähettää toisen viestin press ja sitten, kun nappi nostetaan ylös lähetetään keyup viesti.

Eroavaisuus keydownin ja pressin välillä on kiinni ohjelmoijasta kumpaa se on ohjelman laittanut tottelemaan. Tietenkin esim. peleissä keydown on nopeampi, kuin press, koska press tulee pienellä viiveellä painamisen jälkeen.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta