Пульт для программы Mach3 https://www.machsupport.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

311 lines
15KB

  1. -- СТАНДАРТНЫЕ БИБЛИОТЕКИ --
  2. -- https://github.com/unifiedremote/Docs/tree/master/libs
  3. local win = require("win"); -- https://github.com/unifiedremote/Docs/blob/master/libs/win.md
  4. local keyboard = require("keyboard"); -- https://github.com/unifiedremote/Docs/blob/master/libs/keyboard.md
  5. local timer = libs.timer; -- https://github.com/unifiedremote/Docs/blob/master/libs/timer.md
  6. local os = require("os"); -- https://github.com/unifiedremote/Docs/blob/master/libs/os.md
  7. -- ПОЛЕЗНЫЕ ПЕРЕМЕННЫЕ --
  8. local sProcessName = "Mach3.exe"; -- имя исполняемого файла
  9. local sMDICommandText = ""; -- буфер для хранения текста MDI команды
  10. local nMainWindowHandler = 0; -- ID главного окна программы
  11. local nMainWindowScanInterval = 1000; -- интервал в миллисекундах между проверками на существование главного окна программы
  12. -- ПОЛЕЗНЫЕ ФУНКЦИИ --
  13. -- функция выводит главное окно программы на передний план
  14. function fFocusMainWindow()
  15. win.switchtowait(sProcessName);
  16. end
  17. -- функция отображает указанный текст в инфо блоке пульта
  18. function fShowInfo ( sInfo )
  19. -- проверяем существует ли в пульте элемент infoLabel и меняем его текст
  20. if layout.infoLabel ~= nil then
  21. layout.infoLabel.text = sInfo;
  22. end
  23. end
  24. -- ДЕЙСТВИЯ --
  25. -- функция вызывается при нажатии на кнопку "X" (e-stop)
  26. actions.estop = function()
  27. fFocusMainWindow(); -- выводим главное окно программы на передний план
  28. keyboard.stroke("oem_3"); -- эмулируем нажатие кнопки "`" ("~")
  29. end
  30. -- функция вызывается при нажатии на кнопку ">" (play)
  31. actions.play = function()
  32. fFocusMainWindow(); -- выводим главное окно программы на передний план
  33. keyboard.stroke("leftalt","R"); -- нажимаем комбинацию кнопок ALT + R
  34. end
  35. -- функция вызывается при нажатии на кнопку "||" (pause)
  36. actions.pause = function()
  37. fFocusMainWindow(); -- выводим главное окно программы на передний план
  38. keyboard.stroke("space"); -- эмулируем нажатие кнопки "пробел"
  39. end
  40. -- функция вызывается при нажатии на кнопку "[]" (stop)
  41. actions.stop = function()
  42. fFocusMainWindow(); -- выводим главное окно программы на передний план
  43. keyboard.stroke("leftalt","S"); -- нажимаем комбинацию кнопок ALT + S
  44. end
  45. -- функция вызывается при нажатии на кнопку HOME
  46. actions.refAllHome = function()
  47. fFocusMainWindow(); -- выводим главное окно программы на передний план
  48. keyboard.stroke("leftctrl","O"); -- нажимаем комбинацию кнопок ALT + O
  49. end
  50. -- функция вызывается при нажатии на кнопку SPINDLE
  51. actions.toggleSpindle = function()
  52. fFocusMainWindow(); -- выводим главное окно программы на передний план
  53. keyboard.stroke("F5"); -- эмулируем нажатие кнопки "F5"
  54. end
  55. -- функция вызывается при нажатии на кнопку JOG
  56. actions.toggleJOG = function()
  57. fFocusMainWindow(); -- выводим главное окно программы на передний план
  58. keyboard.stroke("leftctrl","leftalt","J"); -- нажимаем комбинацию кнопок CTRL + ALT + J
  59. end
  60. -- функция вызывается при нажатии на кнопку "X=0"
  61. actions.xZero = function()
  62. fFocusMainWindow(); -- выводим главное окно программы на передний план
  63. keyboard.stroke("leftctrl","X"); -- нажимаем комбинацию кнопок CTRL + X
  64. os.sleep(200); -- делаем паузу (0.2 сек), чтобы ввод полностью включился
  65. keyboard.stroke("digit0"); -- нажимаем на кнопку 0
  66. keyboard.stroke("enter"); -- жмем ENTER
  67. end
  68. -- функция вызывается при нажатии на кнопку "Y=0"
  69. actions.yZero = function()
  70. fFocusMainWindow(); -- выводим главное окно программы на передний план
  71. keyboard.stroke("leftctrl","Y"); -- нажимаем комбинацию кнопок CTRL + Y
  72. os.sleep(200); -- делаем паузу (0.2 сек), чтобы ввод полностью включился
  73. keyboard.stroke("digit0"); -- нажимаем на кнопку 0
  74. keyboard.stroke("enter"); -- жмем ENTER
  75. end
  76. -- функция вызывается при нажатии на кнопку "Z=0"
  77. actions.zZero = function()
  78. fFocusMainWindow(); -- выводим главное окно программы на передний план
  79. keyboard.stroke("leftctrl","Z"); -- нажимаем комбинацию кнопок CTRL + Z
  80. os.sleep(200); -- делаем паузу (0.2 сек), чтобы ввод полностью включился
  81. keyboard.stroke("digit0"); -- нажимаем на кнопку 0
  82. keyboard.stroke("enter"); -- жмем ENTER
  83. end
  84. -- функция вызывается при нажатии на кнопку "Z=0"
  85. actions.aZero = function()
  86. fFocusMainWindow(); -- выводим главное окно программы на передний план
  87. keyboard.stroke("leftctrl","A"); -- нажимаем комбинацию кнопок CTRL + Z
  88. os.sleep(200); -- делаем паузу (0.2 сек), чтобы ввод полностью включился
  89. keyboard.stroke("digit0"); -- нажимаем на кнопку 0
  90. keyboard.stroke("enter"); -- жмем ENTER
  91. end
  92. -- функция вызывается при нажатии на кнопку "--X"
  93. actions.xMinusStart = function()
  94. fFocusMainWindow(); -- выводим главное окно программы на передний план
  95. keyboard.down("left"); -- нажимаем на кнопку < (стрелка влево)
  96. end
  97. -- функция вызывается при отжатии кнопки "--X"
  98. actions.xMinusEnd = function()
  99. fFocusMainWindow(); -- выводим главное окно программы на передний план
  100. keyboard.up("left"); -- нажимаем на кнопку < (стрелка влево)
  101. end
  102. -- функция вызывается при нажатии на кнопку "X++"
  103. actions.xPlusStart = function()
  104. fFocusMainWindow(); -- выводим главное окно программы на передний план
  105. keyboard.down("right"); -- нажимаем на кнопку > (стрелка вправо)
  106. end
  107. -- функция вызывается при отжатии кнопки "X++"
  108. actions.xPlusEnd = function()
  109. fFocusMainWindow(); -- выводим главное окно программы на передний план
  110. keyboard.up("right"); -- нажимаем на кнопку > (стрелка вправо)
  111. end
  112. -- функция вызывается при нажатии на кнопку "--Y"
  113. actions.yMinusStart = function()
  114. fFocusMainWindow(); -- выводим главное окно программы на передний план
  115. keyboard.down("down"); -- нажимаем на кнопку (стрелка вниз)
  116. end
  117. -- функция вызывается при отжатии кнопки "--Y"
  118. actions.yMinusEnd = function()
  119. fFocusMainWindow(); -- выводим главное окно программы на передний план
  120. keyboard.up("down"); -- нажимаем на кнопку (стрелка вниз)
  121. end
  122. -- функция вызывается при нажатии на кнопку "Y++"
  123. actions.yPlusStart = function()
  124. fFocusMainWindow(); -- выводим главное окно программы на передний план
  125. keyboard.down("up"); -- нажимаем на кнопку ^ (стрелка вверх)
  126. end
  127. -- функция вызывается при отжатии кнопки "Y++"
  128. actions.yPlusEnd = function()
  129. fFocusMainWindow(); -- выводим главное окно программы на передний план
  130. keyboard.up("up"); -- нажимаем на кнопку ^ (стрелка вверх)
  131. end
  132. -- функция вызывается при нажатии на кнопку "--Z"
  133. actions.zMinusStart = function()
  134. fFocusMainWindow(); -- выводим главное окно программы на передний план
  135. keyboard.down("pagedown"); -- нажимаем на кнопку PG DN
  136. end
  137. -- функция вызывается при отжатии кнопки "--Z"
  138. actions.zMinusEnd = function()
  139. fFocusMainWindow(); -- выводим главное окно программы на передний план
  140. keyboard.up("pagedown"); -- нажимаем на кнопку PG DN
  141. end
  142. -- функция вызывается при нажатии на кнопку "Z++"
  143. actions.zPlusStart = function()
  144. fFocusMainWindow(); -- выводим главное окно программы на передний план
  145. keyboard.down("pageup"); -- нажимаем на кнопку PG UP
  146. end
  147. -- функция вызывается при отжатии кнопки "Z++"
  148. actions.zPlusEnd = function()
  149. fFocusMainWindow(); -- выводим главное окно программы на передний план
  150. keyboard.up("pageup"); -- нажимаем на кнопку PG UP
  151. end
  152. -- функция вызывается при нажатии на кнопку "--A"
  153. actions.aMinusStart = function()
  154. fFocusMainWindow(); -- выводим главное окно программы на передний план
  155. keyboard.down("num4"); -- нажимаем на кнопку Num4
  156. end
  157. -- функция вызывается при отжатии кнопки "--A"
  158. actions.aMinusEnd = function()
  159. fFocusMainWindow(); -- выводим главное окно программы на передний план
  160. keyboard.up("num4"); -- нажимаем на кнопку Num4
  161. end
  162. -- функция вызывается при нажатии на кнопку "A++"
  163. actions.aPlusStart = function()
  164. fFocusMainWindow(); -- выводим главное окно программы на передний план
  165. keyboard.down("num6"); -- нажимаем на кнопку Num6
  166. end
  167. -- функция вызывается при отжатии кнопки "A++"
  168. actions.aPlusEnd = function()
  169. fFocusMainWindow(); -- выводим главное окно программы на передний план
  170. keyboard.up("num6"); -- нажимаем на кнопку Num6
  171. end
  172. -- функция вызывается при любом изменении текста элемента пульта для ввода MDI команд
  173. actions.MDItextChanged = function ( sText )
  174. -- в переменной sMDICommandText всегда будет хранится текущая версия текста
  175. -- элемента пульта для ввода MDI команд
  176. sMDICommandText = sText;
  177. end
  178. -- функция вызывается при нажатии кнопки SEND рядом с полем ввода MDI команд
  179. -- и выполняет указанную в MDI поле команду
  180. actions.MDIrun = function()
  181. -- если главное окно программы НЕ найдено или длина строки команды слишком мала
  182. if nMainWindowHandler < 1 or string.len(sMDICommandText) < 1 then
  183. -- просто завершим функцию
  184. return;
  185. end
  186. -- выводим главное окно программы на передний план
  187. fFocusMainWindow();
  188. -- переключаемся на вторую вкладку главного окна
  189. keyboard.stroke("leftalt","2"); -- нажимаем комбинацию кнопок ALT + 2
  190. -- делаем небольшую паузу (0.2 сек), чтобы вкладка полностью переключилась
  191. os.sleep(200);
  192. -- включаем ввод для MDI поля
  193. keyboard.stroke("leftctrl","M"); -- нажимаем комбинацию кнопок CTRL + M
  194. -- делаем небольшую паузу (0.2 сек), чтобы ввод полностью включился
  195. os.sleep(200);
  196. -- вводим текст команды
  197. keyboard.text(sMDICommandText);
  198. -- жмем ENTER 2 раза. Второй раз, чтобы выключить ввод текста
  199. keyboard.stroke("enter");
  200. keyboard.stroke("enter");
  201. -- делаем небольшую паузу (0.2 сек), чтобы ввод полностью выключился
  202. os.sleep(200);
  203. -- переключаемся на первую вкладку главного окна
  204. keyboard.stroke("leftalt","1"); -- нажимаем комбинацию кнопок ALT + 1
  205. -- выводим инфо о последней команде
  206. fShowInfo("Last command: "..sMDICommandText);
  207. -- очищаем форму для ввода MDI команд в пульте
  208. layout.MDIinput.text = "";
  209. -- очищаем буфер c текстом команды
  210. sMDICommandText = "";
  211. end
  212. -- ИНИЦИАЛИЗАЦИЯ --
  213. -- этот блок кода выполняется сразу же при обработке текущего файла сервером
  214. do
  215. -- получим и сохраним ID главного окна программы в переменную
  216. nMainWindowHandler = win.window(sProcessName);
  217. -- запустим повтор указанной функции каждые nMainWindowScanInterval микросекунд
  218. timer.interval(
  219. function()
  220. -- получим и сохраним ID главного окна программы в локальную переменную
  221. local nHandler = win.window(sProcessName);
  222. -- если главное окно программы найдено
  223. if nHandler > 0 and nMainWindowHandler ~= nHandler then
  224. -- сохраним ID главного окна программы в глобальную переменную
  225. nMainWindowHandler = nHandler;
  226. -- выведем оповещение в инфо блоке о том, что главное окно программы найдено
  227. fShowInfo("Remote works fine");
  228. -- если главное окно программы НЕ найдено
  229. elseif nHandler < 1 then
  230. -- выведем оповещение в инфо блоке о том, что главное окно программы НЕ найдено
  231. fShowInfo("Program "..sProcessName.." isn't running");
  232. end
  233. end,
  234. nMainWindowScanInterval
  235. );
  236. end