1 (изменено: evgen_dev, 2015-09-01 11:34:26)

Тема: AHK: Отправить определенный код кнопки

#UseHook, On   ; Предосторожность на случай, если клавиша должна будет
               ; посылать саму себя. Делает то же, что префикс $, только
               ; для всех гор. клавиш, которые ниже.


;----- Пример для клавиши Shift-Ctrl-Q -----------

+^vk51:: Gosub, PressCount            ; Запускается счётчик нажатий.

+^vk51(1):                            ; Код для одиночного нажатия Shift-Ctrl-Q.
  Send, icar := ComObjCreate("RideRunner.SDK")
icar.Execute("SetVar;duino_key;duino_11111111||OnD uinoKeyPress").
Return

+^vk51(2):                            ; Код для двойного нажатия Shift-Ctrl-Q.
  Send, icar := ComObjCreate("RideRunner.SDK")
icar.Execute("SetVar;duino_key;duino_11111112||OnD uinoKeyPress").
Return

#UseHook, Off



;----- Общая часть кода (счётчик нажатий) ------

PressCount:
  Pause_=500     ; Если пауза меньше этого количества миллисекунд, то нажатие
                 ; двойное. Если больше, то оно расценивается как 2 одиночных.
  If not Second
  {
    Second=1
    SetTimer, DoublePress, -%Pause_%
  }
  Else
  {
    Second=0
    SetTimer, %A_ThisHotkey%(2), -1
  }
Return

DoublePress:
  If not Second
    Return
  Second=0
  SetTimer, %A_ThisHotkey%(1), -1
Return

Сама проблема в том,что команды не передаются в программу iCarDS.
Ссылка на эту тему:http://pccar.ru/showthread.php?t=14151&page=11
Если запускаю такой код ,все работает.

+^vk51::             ; Shift-Ctrl-Q
icar := ComObjCreate("RideRunner.SDK")
icar.Execute("SetVar;duino_key;duino_11111111||OnD uinoKeyPress"
Return

И еще если кого не затруднит добавить еще и удержание.  Форум смотрел,читал так ни чего и не получилось.
Помогите,пожалуйста. За ранее спасибо.

2

Re: AHK: Отправить определенный код кнопки

evgen_dev, ознакомьтесь с этой темой, отредактируйте свой пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Отправить определенный код кнопки

Читайте внимательнее об оформлении заголовка.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Отправить определенный код кнопки

Send, icar := ComObjCreate("RideRunner.SDK")

Send тут явно лишнее.

5

Re: AHK: Отправить определенный код кнопки

Я уже понял по Вашему вопросу. Да внимательно прочитал про эту команду.

6

Re: AHK: Отправить определенный код кнопки

Так что, без сенда заработало?

7

Re: AHK: Отправить определенный код кнопки

Нет, выдает ошибку на этой строке.

icar.Execute("SetVar;duino_key;duino_11111111||OnD uinoKeyPress")

 

А так , с одной комбинацией клавиш работает.

+^vk51::             ; Shift-Ctrl-Q
icar := ComObjCreate("RideRunner.SDK")
icar.Execute("SetVar;duino_key;duino_11111111||OnD uinoKeyPress"
Return

И ни каких ошибок.

8

Re: AHK: Отправить определенный код кнопки

Какую ошибку выдаёт?

9

Re: AHK: Отправить определенный код кнопки

Ошибку нашел. Заработало! Лишняя точка закралась, в конце этого кода.

icar.Execute("SetVar;duino_key;duino_11111111||OnD uinoKeyPress") .

И пробелы убрал.

icar.Execute("SetVar;duino_key;duino_11111111||OnDuinoKeyPress")

YMP,спасибо, за Ваши вопросы они указали верный путь. И еще, как дописать в этот код удержание этой же комбинации клавиш?
Помогите пожалуйста. С большим уважением!!!

10

Re: AHK: Отправить определенный код кнопки

В этот никак. Вообще, этот код довольно ограничен по возможностям. На форуме были примеры, где количество нажатий может быть любое. Да и на удержание примеры были. Советую поискать по форуму. Сам я удержание нигде не использую, так что показать нечего.

11

Re: AHK: Отправить определенный код кнопки

Смотрел другие темы, читал, пробывал. Не получилось, попробую еще  может  соображу.

12 (изменено: YMP, 2015-09-01 21:10:45)

Re: AHK: Отправить определенный код кнопки

Вот пример для вашего хоткея. Количество нажатий неограничено, так что, я думаю, можно и без удержания обойтись. К сожалению, не помню автора идеи. Склероз, что ли...


+^vk51::
    N:=0
    Loop {
        N++
        LastKey := SubStr(A_ThisHotkey, -3)
        KeyWait, %LastKey%
        KeyWait, %LastKey%, D T0.3
    } Until ErrorLevel
    Gosub % IsLabel(L := A_ThisHotkey . "_" . N) ? L : "NoCombo"
Return

NoCombo:
Return

+^vk51_1:
    MsgBox, 1 нажатие.
    Return
+^vk51_2:
    MsgBox, 2 нажатия.
    Return
+^vk51_3:
    MsgBox, 3 нажатия.
    Return
+^vk51_4:
    MsgBox, 4 нажатия.
    Return
; И так далее...

13

Re: AHK: Отправить определенный код кнопки

Что-то похожее здесь.
http://forum.script-coding.com/viewtopic.php?id=9941

Там-же есть код от Indomito.
1. Одиночное нажатие клавиши
2. Двойное нажатие клавиши
3. Удержание клавиши клавиши

;==============Подпрограмма - Три действия/клавиши в одной======================
;  сBaseKey              :=         ; Нажимаемая клавиша
;  cAloneKey             :=         ; 1-я Виртуальная клавиша
;  cDoubleKey            :=         ; 2-я Виртуальная клавиша
;  cHoldingKey           :=         ; 3-я Виртуальная клавиша
;--------------Оптимальное значение для игр и мышки на опыте игры "The Witcher 2 - Assassins of Kings"
;  сPause_PressKey       := 350    ; Если пауза меньше этого количества миллисекунд, то нажатие двойное. Если больше, то оно расценивается как 2 одиночных
;  cWaitHoldingBaseKey   := 2      ; Время ожидания в цикле определения удержания за каждый шаг, при больших значениях блокирует одиночное/двойное нажатие.
;  cCountHoldingBaseKey  := 25     ; Число шагов цикла для определения удержание клавиши/кнопки, при больших значениях блокирует одиночное/двойное нажатие.
;  cWaitVirtualKey       := 10     ; Время задержки между эмуляцией нажатия на клавиши/кнопки подмены реально нажатой клавишей/кнопкой.
;  fAutoRepeat           := false  ; Автоповтор реально нажатой клавиши/кнопки - включён/выключен True/False

;------------Начало работы      
#UseHook, On
sbTrioProcessingKeys:
; Требуется реализация блокировки от входа с разных клавиш, т.е. защита от множественного входа на време отработки этой подпрограммы.
  vCountHoldingBaseKey:=cCountHoldingBaseKey
  ;Проверка на удержание нажатия/клика клавиши/кнопки
  while ((GetKeyState(сBaseKey, "P")) && vCountHoldingBaseKey && (!сSecond_PressKey)) 
      {
        sleep %cWaitHoldingBaseKey%   
        vCountHoldingBaseKey--
      }
  if (!vCountHoldingBaseKey)
      { 
  ; Нормальное удержание не работает, нужно не посылать код отжатия, пока нажата реальная клавиша - в подпрограмме sbAutoRepeat треуется корректировка.
  ; Надо сделать режим удерживать или нет клавишу, а это ввод второго флага, может быть для всех трёх клавиш.        
        Send, {%cHoldingKey% Down}  ;Удержание нажатия/клика клавиши/кнопки
        Sleep %cWaitVirtualKey%    
        Send, {%cHoldingKey% Up}
        Gosub sbAutoRepeat
        return
      } 
     else 
        Gosub, sbPressCountKeys
return            ; Конец обработки подпрограммы sbStartProcessingKeys


;Одиночное нажатие/клик клавиши/кнопки
sbAloneKey:
  Send, {%cAloneKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cAloneKey% Up}
  Gosub sbAutoRepeat
Return

;Двойное нажатие/клик клавиши/кнопки
sbDoubleKey:
  Send, {%cDoubleKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cDoubleKey% Up}  
  Gosub sbAutoRepeat
Return

;Без/С автоповтором основной клавиши/кнопки
sbAutoRepeat:
  if (!fAutoRepeat)
      {
        Send, {%сBaseKey% Down}   ; Без автоповтора
        ;while (GetKeyState(сBaseKey, "P"))
        KeyWait, %сBaseKey%  ;Sleep %cWaitBaselKey% 
        Send, {%сBaseKey% Up}      
      }
Return                            ; C автоповтором

#UseHook, Off

sbPressCountKeys:
  If not сSecond_PressKey
      {
        сSecond_PressKey := 1
        SetTimer, sbDoublePressKey, -%сPause_PressKey%
      }
    Else
      {
        сSecond_PressKey := 0
        SetTimer, sbDoubleKey, -1
      }
Return

sbDoublePressKey:
  If not сSecond_PressKey
        Return
  сSecond_PressKey := 0
  SetTimer, sbAloneKey, -1
Return
;-----------------------------------------------------------------

Но с ним пока не получилось. За Ваш,  хоткей спасибо, но три нажатия много и не удобно. Так как это управление автомобильным компьютером.

http://pccar.ru/index.php?s=ccb8851f533 … 0d532f1f15

14

Re: AHK: Отправить определенный код кнопки

evgen_dev, слово "помогите" в названии темы не несёт информации. В конце заголовка точка не ставится. Я поправил название темы.

15 (изменено: evgen_dev, 2015-09-03 16:49:55)

Re: AHK: Отправить определенный код кнопки

Помогите, пожалуйста вставить в этот код комбинацию клавиш +^vk51.

+ открыть спойлер
;==============Подпрограмма - Три действия/клавиши в одной======================
;  сBaseKey              :=         ; Нажимаемая клавиша
;  cAloneKey             :=         ; 1-я Виртуальная клавиша
;  cDoubleKey            :=         ; 2-я Виртуальная клавиша
;  cHoldingKey           :=         ; 3-я Виртуальная клавиша
;--------------Оптимальное значение для игр и мышки на опыте игры "The Witcher 2 - Assassins of Kings"
;  сPause_PressKey       := 350    ; Если пауза меньше этого количества миллисекунд, то нажатие двойное. Если больше, то оно расценивается как 2 одиночных
;  cWaitHoldingBaseKey   := 2      ; Время ожидания в цикле определения удержания за каждый шаг, при больших значениях блокирует одиночное/двойное нажатие.
;  cCountHoldingBaseKey  := 25     ; Число шагов цикла для определения удержание клавиши/кнопки, при больших значениях блокирует одиночное/двойное нажатие.
;  cWaitVirtualKey       := 10     ; Время задержки между эмуляцией нажатия на клавиши/кнопки подмены реально нажатой клавишей/кнопкой.
;  fAutoRepeat           := false  ; Автоповтор реально нажатой клавиши/кнопки - включён/выключен True/False

;------------Начало работы      
#UseHook, On
sbTrioProcessingKeys:
; Требуется реализация блокировки от входа с разных клавиш, т.е. защита от множественного входа на време отработки этой подпрограммы.
  vCountHoldingBaseKey:=cCountHoldingBaseKey
  ;Проверка на удержание нажатия/клика клавиши/кнопки
  while ((GetKeyState(сBaseKey, "P")) && vCountHoldingBaseKey && (!сSecond_PressKey)) 
      {
        sleep %cWaitHoldingBaseKey%   
        vCountHoldingBaseKey--
      }
  if (!vCountHoldingBaseKey)
      { 
  ; Нормальное удержание не работает, нужно не посылать код отжатия, пока нажата реальная клавиша - в подпрограмме sbAutoRepeat треуется корректировка.
  ; Надо сделать режим удерживать или нет клавишу, а это ввод второго флага, может быть для всех трёх клавиш.        
        Send, {%cHoldingKey% Down}  ;Удержание нажатия/клика клавиши/кнопки
        Sleep %cWaitVirtualKey%    
        Send, {%cHoldingKey% Up}
        Gosub sbAutoRepeat
        return
      } 
     else 
        Gosub, sbPressCountKeys
return            ; Конец обработки подпрограммы sbStartProcessingKeys


;Одиночное нажатие/клик клавиши/кнопки
sbAloneKey:
  Send, {%cAloneKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cAloneKey% Up}
  Gosub sbAutoRepeat
Return

;Двойное нажатие/клик клавиши/кнопки
sbDoubleKey:
  Send, {%cDoubleKey% Down}
  Sleep %cWaitVirtualKey%    
  Send, {%cDoubleKey% Up}  
  Gosub sbAutoRepeat
Return

;Без/С автоповтором основной клавиши/кнопки
sbAutoRepeat:
  if (!fAutoRepeat)
      {
        Send, {%сBaseKey% Down}   ; Без автоповтора
        ;while (GetKeyState(сBaseKey, "P"))
        KeyWait, %сBaseKey%  ;Sleep %cWaitBaselKey% 
        Send, {%сBaseKey% Up}      
      }
Return                            ; C автоповтором

#UseHook, Off

sbPressCountKeys:
  If not сSecond_PressKey
      {
        сSecond_PressKey := 1
        SetTimer, sbDoublePressKey, -%сPause_PressKey%
      }
    Else
      {
        сSecond_PressKey := 0
        SetTimer, sbDoubleKey, -1
      }
Return

sbDoublePressKey:
  If not сSecond_PressKey
        Return
  сSecond_PressKey := 0
  SetTimer, sbAloneKey, -1
Return
;-----------------------------------------------------------------

Чтоб нажатие отправляла эту команду:

icar := ComObjCreate("RideRunner.SDK")
icar.Execute("SetVar;duino_key;duino_11111111||OnDuinoKeyPress")

Двойное нажатие:

icar := ComObjCreate("RideRunner.SDK")
icar.Execute("SetVar;duino_key;duino_11111112||OnDuinoKeyPress")

А удержание:

icar := ComObjCreate("RideRunner.SDK")
icar.Execute("SetVar;duino_key;duino_11111113||OnDuinoKeyPress")

16 (изменено: serzh82saratov, 2015-09-03 22:31:43)

Re: AHK: Отправить определенный код кнопки

Помогите, пожалуйста вставить в этот код

В этот не помогу.

#UseHook 

icar := ComObjCreate("RideRunner.SDK")

+^vk51:: ;  "Q"
    HK := RegExReplace(A_ThisHotkey, "S)[\Q+^!#<>~*$\E]"), i := 0
    KeyWait, %HK%, T0.7
    If !ErrorLevel 
        Loop  {
            KeyWait, %HK%
            KeyWait, %HK%, D T0.3
        } Until !(++i) || ErrorLevel 
    Try Gosub % A_ThisHotkey "_" i 
    Return

+^vk51_0:  
    icar.Execute("SetVar;duino_key;duino_11111113||OnDuinoKeyPress")
    Return
    
+^vk51_1:  
    icar.Execute("SetVar;duino_key;duino_11111111||OnDuinoKeyPress")
    Return
    
+^vk51_2:  
    icar.Execute("SetVar;duino_key;duino_11111112||OnDuinoKeyPress")
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Отправить определенный код кнопки

serzh82saratov, спасибо за Ваш труд. Не сработал, все команды идут как одна. Буду искать,а пока воспользуюсь кодом от YMP он работает без проблем.

+ открыть спойлер
+^vk51::
    N:=0
    Loop {
        N++
        LastKey := SubStr(A_ThisHotkey, -3)
        KeyWait, %LastKey%
        KeyWait, %LastKey%, D T0.3
    } Until ErrorLevel
    Gosub % IsLabel(L := A_ThisHotkey . "_" . N) ? L : "NoCombo"
Return

NoCombo:
Return

+^vk51_1:
    MsgBox, 1 нажатие.
    Return
+^vk51_2:
    MsgBox, 2 нажатия.
    Return
+^vk51_3:
    MsgBox, 3 нажатия.
    Return
+^vk51_4:
    MsgBox, 4 нажатия.
    Return
; И так далее...

Цитата:Теперь при нажатии F1 и F2, в икар передадутся нажатия кнопок в ардуино duino_11111111 и duino_11111112. То есть надо, не включая загрузку плагина, зайти в настройки iCarDuino и настроить на эти кнопки нужные команды.
http://pccar.ru/showthread.php?t=14151&page=10
А у меня передается только duino_11111111. Все равно большое человеческое спасибо!

18

Re: AHK: Отправить определенный код кнопки

Не сработал, все команды идут как одна.

Да ладно:

#UseHook 
  
+^vk51:: ;  "Q"
    HK := RegExReplace(A_ThisHotkey, "S)[\Q+^!#<>~*$\E]"), i := 0
    KeyWait, %HK%, T0.7
    If !ErrorLevel 
        Loop  {
            KeyWait, %HK%
            KeyWait, %HK%, D T0.3
        } Until !(++i) || ErrorLevel 
    Try Gosub % A_ThisHotkey "_" i 
    Return

+^vk51_0:  
    MsgBox удержали
    Return
    
+^vk51_1:  
    MsgBox нажали
    Return
    
+^vk51_2:  
    MsgBox нажали 2 раза
    Return

а пока воспользуюсь кодом от YMP он работает без проблем.

Так вам же удержание нужно, нет?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Отправить определенный код кнопки

Я извеняюсь. Все работает. Спасибо.

20 (изменено: evgen_dev, 2015-09-04 00:21:53)

Re: AHK: Отправить определенный код кнопки

Я сам сразу не понял, в чем ппроблема. Джойстик  или программа Xpadder вина.  С клавиатуры все работает.

21 (изменено: serzh82saratov, 2015-09-04 00:22:55)

Re: AHK: Отправить определенный код кнопки

ОФФ: А iCarDuino может принимать сигналы от ардуино, и отправлять в скрипт АНК? Ведь обычно из програмной среды с ардуино работают через сом порт.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22 (изменено: evgen_dev, 2015-09-04 13:01:15)

Re: AHK: Отправить определенный код кнопки

ОФФ: А iCarDuino может принимать сигналы от ардуино? Ведь обычно из програмной среды с ним работают через сом порт

Вроде да.

23

Re: AHK: Отправить определенный код кнопки

http://pccar.ru/showthread.php?t=16718 Здесь.

24

Re: AHK: Отправить определенный код кнопки

Уважаемый, serzh82saratov! Все превосходно работает. Sendкью, то есть СПАСИБО!!! Оба Работают.

25

Re: AHK: Отправить определенный код кнопки

Уважаемый, serzh82saratov. Подскажите как определить крестовину джойстика. Если кнопки joy1-joy10 работают а крестовина нет.  Пробывал  joy11 не работает.  GetKeyState что за команда. Форум помоги.

26

Re: AHK: Отправить определенный код кнопки

Уважаемый, serzh82saratov.

ОФФ: А iCarDuino может принимать сигналы от ардуино, и отправлять в скрипт АНК? Ведь обычно из програмной среды с ардуино работают через сом порт.

Разобрались, может или нет.

27 (изменено: serzh82saratov, 2015-09-06 01:01:31)

Re: AHK: Отправить определенный код кнопки

Подскажите как определить крестовину джойстика

С джойстиком сложнее, крестовина и аналоги определяются стандартными командами только в цикле:


JoyPOVState := {0:"Up", 18000:"Down", 27000:"Left", 9000:"Right"
    , 4500:"UpRight", 13500:"RightDown", 22500:"LeftDown", 31500:"UpLeft"}

Loop
{ 
    Sleep 20 
    State := GetKeyState("1JoyPOV"), i := 0
    If State = -1
        Continue 
    JoyPOVWait(State, "Up", 700) 
    If !ErrorLevel 
        Loop  {
            JoyPOVWait(State) 
            JoyPOVWait(State, "Down", 200) 
        } Until !(++i) || ErrorLevel   
    Try Gosub % "Joy" JoyPOVState[State] "_" i    
}

JoyUp_0:  
    MsgBox удержали
    Return 
    
JoyUp_1:  
    MsgBox нажали
    Return
    
JoyUp_2:  
    MsgBox нажали 2 раза
    Return
    
JoyUp_3:  
    MsgBox нажали 3 раза
    Return
     
JoyPOVWait(State, Mode = "Up", Time = 0) {
    Start := A_TickCount
    Loop
    {
        _State := GetKeyState("1JoyPOV")  
        If (Mode = "Up" ? _State != State : _State = State)
            Return ErrorLevel := 0
        If (Time && A_TickCount - Start >= Time)
            Return ErrorLevel := 1 
        Sleep 10
    }
}

Проверено на хвох 360. Для первого джойстика (1JoyPOV) крестовина вверх (JoyUp). Правильнее это на HID сделать, но у меня альтруизма на такое не хватит.

ОФФ:

Разобрались, может или нет.

Так вы же сами сказали что может, и я у вас в личке спрашивал каким кодом вы это делаете, и вы не ответили.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28

Re: AHK: Отправить определенный код кнопки

Вечер добрый.  Работает  при запуске скрипта, нажали

29

Re: AHK: Отправить определенный код кнопки

Доброго времени суток нужна помощь. Теперь нужно обратное. Т.Е. из iCarDS отправить команду (CF_NEXT) на программу AVerTV. Все что мог извлечь из iCarDS на кнопке переключения трека (((((
ahk_class TSkinForm
ahk_exe iCarDS.exe)))))))