cashiba 发表于 2016-12-19 13:03:40

这个虚拟键盘能做成自定义函数或插件吗?

本帖最后由 cashiba 于 2016-12-19 13:05 编辑

在网上看到一段虚拟键盘的代码,经测试可用。
在论坛里搜了一下,曾经有人发过,不过要花钱下载。
1、界面不算流畅,布局有点拥挤
2、如果能做成一个自定义函数或插件就好了,可以在需要的时候给呼出来.....
AU3基础差,能力不足,不会修改。发出来给需要的、感兴趣的.....。免币。
{:face (332):}#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=1295599487_Gnome-Input-Keyboard-64.ico
#AutoIt3Wrapper_OutFile=Virtual_Keyboard.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Virtual Keyboard with Anti - KeyLogger
#AutoIt3Wrapper_Res_FileVersion=1.1.0.6
#AutoIt3Wrapper_Res_Language=1033
#AutoIt3Wrapper_Res_Field=ProductName|Virtual Keyboard with Anti - KeyLogger
#AutoIt3Wrapper_Res_Field=InternalName|VirtualKeyboard.exe
#AutoIt3Wrapper_Res_Field=ProductVersion|1.1.0.6
#AutoIt3Wrapper_Res_Field=OriginalFilename|VirtualKeyboard.exe
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <Array.au3>
#include <WinAPI.au3>
#include <IE.au3>

Opt("WinWaitDelay", 0)
Opt("SendKeyDelay", 0)
Opt("SendKeyDownDelay", 0)
Opt("Sendcapslockmode", 0)
Opt("TrayIconHide", 1)
Opt("GUICloseOnESC", 0)

Global $fLeftShiftHolden = False
Global $fLeftAltHolden = False
Global $fLeftCtrlHolden = False
Global $fRightShiftHolden = False
Global $fRightAltHolden = False
Global $fRightCtrlHolden = False
Global Const $VK_NUMLOCK = 0x90
Global Const $VK_SCROLL = 0x91
Global Const $VK_CAPITAL = 0x14
Global $ctrlstatus = 0, $altstatus = 0, $shiftstatus = 0
;
Global $_NOACTIVATE = 0x08000000
Global $MA_NOACTIVATE = 3
Global $MA_NOACTIVATEANDEAT = 4
Global $keyStroke_Array = ['{SPACE}', '{ENTER}', '{ALT}', '{BS}', '{BACKSPACE}', '{DEL}', '{UP}', '{DOWN}', _
                '{LEFT}', '{RIGHT}', '{HOME}', '{END}', '{ESC}', '{INS}', '{PGUP}', '{PGDN}', '{F1}', '{F2}', '{F3}', _
                '{F4}', '{F5}', '{F6}', '{F7}', '{F8}', '{F9}', '{F10}', '{F11}', '{F12}', '{TAB}', '{PRINTSCREEN}', '{LWIN}', _
                '{RWIN}', '{BREAK}', '{PAUSE}', '{NUMPADMULT}', '{NUMPADADD}', '{NUMPADSUB}', '{NUMPADDIV}', '{NUMPADDOT}', _
                '{NUMPADENTER}', '{APPSKEY}', '{LALT}', '{RALT}', '{LCTRL}', '{RCTRL}', '{LSHIFT}', '{RSHIFT}', '{SLEEP}', _
                '{NUMPAD0}', '{NUMPAD1}', '{NUMPAD2}', '{NUMPAD3}', '{NUMPAD4}', '{NUMPAD5}', '{NUMPAD6}', '{NUMPAD7}', _
                '{NUMPAD8}', '{NUMPAD9}', '{ALTDOWN}', '{SHIFTDOWN}', '{CTRLDOWN}', '{ALTUP}', '{CTRLUP}', '{SHIFTUP}', '{CAPSLOCK}', _
                '{INSERT}', '{DELETE}', '{Escape}']

_ArraySort($keyStroke_Array)

HotKeySet("{Esc}", "Quit")

$ProductVersion = "v0.1"
$MainGUITitle = "Virtual Keyboard " & $ProductVersion & " - "
$Form1 = GUICreate($MainGUITitle, 722, 194, 300, 300, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $_NOACTIVATE)) ;$WS_POPUPWINDOW;BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
$Esc = GUICtrlCreateButton("Esc", 0, 0, 33, 25, $WS_GROUP)
$F1 = GUICtrlCreateButton("F1", 48, 0, 33, 25, $WS_GROUP)
$F2 = GUICtrlCreateButton("F2", 80, 0, 33, 25, $WS_GROUP)
$F3 = GUICtrlCreateButton("F3", 112, 0, 33, 25, $WS_GROUP)
$F4 = GUICtrlCreateButton("F4", 144, 0, 33, 25, $WS_GROUP)
$F5 = GUICtrlCreateButton("F5", 184, 0, 33, 25, $WS_GROUP)
$F6 = GUICtrlCreateButton("F6", 216, 0, 33, 25, $WS_GROUP)
$F7 = GUICtrlCreateButton("F7", 248, 0, 33, 25, $WS_GROUP)
$F8 = GUICtrlCreateButton("F8", 280, 0, 33, 25, $WS_GROUP)
$F9 = GUICtrlCreateButton("F9", 320, 0, 33, 25, $WS_GROUP)
$F10 = GUICtrlCreateButton("F10", 352, 0, 33, 25, $WS_GROUP)
$F11 = GUICtrlCreateButton("F11", 385, 0, 33, 25, $WS_GROUP)
$F12 = GUICtrlCreateButton("F12", 417, 0, 33, 25, $WS_GROUP)
$PrintScreen = GUICtrlCreateButton("prtscr", 488, 0, 33, 25, $WS_GROUP)
$ScrollLock = GUICtrlCreateButton("scr lo", 520, 0, 33, 25, $WS_GROUP)
$PauseBreak = GUICtrlCreateButton("pa br", 552, 0, 33, 25, $WS_GROUP)
$Igel = GUICtrlCreateButton("`", 0, 32, 33, 33, $WS_GROUP)
$One = GUICtrlCreateButton("1", 32, 32, 33, 33, $WS_GROUP)
$Two = GUICtrlCreateButton("2", 64, 32, 33, 33, $WS_GROUP)
$Three = GUICtrlCreateButton("3", 96, 32, 33, 33, $WS_GROUP)
$Four = GUICtrlCreateButton("4", 128, 32, 33, 33, $WS_GROUP)
$Five = GUICtrlCreateButton("5", 160, 32, 33, 33, $WS_GROUP)
$Six = GUICtrlCreateButton("6", 192, 32, 33, 33, $WS_GROUP)
$Seven = GUICtrlCreateButton("7", 224, 32, 33, 33, $WS_GROUP)
$Eight = GUICtrlCreateButton("8", 256, 32, 33, 33, $WS_GROUP)
$Nine = GUICtrlCreateButton("9", 288, 32, 33, 33, $WS_GROUP)
$Zero = GUICtrlCreateButton("0", 320, 32, 33, 33, $WS_GROUP)
$Minus = GUICtrlCreateButton("-", 352, 32, 33, 33, $WS_GROUP)
$Equal = GUICtrlCreateButton("=", 384, 32, 33, 33, $WS_GROUP)
$Back = GUICtrlCreateButton("<-------", 416, 32, 65, 33, $WS_GROUP)
$Insert = GUICtrlCreateButton("Insert", 488, 32, 33, 33, $WS_GROUP)
$Home = GUICtrlCreateButton("Home", 520, 32, 33, 33, $WS_GROUP)
$PageUp = GUICtrlCreateButton("PgUp", 552, 32, 33, 33, $WS_GROUP)
$NumberLock = GUICtrlCreateButton("NmLo", 592, 32, 33, 33, $WS_GROUP)
$NumberPadSlash = GUICtrlCreateButton("/", 624, 32, 33, 33, $WS_GROUP)
$NumberPadX = GUICtrlCreateButton("*", 656, 32, 33, 33, $WS_GROUP)
$NumberPadMinus = GUICtrlCreateButton("-", 688, 32, 33, 33, $WS_GROUP)
$Tab = GUICtrlCreateButton("Tab", 0, 64, 41, 33, $WS_GROUP)
$q = GUICtrlCreateButton("Q", 40, 64, 33, 33, $WS_GROUP)
$w = GUICtrlCreateButton("W", 72, 64, 33, 33, $WS_GROUP)
$e = GUICtrlCreateButton("E", 104, 64, 33, 33, $WS_GROUP)
$r = GUICtrlCreateButton("R", 136, 64, 33, 33, $WS_GROUP)
$t = GUICtrlCreateButton("T", 168, 64, 33, 33, $WS_GROUP)
$y = GUICtrlCreateButton("Y", 200, 64, 33, 33, $WS_GROUP)
$u = GUICtrlCreateButton("U", 232, 64, 33, 33, $WS_GROUP)
$i = GUICtrlCreateButton("I", 264, 64, 33, 33, $WS_GROUP)
$o = GUICtrlCreateButton("O", 296, 64, 33, 33, $WS_GROUP)
$p = GUICtrlCreateButton("P", 328, 64, 33, 33, $WS_GROUP)
$LeftBrackets = GUICtrlCreateButton("[", 360, 64, 33, 33, $WS_GROUP)
$RightBrackets = GUICtrlCreateButton("]", 392, 64, 33, 33, $WS_GROUP)
$Enter = GUICtrlCreateButton("Enter", 424, 64, 57, 65, $WS_GROUP)
$Delete = GUICtrlCreateButton("Del", 488, 64, 33, 33, $WS_GROUP)
$End = GUICtrlCreateButton("End", 520, 64, 33, 33, $WS_GROUP)
$PageDown = GUICtrlCreateButton("PgDn", 552, 64, 33, 33, $WS_GROUP)
$NumberPad7 = GUICtrlCreateButton("7", 592, 64, 33, 33, $WS_GROUP)
$NumberPad8 = GUICtrlCreateButton("8", 624, 64, 33, 33, $WS_GROUP)
$NumberPad9 = GUICtrlCreateButton("9", 656, 64, 33, 33, $WS_GROUP)
$NumberPadPlus = GUICtrlCreateButton("+", 688, 64, 33, 65, $WS_GROUP)
$CapsLock = GUICtrlCreateButton("CapsLck", 0, 96, 49, 33, $WS_GROUP)
$a = GUICtrlCreateButton("A", 48, 96, 33, 33, $WS_GROUP)
$s = GUICtrlCreateButton("S", 80, 96, 33, 33, $WS_GROUP)
$d = GUICtrlCreateButton("D", 112, 96, 33, 33, $WS_GROUP)
$f = GUICtrlCreateButton("F", 144, 96, 33, 33, $WS_GROUP)
$g = GUICtrlCreateButton("G", 176, 96, 33, 33, $WS_GROUP)
$h = GUICtrlCreateButton("H", 208, 96, 33, 33, $WS_GROUP)
$j = GUICtrlCreateButton("J", 240, 96, 33, 33, $WS_GROUP)
$k = GUICtrlCreateButton("K", 272, 96, 33, 33, $WS_GROUP)
$l = GUICtrlCreateButton("L", 304, 96, 33, 33, $WS_GROUP)
$Colon = GUICtrlCreateButton(";", 336, 96, 33, 33, $WS_GROUP)
$Apostrophe = GUICtrlCreateButton("'", 368, 96, 33, 33, $WS_GROUP)
$RightSlash = GUICtrlCreateButton("\", 400, 96, 33, 33, $WS_GROUP)
$NumberPad4 = GUICtrlCreateButton("4", 592, 96, 33, 33, $WS_GROUP)
$NumberPad5 = GUICtrlCreateButton("5", 624, 96, 33, 33, $WS_GROUP)
$NumberPad6 = GUICtrlCreateButton("6", 656, 96, 33, 33, $WS_GROUP)
$LeftShift = GUICtrlCreateButton("Shift", 0, 128, 33, 33, $WS_GROUP)
$LeftSlash = GUICtrlCreateButton("\", 32, 128, 33, 33, $WS_GROUP)
$z = GUICtrlCreateButton("Z", 64, 128, 33, 33, $WS_GROUP)
$x = GUICtrlCreateButton("X", 96, 128, 33, 33, $WS_GROUP)
$c = GUICtrlCreateButton("C", 128, 128, 33, 33, $WS_GROUP)
$v = GUICtrlCreateButton("V", 160, 128, 33, 33, $WS_GROUP)
$b = GUICtrlCreateButton("B", 192, 128, 33, 33, $WS_GROUP)
$n = GUICtrlCreateButton("N", 224, 128, 33, 33, $WS_GROUP)
$m = GUICtrlCreateButton("M", 256, 128, 33, 33, $WS_GROUP)
$Comma = GUICtrlCreateButton(",", 288, 128, 33, 33, $WS_GROUP)
$Dot = GUICtrlCreateButton(".", 320, 128, 33, 33, $WS_GROUP)
$QuestionMark = GUICtrlCreateButton("/", 352, 128, 33, 33, $WS_GROUP)
$RightShift = GUICtrlCreateButton("Shift", 384, 128, 97, 33, $WS_GROUP)
$NumberPad1 = GUICtrlCreateButton("1", 592, 128, 33, 33, $WS_GROUP)
$NumberPad2 = GUICtrlCreateButton("2", 624, 128, 33, 33, $WS_GROUP)
$NumberPad3 = GUICtrlCreateButton("3", 656, 128, 33, 33, $WS_GROUP)
$NumberPadEnter = GUICtrlCreateButton("Enter", 688, 128, 33, 65, $WS_GROUP)
$LeftCtrl = GUICtrlCreateButton("Ctrl", 0, 160, 41, 33, $WS_GROUP)
$LeftWindows = GUICtrlCreateButton("Win", 40, 160, 41, 33, $WS_GROUP)
$LeftAlt = GUICtrlCreateButton("Alt", 80, 160, 41, 33, $WS_GROUP)
$Space = GUICtrlCreateButton("Space", 120, 160, 201, 33, $WS_GROUP)
$RightAlt = GUICtrlCreateButton("Alt", 320, 160, 41, 33, $WS_GROUP)
$RightWindows = GUICtrlCreateButton("Win", 360, 160, 41, 33, $WS_GROUP)
$RightCtrl = GUICtrlCreateButton("Ctrl", 400, 160, 81, 33, $WS_GROUP)
$NumberPad0 = GUICtrlCreateButton("0", 592, 160, 65, 33, $WS_GROUP)
$NumberPadDot = GUICtrlCreateButton(".", 656, 160, 33, 33, $WS_GROUP)
$LeftArrow = GUICtrlCreateButton("<", 488, 160, 33, 33, $WS_GROUP)
$DownArrow = GUICtrlCreateButton("|", 520, 160, 33, 33, $WS_GROUP)
$RightArrow = GUICtrlCreateButton(">", 552, 160, 33, 33, $WS_GROUP)
$UpArrow = GUICtrlCreateButton("^", 520, 128, 33, 33, $WS_GROUP)
;Pictures:
$NumberLockOnPic = GUICtrlCreatePic("on.bmp", 600, 3, 18, 26, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$NumberLockOffPic = GUICtrlCreatePic("off.bmp", 600, 3, 18, 26, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$CapsLockOnPic = GUICtrlCreatePic("on.bmp", 624, 3, 18, 26, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$CapsLockOffPic = GUICtrlCreatePic("off.bmp", 624, 3, 18, 26, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$ScrollLockOnPic = GUICtrlCreatePic("on.bmp", 648, 3, 18, 26, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
$ScrollLockOffPic = GUICtrlCreatePic("off.bmp", 648, 3, 18, 26, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))

;Setting Pictures:
_GetNumLock()
_GetCapsLock()
_GetScrollLock()
If _GetNumLock() = 1 Then
        $NumberLockOn = True
Else
        GUICtrlSetState($NumberLockOnPic, $GUI_HIDE)
        $NumberLockOn = False
EndIf

If _GetCapsLock() = 1 Then
        $CapsLockOn = True
Else
        GUICtrlSetState($CapsLockOnPic, $GUI_HIDE) ;;
        $CapsLockOn = False
EndIf

If _GetScrollLock() = 1 Then
        $ScrollLockOn = True
Else
        GUICtrlSetState($ScrollLockOnPic, $GUI_HIDE)
        $ScrollLockOn = False
EndIf
;Current focused window will remain focused even after the keyboard GUI is up:
;~ GUISetState()
GUISetState(@SW_HIDE)
GUIRegisterMsg($WM_MOUSEACTIVATE, 'WM_EVENTS')
$WGT = WinGetTitle("", "")
GUISetState(@SW_SHOWNOACTIVATE)
WinActivate($WGT)


While 1
        If WinActive($Form1) = False Then
                WinSetTitle($Form1, "", $MainGUITitle & WinGetTitle("", ""))
        EndIf
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $ScrollLock
                        _ScrollLockPushed()
                Case $NumberLock
                        _NumberLockPushed()
                Case $CapsLock
                        _CapsLockPushed()
                Case $Esc
                        PressButton("{Escape}", 0)
                Case $F1
                        PressButton("{F1}", 0)
                Case $F2
                        PressButton("{F2}", 0)
                Case $F3
                        PressButton("{F3}", 0)
                Case $F4
                        PressButton("{F4}", 0)
                Case $F5
                        PressButton("{F5}", 0)
                Case $F6
                        PressButton("{F6}", 0)
                Case $F7
                        PressButton("{F7}", 0)
                Case $F8
                        PressButton("{F8}", 0)
                Case $F9
                        PressButton("{F9}", 0)
                Case $F10
                        PressButton("{F10}", 0)
                Case $F11
                        PressButton("{F11}", 0)
                Case $F12
                        PressButton("{F12}", 0)
                Case $PrintScreen
                        GUISetState(@SW_HIDE)
                        PressButton("{PrintScreen}", 0)
                        GUISetState(@SW_SHOW)
                Case $PauseBreak
                        PressButton("{PAUSE}", 0)
                Case $Igel
                        PressButton("`", 0)
                Case $One
                        PressButton("1", 0)
                Case $Two
                        PressButton("2", 0)
                Case $Three
                        PressButton("3", 0)
                Case $Four
                        PressButton("4", 0)
                Case $Five
                        PressButton("5", 0)
                Case $Six
                        PressButton("6", 0)
                Case $Seven
                        PressButton("7", 0)
                Case $Eight
                        PressButton("8", 0)
                Case $Nine
                        PressButton("9", 0)
                Case $Zero
                        PressButton("0", 0)
                Case $Minus
                        PressButton("-", 0)
                Case $Equal
                        PressButton("=", 0)
                Case $Back
                        PressButton("{Backspace}", 0)
                Case $Insert
                        PressButton("{Insert}", 0)
                Case $Home
                        PressButton("{Home}", 0)
                Case $PageUp
                        PressButton("{PgUp}", 0)
                Case $NumberPadSlash
                        PressButton("/", 0)
                Case $NumberPadX
                        PressButton("*", 0)
                Case $NumberPadMinus
                        PressButton("-", 0)
                Case $Tab
                        PressButton("{Tab}", 0)
                Case $q
                        PressButton("q", 0)
                Case $w
                        PressButton("w", 0)
                Case $e
                        PressButton("e", 0)
                Case $r
                        PressButton("r", 0)
                Case $t
                        PressButton("t", 0)
                Case $y
                        PressButton("y", 0)
                Case $u
                        PressButton("u", 0)
                Case $i
                        PressButton("i", 0)
                Case $o
                        PressButton("o", 0)
                Case $p
                        PressButton("p", 0)
                Case $LeftBrackets
                        PressButton("[", 0)
                Case $RightBrackets
                        PressButton("]", 0)
                Case $Enter
                        PressButton("{Enter}", 0)
                Case $Delete
                        PressButton("{Delete}", 0)
                Case $End
                        PressButton("{End}", 0)
                Case $PageDown
                        PressButton("{PgDn}", 0)
                Case $NumberPad7
                        PressButton("7", 0)
                Case $NumberPad8
                        PressButton("8", 0)
                Case $NumberPad9
                        PressButton("9", 0)
                Case $NumberPadPlus
                        PressButton("+", 0)
                Case $a
                        PressButton("a", 0)
                Case $s
                        PressButton("s", 0)
                Case $d
                        PressButton("d", 0)
                Case $f
                        PressButton("f", 0)
                Case $g
                        PressButton("g", 0)
                Case $h
                        PressButton("h", 0)
                Case $j
                        PressButton("j", 0)
                Case $k
                        PressButton("k", 0)
                Case $l
                        PressButton("l", 0)
                Case $Colon
                        PressButton(";", 0)
                Case $Apostrophe
                        PressButton("'", 0)
                Case $RightSlash
                        PressButton("\", 0)
                Case $NumberPad4
                        PressButton("4", 0)
                Case $NumberPad5
                        PressButton("5", 0)
                Case $NumberPad6
                        PressButton("6", 0)
                Case $LeftSlash
                        PressButton("\", 0)
                Case $z
                        PressButton("z", 0)
                Case $x
                        PressButton("x", 0)
                Case $c
                        PressButton("c", 0)
                Case $v
                        PressButton("v", 0)
                Case $b
                        PressButton("b", 0)
                Case $n
                        PressButton("n", 0)
                Case $m
                        PressButton("m", 0)
                Case $Comma
                        PressButton(",", 0)
                Case $Dot
                        PressButton(".", 0)
                Case $QuestionMark
                        PressButton("/", 0)
                Case $NumberPad1
                        PressButton("1", 0)
                Case $NumberPad2
                        PressButton("2", 0)
                Case $NumberPad3
                        PressButton("3", 0)
                Case $NumberPadEnter
                        PressButton("{Enter}", 0)
                Case $LeftWindows
                        PressButton("{Lwin}", 0)
                Case $Space
                        PressButton("{Space}", 0)
                Case $RightWindows
                        PressButton("{Rwin}", 0)
                Case $NumberPad0
                        PressButton("0", 0)
                Case $NumberPadDot
                        PressButton(".", 0)
                Case $LeftArrow
                        PressButton("{Left}", 0)
                Case $DownArrow
                        PressButton("{Down}", 0)
                Case $RightArrow
                        PressButton("{Right}", 0)
                Case $UpArrow
                        PressButton("{Up}", 0)
                Case $LeftShift
                        If $fLeftShiftHolden = False And $fRightShiftHolden = False Then
                                PressButton("{SHIFTDOWN}", 1)
                                $fLeftShiftHolden = True
                                GUICtrlDelete($LeftShift)
                                $LeftShift = GUICtrlCreateButton("Shift", 0, 128, 33, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                        ElseIf $fLeftShiftHolden = True And $fRightShiftHolden = False Then
                                PressButton("{SHIFTUP}", 1)
                                $fLeftShiftHolden = False
                                GUICtrlDelete($LeftShift)
                                $LeftShift = GUICtrlCreateButton("Shift", 0, 128, 33, 33, $WS_GROUP)
                        ElseIf $fLeftShiftHolden = False And $fRightShiftHolden = True Then
                                PressButton("{SHIFTDOWN}", 1)
                                $fRightShiftHolden = False
                                $fLeftShiftHolden = True
                                GUICtrlDelete($LeftShift)
                                GUICtrlDelete($RightShift)
                                $LeftShift = GUICtrlCreateButton("Shift", 0, 128, 33, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                                $RightShift = GUICtrlCreateButton("Shift", 384, 128, 97, 33, $WS_GROUP)
                        EndIf
                Case $RightShift
                        If $fRightShiftHolden = False And $fLeftShiftHolden = False Then
                                PressButton("{SHIFTDOWN}", 1)
                                $fRightShiftHolden = True
                                GUICtrlDelete($RightShift)
                                $RightShift = GUICtrlCreateButton("Shift", 384, 128, 97, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                        ElseIf $fRightShiftHolden = True And $fLeftShiftHolden = False Then
                                PressButton("{SHIFTUP}", 1)
                                $fRightShiftHolden = False
                                GUICtrlDelete($RightShift)
                                $RightShift = GUICtrlCreateButton("Shift", 384, 128, 97, 33, $WS_GROUP)
                        ElseIf $fRightShiftHolden = False And $fLeftShiftHolden = True Then
                                PressButton("{SHIFTDOWN}", 1)
                                $fLeftShiftHolden = False
                                $fRightShiftHolden = True
                                GUICtrlDelete($RightShift)
                                GUICtrlDelete($LeftShift)
                                $RightShift = GUICtrlCreateButton("Shift", 384, 128, 97, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                                $LeftShift = GUICtrlCreateButton("Shift", 0, 128, 33, 33, $WS_GROUP)
                        EndIf
                Case $LeftCtrl
                        If $fLeftCtrlHolden = False And $fRightCtrlHolden = False Then
                                PressButton("{CTRLDOWN}", 1)
                                $fLeftCtrlHolden = True
                                GUICtrlDelete($LeftCtrl)
                                $LeftCtrl = GUICtrlCreateButton("Ctrl", 0, 160, 41, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                        ElseIf $fLeftCtrlHolden = True And $fRightCtrlHolden = False Then
                                PressButton("{CTRLUP}", 1)
                                $fLeftCtrlHolden = False
                                GUICtrlDelete($LeftCtrl)
                                $LeftCtrl = GUICtrlCreateButton("Ctrl", 0, 160, 41, 33, $WS_GROUP)
                        ElseIf $fLeftCtrlHolden = False And $fRightCtrlHolden = True Then
                                PressButton("{CTRLDOWN}", 1)
                                $fRightCtrlHolden = False
                                $fLeftCtrlHolden = True
                                GUICtrlDelete($LeftCtrl)
                                GUICtrlDelete($RightCtrl)
                                $LeftCtrl = GUICtrlCreateButton("Ctrl", 0, 160, 41, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                                $RightCtrl = GUICtrlCreateButton("Ctrl", 400, 160, 81, 33, $WS_GROUP)
                        EndIf
                Case $RightCtrl
                        If $fRightCtrlHolden = False And $fLeftCtrlHolden = False Then
                                PressButton("{CTRLDOWN}", 1)
                                $fRightCtrlHolden = True
                                GUICtrlDelete($RightCtrl)
                                $RightCtrl = GUICtrlCreateButton("Ctrl", 400, 160, 81, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                        ElseIf $fRightCtrlHolden = True And $fLeftCtrlHolden = False Then
                                PressButton("{CTRLUP}", 1)
                                $fRightCtrlHolden = False
                                GUICtrlDelete($RightCtrl)
                                $RightCtrl = GUICtrlCreateButton("Ctrl", 400, 160, 81, 33, $WS_GROUP)
                        ElseIf $fRightCtrlHolden = False And $fLeftCtrlHolden = True Then
                                PressButton("{CTRLDOWN}", 1)
                                $fLeftCtrlHolden = False
                                $fRightCtrlHolden = True
                                GUICtrlDelete($RightCtrl)
                                GUICtrlDelete($LeftCtrl)
                                $RightCtrl = GUICtrlCreateButton("Ctrl", 400, 160, 81, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                                $LeftCtrl = GUICtrlCreateButton("Ctrl", 0, 160, 41, 33, $WS_GROUP)
                        EndIf
                Case $LeftAlt
                        If $fLeftAltHolden = False And $fRightAltHolden = False Then
                                PressButton("{ALTDOWN}", 1)
                                $fLeftAltHolden = True
                                GUICtrlDelete($LeftAlt)
                                $LeftAlt = GUICtrlCreateButton("Alt", 80, 160, 41, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                        ElseIf $fLeftAltHolden = True And $fRightAltHolden = False Then
                                PressButton("{ALTUP}", 1)
                                $fLeftAltHolden = False
                                GUICtrlDelete($LeftAlt)
                                $LeftAlt = GUICtrlCreateButton("Alt", 80, 160, 41, 33, $WS_GROUP)
                        ElseIf $fLeftAltHolden = False And $fRightAltHolden = True Then
                                PressButton("{ALTDOWN}", 1)
                                $fRightAltHolden = False
                                $fLeftAltHolden = True
                                GUICtrlDelete($LeftAlt)
                                GUICtrlDelete($RightAlt)
                                $LeftAlt = GUICtrlCreateButton("Alt", 80, 160, 41, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                                $RightAlt = GUICtrlCreateButton("Alt", 320, 160, 41, 33, $WS_GROUP)
                        EndIf
                Case $RightAlt
                        If $fRightAltHolden = False And $fLeftAltHolden = False Then
                                PressButton("{ALTDOWN}", 1)
                                $fRightAltHolden = True
                                GUICtrlDelete($RightAlt)
                                $RightAlt = GUICtrlCreateButton("Alt", 320, 160, 41, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                        ElseIf $fRightAltHolden = True And $fLeftAltHolden = False Then
                                PressButton("{ALTUP}", 1)
                                $fRightAltHolden = False
                                GUICtrlDelete($RightAlt)
                                $RightAlt = GUICtrlCreateButton("Alt", 320, 160, 41, 33, $WS_GROUP)
                        ElseIf $fRightAltHolden = False And $fLeftAltHolden = True Then
                                PressButton("{ALTDOWN}", 1)
                                $fLeftAltHolden = False
                                $fRightAltHolden = True
                                GUICtrlDelete($RightAlt)
                                GUICtrlDelete($LeftAlt)
                                $RightAlt = GUICtrlCreateButton("Alt", 320, 160, 41, 33, $WS_GROUP, $WS_EX_CLIENTEDGE)
                                $LeftAlt = GUICtrlCreateButton("Alt", 80, 160, 41, 33, $WS_GROUP)
                        EndIf
        EndSwitch
WEnd

Func PressButton($_Key, $_HoldNeeded)
        Local $ctrl
        $ReplacedString = StringReplace(WinGetTitle($Form1), "Virtual Keyboard v0.1 - ", "")
        $ctrl = ControlGetFocus($ReplacedString)
        $ie_handle = WinWaitActive(WinGetTitle('', ''))
        If WinActivate($ReplacedString) Then
                If _ArrayBinarySearch($keyStroke_Array, $_Key) <> -1 And $_Key <> "{TAB}" Then
                        Select
                                Case $_Key == '{SHIFTDOWN}'
                                        $shiftstatus = 1
                                Case $_Key == '{SHIFTUP}'
                                        $shiftstatus = 0
                                Case $_Key == '{CTRLDOWN}'
                                        $ctrlstatus = 1
                                Case $_Key == '{CTRLUP}'
                                        $ctrlstatus = 0
                                Case $_Key == '{ALTUP}'
                                        $altstatus = 0
                                Case $_Key == '{ALTDOWN}'
                                        $altstatus = 1
                                Case StringLower($_Key) == StringLower('{BS}')
                                        ControlFocus($ReplacedString, "", $ctrl)
                                        ControlSend($ReplacedString, "", $ctrl, "{ASC 008}")
                                Case StringLower($_Key) == StringLower('{BACKSPACE}')
                                        ControlFocus($ReplacedString, "", $ctrl)
                                        ControlSend($ReplacedString, "", $ctrl, "{ASC 008}")
                                Case Else
                                        Send($_Key)
                        EndSelect
                Else
                        If $shiftstatus == 1 And $CapsLockOn == False And $ctrlstatus == 0 And $altstatus == 0 And $_Key <> "{TAB}" Then
;~ Send('0')
                                ControlFocus($ReplacedString, "", $ctrl)
                                If $ie_handle <> 0 And StringInStr($ctrl, 'Internet Explorer_Server', 0) > 0 Then
                                        get_keyboard_focus($ie_handle, $ctrl, StringUpper($_Key))
                                Else
                                        ControlCommand($ReplacedString, "", $ctrl, "EditPaste", StringUpper($_Key))
                                EndIf
                        ElseIf $shiftstatus == 0 And $CapsLockOn == True And $ctrlstatus == 0 And $altstatus == 0 And $_Key <> "{TAB}" Then
                                ControlFocus($ReplacedString, "", $ctrl)
                                If $ie_handle <> 0 And StringInStr($ctrl, 'Internet Explorer_Server', 0) > 0 Then
                                        get_keyboard_focus($ie_handle, $ctrl, StringUpper($_Key))
                                Else
                                        ControlCommand($ReplacedString, "", $ctrl, "EditPaste", StringUpper($_Key))
                                EndIf
                        ElseIf $shiftstatus == 1 And $CapsLockOn == True And $ctrlstatus == 0 And $altstatus == 0 And $_Key <> "{TAB}" Then
                                ControlFocus($ReplacedString, "", $ctrl)
                                If $ie_handle <> 0 And StringInStr($ctrl, 'Internet Explorer_Server', 0) > 0 Then
                                        get_keyboard_focus($ie_handle, $ctrl, $_Key)
                                Else
                                        ControlCommand($ReplacedString, "", $ctrl, "EditPaste", $_Key)
                                EndIf
                        ElseIf $shiftstatus == 0 And $CapsLockOn == False And $ctrlstatus == 0 And $altstatus == 0 And $_Key <> "{TAB}" Then
                                ControlFocus($ReplacedString, "", $ctrl)
                                If $ie_handle <> 0 And StringInStr($ctrl, 'Internet Explorer_Server', 0) > 0 Then
                                        get_keyboard_focus($ie_handle, $ctrl, $_Key)
                                Else
                                        ControlCommand($ReplacedString, "", $ctrl, "EditPaste", $_Key)
                                EndIf
                        ElseIf $ctrlstatus == 1 And $altstatus == 0 Then
                                ControlFocus($ReplacedString, "", $ctrl)
                                If $ie_handle <> 0 And StringInStr($ctrl, 'Internet Explorer_Server', 0) > 0 Then
                                        get_keyboard_focus($ie_handle, $ctrl, $_Key)
                                Else
                                        ControlSend($ReplacedString, "", $ctrl, '^' & $_Key)
                                EndIf
                        ElseIf $ctrlstatus == 0 And $altstatus == 1 Then
                                ControlFocus($ReplacedString, "", $ctrl)
                                ControlSend($ReplacedString, "", $ctrl, '!' & $_Key)
                        Else
                                ControlFocus($ReplacedString, "", $ctrl)
                                ControlSend($ReplacedString, "", $ctrl, "{ASC 0x09}")
                        EndIf
                EndIf
        EndIf
        If $_HoldNeeded = 1 Then
                SoundPlay("Hold.wav")
        Else
                SoundPlay("Type.wav")
                SoundSetWaveVolume(10) ;Set volume for both Hold.wav and Type.wav
        EndIf
EndFunc   ;==>PressButton

Func get_keyboard_focus($ie_handle, $control_class_namenn, $key)
        _IEErrorHandlerRegister("MyErrFunc")
        $oIE = _IEAttach($ie_handle, 'Embedded')
        If IsObj($oIE) Then
                $oIE.document.activeElement.name
                If @error == 0 Then
                        $oRange = $oIE.document.selection.createRange()
                        $oRange.text = $key
                        Return
                Else
                        ConsoleWrite($key)
                        ControlSend('', '', '', $key)
                EndIf
        EndIf
EndFunc   ;==>get_keyboard_focus

Func MyErrFunc()
        SetError(1, 1, 1)
        Return
EndFunc   ;==>MyErrFunc

Func _GetNumLock() ; By GaryFrost
        Local $ret
        $ret = DllCall("user32.dll", "long", "GetKeyState", "long", $VK_NUMLOCK)
        Return $ret
EndFunc   ;==>_GetNumLock

Func _GetScrollLock() ; By GaryFrost
        Local $ret
        $ret = DllCall("user32.dll", "long", "GetKeyState", "long", $VK_SCROLL)
        Return $ret
EndFunc   ;==>_GetScrollLock

Func _GetCapsLock() ; By GaryFrost
        Local $ret
        $ret = DllCall("user32.dll", "long", "GetKeyState", "long", $VK_CAPITAL)
        Return $ret
EndFunc   ;==>_GetCapsLock

Func Quit()
        GUIDelete($Form1)
        Exit
EndFunc   ;==>Quit

Func _NumberLockPushed()
        If $NumberLockOn = True Then
                GUICtrlSetState($NumberLockOnPic, $GUI_HIDE)
                PressButton("{NumLock}", 1)
                $NumberLockOn = False
        Else
                GUICtrlSetState($NumberLockOnPic, $GUI_SHOW)
                PressButton("{NumLock}", 1)
                $NumberLockOn = True
        EndIf
EndFunc   ;==>_NumberLockPushed

Func _ScrollLockPushed()
        If $ScrollLockOn = True Then
                GUICtrlSetState($ScrollLockOnPic, $GUI_HIDE)
                PressButton("{ScrollLock}", 1)
                $ScrollLockOn = False
        Else
                GUICtrlSetState($ScrollLockOnPic, $GUI_SHOW)
                PressButton("{ScrollLock}", 1)
                $ScrollLockOn = True
        EndIf
EndFunc   ;==>_ScrollLockPushed

Func _CapsLockPushed()
        If $CapsLockOn = True Then
                GUICtrlSetState($CapsLockOnPic, $GUI_HIDE)
                PressButton("{CapsLock}", 1)
                $CapsLockOn = False
        Else
                GUICtrlSetState($CapsLockOnPic, $GUI_SHOW)
                PressButton("{CapsLock}", 1)
                $CapsLockOn = True
        EndIf
EndFunc   ;==>_CapsLockPushed

Func WM_EVENTS($hWndGUI, $MsgID, $WParam, $LParam)
        Switch $hWndGUI
                Case $Form1
                        Switch $MsgID
                                Case $WM_MOUSEACTIVATE
                                        ; Check mouse position
                                        Local $aMouse_Pos = GUIGetCursorInfo($Form1)
                                        If $aMouse_Pos > 0 Then
                                                Local $word = _WinAPI_MakeLong($aMouse_Pos, $BN_CLICKED)
                                                _SendMessage($Form1, $WM_COMMAND, $word, GUICtrlGetHandle($aMouse_Pos))
                                        ElseIf $aMouse_Pos < 0 And $aMouse_Pos > 700 Then
                                                Quit()
                                        Else
                                                WinActivate($Form1)
                                        EndIf
                                        Return $MA_NOACTIVATEANDEAT
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_EVENTS

q410225 发表于 2016-12-19 13:12:00

本帖最后由 q410225 于 2016-12-19 13:17 编辑

做的挺精致的,

想呼出,最简单的是编译后做个快捷方式,设热键,

要不然就用HotKeySet

1361739590 发表于 2016-12-21 09:21:42

PressButton($_Key, $_HoldNeeded)
这个就是主函数吧,可以直接调用,其他的都是界面和变量定义。
页: [1]
查看完整版本: 这个虚拟键盘能做成自定义函数或插件吗?