Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)

Модерирует : gyra, Maz

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

sproxy



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
отключение / включение win клавиши:

Код:
#region: - Option
    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
#endregion
 
#region: - Include

    #include <GuiButton.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <ToolTip_UDF.au3>
    #include <WindowsConstants.au3>
#endregion
 
HotKeySet('{ESC}', '_Pro_Exit')
 
#region: - Global
    Global  $hWinMain, $hState, $hOffOn
    Global  $iWidth = 125
    Global  $sKey = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout'
    Global  $sValueName = 'Scancode Map'
    Global  $sValue = '00 00 00 00 00 00 00 00 03 00 00 00 00 00 5B E0 00 00 5C E0 00 00 00 00'
    Global  $sState = RegRead($sKey, $sValueName)
#endregion
 
#region: - GUI

    $hWinMain = GUICreate('Off / On Win', $iWidth, 155, -1, -1, $WS_CAPTION+$WS_SYSMENU)
        GUISetIcon('shell32.dll', -40, $hWinMain)
            GUISetOnEvent($GUI_EVENT_CLOSE,     '_Pro_Exit')
 
    GUICtrlCreateGroup('   Клавиши Win:   ', 5, 5, $iWidth-10, 50)
        GUICtrlSetFont(-1, 9, 400)
 
    $hState = GUICtrlCreateLabel('Включенна', 10, 26, $iWidth-20, 20, $SS_CENTER)
        GUICtrlSetFont(-1, 11, 700)
 
    $hOffOn = GUICtrlCreateButton('Выключить', 5, 60, $iWidth-10, 30, $BS_DEFPUSHBUTTON )
        GUICtrlSetFont(-1, 8.5, 700)
        _ToolTip_SetText($hOffOn, 'Изминения вступять в силу' & @CRLF & 'после перезагрузки компьютер', 'Внимание:', 7)
        _ToolTip_SetBkColor($hOffOn, 0xffffff)
        _ToolTip_SetTextColor($hOffOn, 0x000000)
        _ToolTip_SetFont($hOffOn, 10, 400, 0, "MS Sans Serif")
            GUICtrlSetOnEvent(-1, '_Off_On')
 
    GUICtrlCreateButton('Перезагрузить', 5, 60+30, $iWidth-10, 30)
        GUICtrlSetOnEvent(-1, '_Restart')
 
    GUICtrlCreateButton('Закрыть  [Esc]', 5, 60+30*2, $iWidth-10, 30)
        GUICtrlSetOnEvent(-1, '_Pro_Exit')
#endregion
 
#region: - После создания всех GUI

    _ToolTip_SetShowTime(86400000)
    _Set_State()
    GUISetState(@SW_SHOW, $hWinMain)
#endregion
 
#region: - Sleep, Exit

While 1
    Sleep(10)
WEnd
 
Func
_Pro_Exit()
    Exit
EndFunc

#endregion
 
Func _Set_State()
    If $sState <> '' Then
        GUICtrlSetData($hState, 'Выключенна')
        GUICtrlSetColor($hState, 0xff0000)
        GUICtrlSetData($hOffOn, 'Включить')
    Else
        GUICtrlSetData($hState, 'Включенна')
        GUICtrlSetColor($hState, 0x00bb00)
        GUICtrlSetData($hOffOn, 'Выключить')
    EndIf
EndFunc
 
Func
_Off_On()
    If $sState <> '' Then
        RegDelete($sKey, $sValueName)
    Else
        RegWrite($sKey, $sValueName, 'REG_BINARY', $sValue)
    EndIf
    $sState = RegRead($sKey, $sValueName)
    _Set_State()
EndFunc
 
Func
_Restart()
    Run('shutdown -r')
;~  Run('shutdown -r -t 60')
    _Pro_Exit()
EndFunc

 
>>> ToolTip_UDF.au3
 
 
Добавлено:
tayron 02:34 28-03-2009
Цитата:
Самый большой косяк в том, что постоянно вылазает меню "пуск"!  
 Ну а вообще, как я и говорил - секунду или около того приходится ждать, может от "большого" кода, нет?

как он вообще, этот скрипт, у Вас работал?
там есть ошибки:
 

Код:
Func chengeWinLang()  
    $hW = WinGetHandle("last")

В данном случае "last" будет воспринято как заголовок окна. может так имелось в виду:

Код:
 $hWnd = WinGetHandle('[Active]')

 

Код:
if $lang == 'en' then _SetKeyboardLayout("00000409",WinGetHandle($hWnd)); EndIf

нет смысла получать еще раз указатьель окна, он же был передан в функцию, просто оставить:

Код:
If $iLangCode == 'ru' Then _SetKeyboardLayout('00000419', $hWnd)

 

Код:
    Switch  
        Case "00000409"  
            return "en"  
        Case "00000419"  
            return "ru"  
    EndSwitch

тут явно не хватает: $langCode, вот так:

Код:
    Switch  $langCode
        Case "00000409"  
            return "en"  
        Case "00000419"  
            return "ru"  
    EndSwitch

 
 
вот причесал:
 

Код:
#region: - Option
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
    Opt('WinTitleMatchMode',    2)
#endregion
 
HotKeySet('{ESC}', '_Pro_Exit')
HotKeySet('{LWIN}{SPACE}', '_ChengeWinLang')
HotKeySet('{RWIN}{SPACE}', '_ChengeWinLang')
HotKeySet('+{SPACE}', '_ChengeWinLang')
 
#region: - Sleep, Exit
While 1
    Sleep(10)
WEnd
 
Func
_Pro_Exit()
    Exit
EndFunc

#endregion
 
Func _ChengeWinLang()
    Local $hWnd
    $hWnd
= WinGetHandle('[Active]')
 
    Switch _GetKeyboardLayout($hWnd)
        Case 'ru'
            _ChLang('en', $hWnd)
        Case 'en'
            _ChLang('ru', $hWnd)
    EndSwitch
EndFunc
 
Func
_GetKeyboardLayout($hWnd)
    Local $iLangCode
    Local $aRet = DllCall('user32.dll', 'long', 'GetWindowThreadProcessId', 'hwnd', $hWnd, 'ptr', 0)
    $aRet = DllCall('user32.dll', 'long', 'GetKeyboardLayout', 'long', $aRet[0])
 
    $iLangCode = Hex($aRet[0], 4)
 
    Switch $iLangCode
        Case '0409'
            return 'en'
        Case '0419'
            return 'ru'
    EndSwitch
EndFunc
 
Func
_ChLang($iLangCode, $hWnd)
   If $iLangCode == 'ru' Then _SetKeyboardLayout('00000419', $hWnd)
   If $iLangCode == 'en' Then _SetKeyboardLayout('00000409', $hWnd)
EndFunc
 
 Func
_SetKeyboardLayout($sLayoutID, $hWnd)
    Local $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $ret = DllCall('user32.dll', 'long', 'LoadKeyboardLayout', 'str', $sLayoutID, 'int', 0)
    DllCall('user32.dll', 'ptr', 'SendMessage', 'hwnd', $hWnd, _
                                                'int', $WM_INPUTLANGCHANGEREQUEST, _
                                                'int', 1, _
                                                'int', $ret[0])
EndFunc

 
 

Цитата:
может от "большого" кода, нет?

код оооочень не большой и обработка ооочень ростая.
Все должно летать. На моей локальной Win XP по Shift+space обрабатывается мнгновенно.
Скорее всего траблы из за виртуальныйо Windows.
 

Цитата:
ASC всеравно ее читает как клавишу

уммм, ASC, а кто это/что? _))
 

Цитата:
Еще я обнаружил, что пробел в окно не отсылается

Как и писал выше. Здесь используется HotKeySet - он полностью заменяет действие клавиши.
Но возможно сделать просто проверку на нажатие - но смысл?
Что бы потом удалять пробелы? ...хм...хотя можно же их и автоматом удалить...
 
 
 
Добавлено:
 
хотя если высылать в окно BackSpace - то будут траблы, некоторые программы принимают
BackSpace как вохврат на предыдущую страницу/окно....

Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 03:19 28-03-2009
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru