Что нового

Как сделать выбор назначения клавишь на закрытие скрипта?

agikon

Знающий
Сообщения
789
Репутация
16
Помогите пожалуйста простейшим примером.
То есть чтобы за функцией закрытия скрипта можно было закретить любую комбинацию клавишь.
это очень сложно такое реализовать?
и как вообще происходит процесс закрепления?
 

shakur

Осваивающий
Сообщения
76
Репутация
24
можно так :smile:

Код:
........
$Combo1 = GUICtrlCreateCombo("", 120, 120, 145, 25)
GUICtrlSetData(-1, "Q|A|Z|W|S|X|E|D|C")
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
..........

GUICtrlSetData($combo1,IniRead(@ScriptDir &"\option.ini", "section1", "key1", "Q")) ;читаем из ini файла, если не удалось комбобоксу присваиваем "Q"

; устанавливаем хоткей на выход
HotKeySet("+!" & GUICtrlRead($combo1), "_ProcExit") ;shift+ctrl+значение комбобокса
.....
;При смене значения комбобокса делаем запись в ini файл
IniWrite(@ScriptDir &"\option.ini", "section1", "key1", GUICtrlRead($combo1))


......
func _ProcExit()
 exit
endfunc


...логика вроде ясна? тебе остается только дороботать скрипт :whistle:

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

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
Не очень понял... :blink:
Ты про это что-ли ?:
Код:
;Тут подлючаем библиотеки

HotKeySet('^q', '_Exit') ;CTRL + q для выхода

;тут твой код

Func _Exit()
	Exit
EndFunc


Вместо CTRL+q можешь поставить то что тебе нужно. Смотри в справке функцию HotKeySet().
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
нет нет, это клавиши конкретные закрепляются,а мне надо чтобы назначать именно те клавиши которые захотел бы.

вобщем спасибо разобрался.
только не работает клавиша контрол именно в том варианте который предложил мне shakur , когда нажимаю на контрол то просто звук с колонок писк издается но действия не происходят.

Но без комба работает то есть вот так контрол работает
Код:
HotKeySet("^+q", '_ProcExit')


а вот так не работает
Код:
HotKeySet("^" & GUICtrlRead($combo1), "_ProcExit")

подскажите пожалуйста в чём дело?
в ini-файле нормально сохраняется та буква которая стоит в комбо списке.
ну не пойму в чём дело и всё тут.
 

shakur

Осваивающий
Сообщения
76
Репутация
24
когда нажимаю на контрол то просто звук с колонок писк издается но действия не происходят
какой звук? зачем звук? действие и не произойдет если Вы жмете один CTRL т.к. Вы должны еще нажать на значение из комбобокса!

приведите весь код, так сложно сказать почему не работает)
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
а я и нажимаю ctrl+буква из комба.
звук обычный виндовский бам-бам-бам-бам... и так постоянно.
 

shakur

Осваивающий
Сообщения
76
Репутация
24
приведите код участка скрипта хотябы, иначе я Вам не смогу помоч.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
вот
Код:
#include <GuiConstantsEx.au3>

Global $CheckBox, $GUI2, $CheckBox2

Global $sIniFile = @ScriptDir & '\Config.ini'
Global $iOption1 = IniRead($sIniFile, 'Setting', 'Option1', '1')
Global $iOption2 = IniRead($sIniFile, 'Setting', 'Option2', '1')

$GUI = GUICreate("PC10") ; will create a dialog box that when displayed is centered
$nButton1 = GUICtrlCreateButton('пример 1', 20, 50, 110, 30)
$nButton2 = GUICtrlCreateButton('пример 2', 20, 80, 110, 30)
$nButton3 = GUICtrlCreateButton('Окно', 20, 110, 110, 30)
$OnTop_CB = GUICtrlCreateCheckbox(" окно всегда наверху", 35, 310, 150, 20)
GUICtrlSetState(-1, $GUI_CHECKED)


;----------------- код
$Combo1 = GUICtrlCreateCombo("", 50, 180, 80, 25)
GUICtrlSetData(-1, "Q|A|Z|W|S|X|E|D|C")
GUICtrlSetFont(-1, 8, 400, 0, "Arial")

GUICtrlSetData($combo1,IniRead(@ScriptDir &"\option.ini", "section1", "key1", "Q"))
HotKeySet("^" & GUICtrlRead($combo1), "_ProcExit")
IniWrite(@ScriptDir &"\option.ini", "section1", "key1", GUICtrlRead($combo1))
;------------------



GUISetState()
WinSetOnTop($GUI, "", 1)
NewWindow();     **** Добавлено

; Run the GUI until the dialog is closed
While 1
    $nMsg = GUIGetMsg(1)

    Switch $nMsg[0]
        Case $GUI_EVENT_CLOSE
            Switch $nMsg[1]
                Case $GUI
                    Exit
                Case $GUI2
                    GUISetState(@SW_HIDE, $GUI2)
            EndSwitch
        Case 0; Добавлено
            ContinueLoop; Добавлено
        Case $nButton1
            _galochka()
        Case $nButton2
            MsgBox(4096+64, 'Info', 'пример 2', 0, $GUI)
        Case $nButton3
           ; If Not IsHWnd($GUI2) Then
              ;  NewWindow()
           ; EndIf
            GUISetState(@SW_SHOW, $GUI2)
        Case $OnTop_CB
            If BitAND(GUICtrlRead($OnTop_CB), $GUI_CHECKED) Then
                WinSetOnTop($GUI, "", 1)
            Else
                WinSetOnTop($GUI, "", 0)
            EndIf
        Case $CheckBox
            IniWrite($sIniFile, 'Setting', 'Option1', GUICtrlRead($CheckBox))
        Case $CheckBox2
            IniWrite($sIniFile, 'Setting', 'Option2', GUICtrlRead($CheckBox2))
    EndSwitch
WEnd

Func NewWindow()
    $GUI2 = GUICreate('New window', 400, 300, -1, -1, -1, -1, $GUI)
    $CheckBox = GUICtrlCreateCheckbox("галочка", 15, 120, 340, 20)
    GUICtrlSetState(-1, $iOption1)

    $CheckBox2 = GUICtrlCreateCheckbox("галочка2", 15, 150, 340, 20)
    GUICtrlSetState(-1, $iOption2)
     GUISetState(@SW_HIDE, $GUI2)
EndFunc

Func _galochka()
   ConsoleWrite ("GUICtrlRead($CheckBox = " & GUICtrlRead($CheckBox) & @LF)

    If BitAND(GUICtrlRead($CheckBox), $GUI_CHECKED) Then
        MsgBox(4096+64, 'Info', 'галочка установлена')
    Else
        MsgBox(4096+64, 'Info', 'галочка не установлена')
    EndIf
EndFunc

func  _ProcExit()
 exit
endfunc
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
А если так ?:
Код:
#include <Misc.au3>
#include <GUIConstantsEx.au3>

$GUI = GUICreate('Test', 400, 300)
$Combo1 = GUICtrlCreateCombo('Q', 100, 50, 100)
GUICtrlSetData(-1, 'E|Z|ESC')
GUISetState()

While 1
	$CT = GUICtrlRead($Combo1)
	Switch $CT
		Case 'Q'
			If _IsPressed(11) And _IsPressed(51) Then Exit ;CTRL + Q
		Case 'E'
			If _IsPressed(11) And _IsPressed(45) Then Exit ;CTRL + E
		Case 'Z'
			If _IsPressed(11) And _IsPressed('5A') Then Exit ;CTRL + Z
		Case 'ESC'
			If _IsPressed(11) And _IsPressed('1B') Then Exit ;CTRL + ESC
	EndSwitch

	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
Zaramot
а почему в том коде что я привёл не работает?
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
просто странно, шифтм, альт вместе с буквой работают, а именно в комбинация с контролом не работает.
 

shakur

Осваивающий
Сообщения
76
Репутация
24
Код:
GUICtrlSetData(-1, "Q|A|Z|W|S|X|E|D|C")

поменяй на
Код:
GUICtrlSetData(-1, "q|a|z|w|s|x|e|d|c")


проблема с регистром букв, HotKeySet чувствителен к регистру, как окозалось :smile:
и все заработает :whistle:
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
shakur
точно
это ж надо и такое бывает :smile:
спасибо ребята, тема решена.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
shakur [?]
чувствителен к регистру, как окозалось
да. потому что по сути A = shift + a, об этом кстати в справке написано
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
Zaramot
а подскажите где взять весь список клавишь в номерах?
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
Zaramot
а подскажите где взять весь список клавишь в номерах?
В справке посмотрите функцию _IsPressed() или тут:
http://dundats.mvps.org/help/html/libfunctions/_ispressed.htm
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
Zaramot спасибо.
 
Верх