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?
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ä.
Pystyykö PostMessage-funktiolla vaikuttamaan ohjelmaan, mikä ei ole focuksen alaisena, jos pystyy niin miten, itse en keksinnyt tapaa siihen.
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.
Miten käytän tuota PostMessage-funktiota esim. notepadiin ja lähetän sinne keybd_event:in avulla näppäinten painalluksia?
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
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ä?
Jos tiedät prosessin nimen, niin ikkunan tunnus selviää näin:
https://www.ohjelmointiputka.net/keskustelu/
Jos tiedät ikkunasta jotain muuta, niin mitä?
WinAPIn funktioissa tarvitaan melkein aina ikkunan tunnusta (hWnd), joten moinen pitää tavalla tai toisella selvittää.
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?
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ä?
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.