Что нового

[Мышь, клавиатура] Создание персональной виртуальной клавиатуры!

novosibirec

Новичок
Сообщения
16
Репутация
0
Приветствую! Ребят возникла такая идея! Хочу написать свою виртуальную клаву с нужными мне кнопками и дизайном, но проблема в следующем! как заставить вводить текст в активные окна ведь если активировать окно для ввода, то становиться не активным окно скрипта! Как исправить??
пробую для начала на таком примере)
Код:
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 172, 183, 193, 125)
$Button1 = GUICtrlCreateButton("MEDIA_NEXT", 48, 40, 115, 25, 0)
$Button2 = GUICtrlCreateButton("MEDIA_STOP", 48, 80, 115, 25, 0)
$Button3 = GUICtrlCreateButton("MEDIA_PREV", 48, 120, 115, 25, 0)
$Button4 = GUICtrlCreateButton("9", 48, 160, 115, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

   While 1
        Switch GUIGetMsg()
          
            Case $Button1
				Send("{MEDIA_NEXT}") 
				Case $Button2
				Send("{MEDIA_STOP}")
				Case $Button3
				Send("{MEDIA_PREV}")
				Case $Button4
 				Send("9") ; а вот это уже не работает так как окно не активно!(
				Case $GUI_EVENT_CLOSE
                ExitLoop
		EndSwitch
    WEnd
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
novosibirec
Я делал себе такую клаву, но бросил.
Это недоделанная заготовка, основанная на примере madmasles
отсюда http://autoit-script.ru/index.php?topic=4703.0
При клике на кнопку сворачивания прячется в бок экрана, и, соответственно, возвращается обратно при клике по видимой части клавиатуры.

Код:
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Global $fLeftAltHolden = False
Global $fLeftCtrlHolden = False
$iWidth = 345
$iHeight = 145

$WS_EX_NOACTIVATE = 0x08000000
$MA_NOACTIVATE = 3
$MA_NOACTIVATEANDEAT = 4

Dim $aLetter[14][3] = [[13],['Q', 'й'],['w', 'ц'],['e', 'у'],['r', 'к'],['t', 'е'], _
        ['y', 'н'],['u', 'г'],['i', 'ш'],['o', 'щ'],['p', 'з'],['[','х'],[']','ъ'],['a','ф']]

$fUp = False


$GUI=GUICreate('Test', $iWidth, $iHeight, @DesktopWidth/2-$iWidth/2,@DesktopHeight/2-$iHeight/2, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_NOACTIVATE))


$nMinimize_Button = GUICtrlCreateButton("—", $iWidth - 35, 3, 16, 16) 
GUICtrlSetColor(-1, 0xFFFFFF) 
GUICtrlSetBkColor(-1, 0x0000FF) 
 
$nClose_Button = GUICtrlCreateButton("X", $iWidth - 19, 3, 16, 16) 
GUICtrlSetColor(-1, 0xFFFFFF) 
GUICtrlSetBkColor(-1, 0xFF0000) 
GUICtrlCreateLabel("", 0, 0, $iWidth, 17, $WS_CLIPSIBLINGS, BitOR($WS_EX_DLGMODALFRAME, $GUI_WS_EX_PARENTDRAG)) 
GUICtrlSetBkColor(-1, 0x9D9DFF)
$nCheckBoxUp = GUICtrlCreateCheckbox('Caps Lock', 230, 20, 70, 20)

$nLabel = GUICtrlCreateLabel('RU', 20, 20, 40, 18)
$nButtonRU_EN = GUICtrlCreateButton('Включить EN', 110, 20, 90, 30)

For $i = 1 To $aLetter[0][0]-1
    $aLetter[$i][2] = GUICtrlCreateButton($aLetter[$i][1], 0 + 25 * ($i - 1), 50, 25, 25)
Next
For $i = $aLetter[0][0] To $aLetter[0][0]
    $aLetter[$i][2] = GUICtrlCreateButton($aLetter[$i][1], 0 + 25 * 0*($i - 1), 75, 25, 25)
Next

$nButtonSpace = GUICtrlCreateButton('S P A C E', 80, 120, 150, 25)

GUISetState()
WinSetOnTop($GUI,'',1)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
	Case $nClose_Button
		Exit
		Case $nMinimize_Button
         WinMove($GUI,'',-$iWidth+20, Round(@DesktopHeight/2-$iHeight/2,0))               
		Case $GUI_EVENT_PRIMARYDOWN
			$size = WinGetPos($GUI,'')
			If $size[0]= -$iWidth+20 and $size[1]= Round(@DesktopHeight/2-$iHeight/2,0) then
			WinMove($GUI,'',@DesktopWidth/2-$iWidth/2,@DesktopHeight/2-$iHeight/2)
			EndIf
		 Case $nCheckBoxUp
            If GUICtrlRead($nCheckBoxUp) = $GUI_CHECKED Then
                $fUp = True
            Else
                $fUp = False
            EndIf
        Case $nButtonRU_EN
            If StringInStr(GUICtrlRead($nButtonRU_EN), 'EN') Then
                GUICtrlSetData($nButtonRU_EN, 'Включить RU')
                GUICtrlSetData($nLabel, 'EN')
                For $i = 1 To $aLetter[0][0]
                    GUICtrlSetData($aLetter[$i][2], $aLetter[$i][0])
                Next
            Else
                GUICtrlSetData($nButtonRU_EN, 'Включить EN')
                GUICtrlSetData($nLabel, 'RU')
                For $i = 1 To $aLetter[0][0]
                GUICtrlSetData($aLetter[$i][2], $aLetter[$i][1])
                Next
            EndIf
        Case $nButtonSpace
            PressButton('{SPACE}')
		
    EndSwitch
    For $i = 1 To $aLetter[0][0]
        If $nMsg = $aLetter[$i][2] Then
            If _IsPressed('12') Or $fUp Then ;если нажат Ctrl
                PressButton(StringUpper(GUICtrlRead($aLetter[$i][2])))
            Else
                PressButton(GUICtrlRead($aLetter[$i][2]))
            EndIf
        EndIf
    Next
	
WEnd


Func PressButton($_Key)
	Send($_Key)
EndFunc
 
Верх