Pomogła: 232 razy Dołączyła: 18 Wrz 2007 Posty: 2424
Wysłany: Nie 21 Lut, 2010 16:42
Dodatkowe przyciski na klawiaturze
~ Dodatkowe przyciski na klawiaturze [VX] ~
Krótki opis
Skrypt umożliwia wykorzystanie innych przycisków na klawiaturze niż domyślne. Można przykładowo wykorzystać literkę 'L', która normalnie, nie odpowiada za nic. Skrypt jest jedynie dodatkiem, ale dzięki niemu można wspomniane literki wykorzystać z innych skryptach.
State = Win32API.new('user32','GetKeyState',['i'],'i')
Key = Win32API.new('user32','GetAsyncKeyState',['i'],'i')
USED_KEYS = [Mouse_Left, Mouse_Right]
module_function
def self.getstate(key)
return true unless State.call(key).between?(0, 1)
return false
end
def self.testkey(key)
Key.call(key) & 0x01 == 1
end
def self.update
@keys = []
@keys.push(Input::Mouse_Left) if self.testkey(Input::Mouse_Left)
@keys.push(Input::Mouse_Right) if self.testkey(Input::Mouse_Right)
@keys.push(Input::Back) if self.testkey(Input::Back)
@keys.push(Input::Tab) if self.testkey(Input::Tab)
@keys.push(Input::Enter) if self.testkey(Input::Enter)
@keys.push(Input::Shift) if self.testkey(Input::Shift)
@keys.push(Input::Ctrl) if self.testkey(Input::Ctrl)
@keys.push(Input::Alt) if self.testkey(Input::Alt)
@keys.push(Input::Esc) if self.testkey(Input::Esc)
for key in Input::Letters.values
@keys.push(key) if self.testkey(key)
end
for key in Input::Numberkeys.values
@keys.push(key) if self.testkey(key)
end
for key in Input::Numberpad.values
@keys.push(key) if self.testkey(key)
end
for key in Input::Fkeys.values
@keys.push(key) if self.testkey(key)
end
@keys.push(Input::Collon) if self.testkey(Input::Collon)
@keys.push(Input::Equal) if self.testkey(Input::Equal)
@keys.push(Input::Comma) if self.testkey(Input::Comma)
@keys.push(Input::Underscore) if self.testkey(Input::Underscore)
@keys.push(Input::Dot) if self.testkey(Input::Dot)
@keys.push(Input::Backslash) if self.testkey(Input::Backslash)
@keys.push(Input::Lb) if self.testkey(Input::Lb)
@keys.push(Input::Rb) if self.testkey(Input::Rb)
@keys.push(Input::Quote) if self.testkey(Input::Quote)
@keys.push(Input::Space) if self.testkey(Input::Space)
@keys.push(Input::LT) if self.testkey(Input::LT)
@keys.push(Input::UPs) if self.testkey(Input::UPs)
@keys.push(Input::RT) if self.testkey(Input::RT)
@keys.push(Input::DN) if self.testkey(Input::DN)
@pressed = []
@pressed.push(Input::Space) if self.getstate(Input::Space)
@pressed.push(Input::Mouse_Left) if self.getstate(Input::Mouse_Left)
@pressed.push(Input::Mouse_Right) if self.getstate(Input::Mouse_Right)
@pressed.push(Input::Back) if self.getstate(Input::Back)
@pressed.push(Input::Tab) if self.getstate(Input::Tab)
@pressed.push(Input::Enter) if self.getstate(Input::Enter)
@pressed.push(Input::Shift) if self.getstate(Input::Shift)
@pressed.push(Input::Ctrl) if self.getstate(Input::Ctrl)
@pressed.push(Input::Alt) if self.getstate(Input::Alt)
@pressed.push(Input::Esc) if self.getstate(Input::Esc)
@pressed.push(Input::LT) if self.getstate(Input::LT)
@pressed.push(Input::UPs) if self.getstate(Input::UPs)
@pressed.push(Input::RT) if self.getstate(Input::RT)
@pressed.push(Input::DN) if self.getstate(Input::DN)
for key in Input::Numberkeys.values
@pressed.push(key) if self.getstate(key)
end
for key in Input::Numberpad.values
@pressed.push(key) if self.getstate(key)
end
for key in Input::Letters.values
@pressed.push(key) if self.getstate(key)
end
for key in Input::Fkeys.values
@pressed.push(key) if self.getstate(key)
end
@pressed.push(Input::Collon) if self.getstate(Input::Collon)
@pressed.push(Input::Equal) if self.getstate(Input::Equal)
@pressed.push(Input::Comma) if self.getstate(Input::Comma)
@pressed.push(Input::Underscore) if self.getstate(Input::Underscore)
@pressed.push(Input::Dot) if self.getstate(Input::Dot)
@pressed.push(Input::Backslash) if self.getstate(Input::Backslash)
@pressed.push(Input::Lb) if self.getstate(Input::Lb)
@pressed.push(Input::Rb) if self.getstate(Input::Rb)
@pressed.push(Input::Quote) if self.getstate(Input::Quote)
end
def self.triggerd?(key)
return true if @keys.include?(key)
return false
end
def self.pressed?(key)
return true if @pressed.include?(key)
return false
end
def self.dir4
return 2 if self.pressed?(Input::DN)
return 4 if self.pressed?(Input::LT)
return 6 if self.pressed?(Input::RT)
return 8 if self.pressed?(Input::UPs)
return 0
end
def trigger?(key)
Inputed?(key,"trigger")
end
def repeat?(key)
Inputed?(key,"repeat")
end
def press?(key)
Inputed?(key,"press")
end
def Inputed?(key,type)
keys = []
case key
when Input::DOWN
keys.push(Input::DN)
when Input::UP
keys.push(Input::UPs)
when Input::LEFT
keys.push(Input::LT)
when Input::RIGHT
keys.push(Input::RT)
when Input::A
keys.push(Input::Shift)
when Input::B
keys.push(Input::Esc, Input::Numberpad[0], Input::Letters["X"])
when Input::C
keys.push(Input::Space, Input::Enter)
when Input::L
keys.push(Input::Letters["Q"])
when Input::R
keys.push(Input::Letters["W"])
when Input::X
keys.push(Input::Letters["A"])
when Input::Y
keys.push(Input::Letters["S"])
when Input::Z
keys.push(Input::Letters["D"])
when Input::F5
keys.push(Input::Fkeys[5])
when Input::F6
keys.push(Input::Fkeys[6])
when Input::F7
keys.push(Input::Fkeys[7])
when Input::F8
keys.push(Input::Fkeys[8])
when Input::F9
keys.push(Input::Fkeys[9])
when Input::CTRL
keys.push(Input::Ctrl)
when Input::ALT
keys.push(Input::Alt)
else
keys.push(key)
end
case type
when "trigger"
for k in keys
if Input.triggerd?(k)
return true
end
end
when "repeat"
for k in keys
if Input.triggerd?(k)
return true
end
end
when "press"
for k in keys
if self.pressed?(k)
return true
end
end
end
return false
end
def check(key)
Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1
end
def mouse_update
@used_i = []
for i in USED_KEYS
x = check(i)
if x == true
@used_i.push(i)
end
end
end
def self.name?(num)
return "MOUSE LEFT" if num==1
return "MOUSE RIGHT" if num==2
return "MOUSE MIDDLE" if num==4
return "MOUSE 4TH" if num==5
return "MOUSE 5TH" if num==6
return "BACKSPACE" if num==8
return "TAB" if num==9
return "RETURN" if num==13
return "SHIFT" if num==16
return "CTLR" if num==17
return "ALT" if num==18
return "CAPS LOCK" if num==20
return "ESCAPE" if num==27
return "SPACE" if num==32
return "PGUP" if num==33
return "PGDN" if num==34
return "END" if num==35
return "HOME" if num==36
return "LEFT" if num==37
return "UP" if num==38
return "RIGHT" if num==39
return "DOWN" if num==40
return "SNAPSHOT" if num==44
return "INSERT" if num==45
return "DELETE" if num==46
return "0" if num==48
return "1" if num==49
return "2" if num==50
return "3" if num==51
return "4" if num==52
return "5" if num==53
return "6" if num==54
return "7" if num==55
return "8" if num==56
return "9" if num==57
return "A" if num==65
return "B" if num==66
return "C" if num==67
return "D" if num==68
return "E" if num==69
return "F" if num==70
return "G" if num==71
return "H" if num==72
return "I" if num==73
return "J" if num==74
return "K" if num==75
return "L" if num==76
return "M" if num==77
return "N" if num==78
return "O" if num==79
return "P" if num==80
return "Q" if num==81
return "R" if num==82
return "S" if num==83
return "T" if num==84
return "U" if num==85
return "V" if num==86
return "W" if num==87
return "X" if num==88
return "Y" if num==89
return "Z" if num==90
return "LWIN" if num==91
return "RWIN" if num==92
return "APPS" if num==93
return "0" if num==96
return "1" if num==97
return "2" if num==98
return "3" if num==99
return "4" if num==100
return "5" if num==101
return "6" if num==102
return "7" if num==103
return "8" if num==104
return "9" if num==105
return "*" if num==106
return "+" if num==107
return "-" if num==109
return "." if num==110
return "/" if num==111
return "F1" if num==112
return "F2" if num==113
return "F3" if num==114
return "F4" if num==115
return "F5" if num==116
return "F6" if num==117
return "F7" if num==118
return "F8" if num==119
return "F9" if num==120
return "F10" if num==121
return "F11" if num==122
return "F12" if num==123
return "NUM LOCK" if num==144
return "SCROLL LOCK" if num==145
return "LEFT SHIFT" if num==160
return "RIGHT SHIFT" if num==161
return "LEFT CTRL" if num==162
return "RIGHT CTRL" if num==163
return "LEFT ALT" if num==164
return "RIGHT ALT" if num==165
return ";" if num==186
return "=" if num==187
return "," if num==188
return "_" if num==189
return "." if num==190
return "/" if num==191
return "`" if num==192
return "[" if num==219
return " \\ " if num==220
return "]" if num==221
return "'" if num==222
return "??? - " + "#{num}"
end
end
Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
Po pierwsze, do hasha Numberkeys wpisujesz zwykłe liczby (1), nie stringi ("1"). Po drugie, całość obejmij 'Input.trigger?(...)', które sprawdza, czy przycisk jest wciśnięty.
Twój warunek w edytorze zdarzeń będzie wyglądał tak:
Kod:
Input.trigger?(Input::Numberkeys[1])
@edit: wyprzedziłeś mnie...! :)
Sprawdziłem pod xp, działa. Fajny skrypt, krótszy i wygodniejszy niż keyboard input module cybersama, którego używałem do tej pory.
Dołączył: 28 Maj 2010 Posty: 18 Skąd: Zielona Góra
Wysłany: Wto 01 Cze, 2010 12:59
Zrobiłem wszystko według instrukcji, jednak przy próbie uruchomienia projektu wyskakuje mi błąd:
"Wystąpił problem z aplikacją Game.exe(...)" itd. Czy ktoś wie czym to może być spowodowane?
Dołączył: 28 Maj 2010 Posty: 18 Skąd: Zielona Góra
Wysłany: Wto 01 Cze, 2010 13:32
Usunąłem skrypt i wszystko zaczęło działać, gdy wstawiłem go ponownie błąd znowu się pojawił. Więc jest to wina skryptu o dziwo :/ Czy to może mieć coś wspólnego z tym że posiadam makera xp tsukuru? Może mam starego rgssa w windowsie?
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum