Olen tekemässä pientä ja yksinkertaista macro-ohjelmaa Ultima Online MMORGP peliin, ohjelmani toimii muuten loistavasti, mutta pelissä on kokoajan chat enabloituna, eli siis jos jotain kirjoittaa niin se menee siihen chattiin ja itse pelissä olen laittannut macroni toimimaan F12 napista oma tapani on tälläinen:
Private Sub Aloita_Click() Timer1.Interval = Aika.Text Timer1.Enabled = True End Sub Private Sub Lopeta_Click() Timer1.Interval = 0 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() SendKeys vbKey + Nappaimet.Text, True End Sub
Itse formilla on Combobox nimellä Nappaimet, joka sisältää F1 - F12 arvot.
Kun yritän ajaa ohjelman se toimii moitteetta, mutta se kirjoittaa esim. F12 chattiin, eikä ns. matki näppäimistöä esim. F12 painamisella, mikä tähän olisi sopiva ratkaisu?
Koodissa on kaksi virhettä:
1. Muuttujan tai vakion nimeä ei voi muodostaa osissa.
2. SendKeys-komento ei kelpuuta VB:n näppäinkoodeja.
Nyt "vbKey + Nappaimet.Text" tarkoittaa kahden muuttujan tai vakion yhdistystä. Koska tunnusta vbKey ei ole määritelty, sen arvo on tyhjä. Näin ohjelmalle lähetetään vain kirjaimet "F", "1" ja "2", jotka tulostuvat sellaisenaan.
Ongelman ratkaisu on käyttää oikeita SendKeys-merkintöjä. Esim. F12-näppäimen merkintä on "{F12}". Jos ohjelma lähettää pelkästään F-näppäimiä, pieni muutos koodiin riittää:
SendKeys "{" & Nappaimet.Text & "}", True
Tässä tulee lainattuna MSDN:stä kaikki SendKeys-komennon erikoismerkinnät:
BACKSPACE {BACKSPACE}, {BS}, or {BKSP} BREAK {BREAK} CAPS LOCK {CAPSLOCK} DEL or DELETE {DELETE} or {DEL} DOWN ARROW {DOWN} END {END} ENTER {ENTER}or ~ ESC {ESC} HELP {HELP} HOME {HOME} INS or INSERT {INSERT} or {INS} LEFT ARROW {LEFT} NUM LOCK {NUMLOCK} PAGE DOWN {PGDN} PAGE UP {PGUP} PRINT SCREEN {PRTSC} RIGHT ARROW {RIGHT} SCROLL LOCK {SCROLLLOCK} TAB {TAB} UP ARROW {UP} F1 {F1} F2 {F2} F3 {F3} F4 {F4} F5 {F5} F6 {F6} F7 {F7} F8 {F8} F9 {F9} F10 {F10} F11 {F11} F12 {F12} F13 {F13} F14 {F14} F15 {F15} F16 {F16}
Lisäksi yhdistelmissä käytetään:
SHIFT + CTRL ^ ALT %
Esim. Alt + F4 lähetetään näin:
SendKeys "%{F4}"
Muut merkit lähetetään tavallisesti:
SendKeys "OP"
PS. Kirjoita ohjelman alkuun "Option Explicit", niin tällainenkin virhe paljastuu.
Kiitos sinulle Antti Laaksonen sain ohjelmani toimimaan niinkuin pitääkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.