|
Меню окна, подскажите плз!, Как работать с главным меню программы? |
|
|
|
  |
Ответов
cirus |
9.1.2021, 23:50
|

         
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26758
Пользователь №: 16.971
Возраст: 29

|
Цитата Можно ли в интерфейс вашего кода добавить "галочку"? - я ставлю галку и для принтера ставится галка "Приостановить печать" - убираю галку и галка с "Приостановить печать" - убирается Как-то так: код
Код --lua local WM_COMMAND = 0x0111 local ffi = require("ffi") ffi.cdef[[ unsigned int GetMenuItemID(int hMenu, int nPos); int PostMessageA(int hWnd, unsigned int Msg, unsigned int wParam, long lParam); ]]
package.path = "LuaWindow\\winapi\\?.lua;" .. package.path package.path = "LuaWindow\\events\\?.lua;" .. package.path package.path = "LuaWindow\\?.lua;" .. package.path setfenv(1, require'winapi') require'ansi_utf' require'winapi' require'winapi.windowclass' require'winapi.buttonclass' require'winapi.checkboxclass'
-- создание окна и контролов local win = Window{w = 290, h = 200, x = 200, y = 100, title = utf('Диалог'), topmost = true} local buttonSR = Button{parent = win, x = 10, y = 10, w = 60, h = 20, text = utf('SR')} local buttonSi = Button{parent = win, x = 10, y = 35, w = 60, h = 20, text = utf('Si')} local buttonGZ = Button{parent = win, x = 10, y = 60, w = 60, h = 20, text = utf('GZ')} local buttonYN = Button{parent = win, x = 10, y = 85, w = 60, h = 20, text = utf('YN')} local button1 = Button{parent = win, x = 80, y = 10, w = 30, h = 95, text = utf('1')} local button5 = Button{parent = win, x = 115, y = 10, w = 30, h = 95, text = utf('5')} local button30 = Button{parent = win, x = 150, y = 10, w = 30, h = 95, text = utf('30')} local buttonD = Button{parent = win, x = 185, y = 10, w = 30, h = 95, text = utf('D')} local buttonW = Button{parent = win, x = 220, y = 10, w = 30, h = 95, text = utf('W')}
local check1 = CheckBox{parent = win, x = 10, y = 120, w = 80, h = 20, text = 'Check1', checked = false}
local window_name = ''
-- флаги local flag_close = 0 local flag_buttonSR, flag_buttonSi, flag_buttonGZ, flag_buttonYN = 0, 0, 0, 0 local flag_button1, flag_button5, flag_button30, flag_buttonD, flag_buttonW = 0, 0, 0, 0, 0
function activate_window(window_name) if #window_name < 3 then return end local h = findwindow(window_name) if h then showwindow(h[1][1], 'TOP') -- или RESTORE else hint('Окно с именем: ' .. window_name .. ' Не найдено') end window_name = '' end
-- функции сообщений function buttonSR:on_click() flag_buttonSR = 1 end function buttonSi:on_click() flag_buttonSi = 1 end function buttonGZ:on_click() flag_buttonGZ = 1 end function buttonYN:on_click() flag_buttonYN = 1 end function button1:on_click() flag_button1 = 1 end function button5:on_click() flag_button5 = 1 end function button30:on_click() flag_button30 = 1 end function buttonD:on_click() flag_buttonD = 1 end function buttonW:on_click() flag_buttonW = 1 end function win:on_close() flag_close = bit.bxor(flag_close, 1) end
function check1:on_click() -- если был клик по галке local menuiteminfo = ffi.new('MENUITEMINFOW', {ffi.sizeof('MENUITEMINFOW'), MIIM_STATE }) local handle = findwindow('Canon iP2700') -- имя окна очереди печати if handle then local h_menu = ffi.C.GetMenu(ffi.cast('HWND', handle[1][1])) if h_menu then local h_submenu = ffi.C.GetSubMenu(h_menu, 0) -- 0 - Принтер local id_item = ffi.C.GetMenuItemID(ffi.cast('int', h_submenu), 6) -- 6 - Приостановить печать if check1.checked then menuiteminfo.fState = MFS_CHECKED else menuiteminfo.fState = MFS_UNCHECKED end ffi.C.SetMenuItemInfoW(h_submenu, id_item, false, menuiteminfo) -- установить галку на пункт меню -- ffi.C.PostMessageA(handle[1][1], WM_COMMAND, id_item, 0) -- может надо, может нет end else log ('Окно очереди печати не найдено') end end
win:show()
while flag_close == 0 do while ProcessNextMessage() do wait (1) end
if flag_buttonSR == 1 then flag_buttonSR = 0 window_name='SR' end if flag_buttonSi == 1 then flag_buttonSi = 0 window_name='Si' end if flag_buttonGZ == 1 then flag_buttonGZ = 0 window_name='GZ' end if flag_buttonYN == 1 then flag_buttonYN = 0 window_name='YN' end
if flag_button1 == 1 then flag_button1 = 0 activate_window(window_name .. '1') window_name='' end if flag_button5 == 1 then flag_button5 = 0 activate_window(window_name .. '5') window_name='' end if flag_button30 == 1 then flag_button30 = 0 activate_window(window_name .. '30') window_name='' end if flag_buttonD == 1 then flag_buttonD = 0 activate_window(window_name .. 'D') window_name='' end if flag_buttonW == 1 then flag_buttonW = 0 activate_window(window_name .. 'W') window_name='' end
wait(10) end
|
|
|
|
for2 |
13.2.2021, 11:13
|
 
Neophyte
Сообщений: 25
Регистрация: 4.12.2020 Группа: Пользователи Наличность: 0
Пользователь №: 19.817
Возраст: 17

|
Цитата(cirus @ 9.1.2021, 23:50)  Как-то так: код
Код --lua local WM_COMMAND = 0x0111 local ffi = require("ffi") ffi.cdef[[ unsigned int GetMenuItemID(int hMenu, int nPos); int PostMessageA(int hWnd, unsigned int Msg, unsigned int wParam, long lParam); ]]
package.path = "LuaWindow\\winapi\\?.lua;" .. package.path package.path = "LuaWindow\\events\\?.lua;" .. package.path package.path = "LuaWindow\\?.lua;" .. package.path setfenv(1, require'winapi') require'ansi_utf' require'winapi' require'winapi.windowclass' require'winapi.buttonclass' require'winapi.checkboxclass' -- создание окна и контролов local win = Window{w = 290, h = 200, x = 200, y = 100, title = utf('Диалог'), topmost = true} local buttonSR = Button{parent = win, x = 10, y = 10, w = 60, h = 20, text = utf('SR')} local buttonSi = Button{parent = win, x = 10, y = 35, w = 60, h = 20, text = utf('Si')} local buttonGZ = Button{parent = win, x = 10, y = 60, w = 60, h = 20, text = utf('GZ')} local buttonYN = Button{parent = win, x = 10, y = 85, w = 60, h = 20, text = utf('YN')} local button1 = Button{parent = win, x = 80, y = 10, w = 30, h = 95, text = utf('1')} local button5 = Button{parent = win, x = 115, y = 10, w = 30, h = 95, text = utf('5')} local button30 = Button{parent = win, x = 150, y = 10, w = 30, h = 95, text = utf('30')} local buttonD = Button{parent = win, x = 185, y = 10, w = 30, h = 95, text = utf('D')} local buttonW = Button{parent = win, x = 220, y = 10, w = 30, h = 95, text = utf('W')}
local check1 = CheckBox{parent = win, x = 10, y = 120, w = 80, h = 20, text = 'Check1', checked = false}
local window_name = ''
-- флаги local flag_close = 0 local flag_buttonSR, flag_buttonSi, flag_buttonGZ, flag_buttonYN = 0, 0, 0, 0 local flag_button1, flag_button5, flag_button30, flag_buttonD, flag_buttonW = 0, 0, 0, 0, 0
function activate_window(window_name) if #window_name < 3 then return end local h = findwindow(window_name) if h then showwindow(h[1][1], 'TOP') -- или RESTORE else hint('Окно с именем: ' .. window_name .. ' Не найдено') end window_name = '' end
-- функции сообщений function buttonSR:on_click() flag_buttonSR = 1 end function buttonSi:on_click() flag_buttonSi = 1 end function buttonGZ:on_click() flag_buttonGZ = 1 end function buttonYN:on_click() flag_buttonYN = 1 end function button1:on_click() flag_button1 = 1 end function button5:on_click() flag_button5 = 1 end function button30:on_click() flag_button30 = 1 end function buttonD:on_click() flag_buttonD = 1 end function buttonW:on_click() flag_buttonW = 1 end function win:on_close() flag_close = bit.bxor(flag_close, 1) end function check1:on_click() -- если был клик по галке local menuiteminfo = ffi.new('MENUITEMINFOW', {ffi.sizeof('MENUITEMINFOW'), MIIM_STATE }) local handle = findwindow('Canon iP2700') -- имя окна очереди печати if handle then local h_menu = ffi.C.GetMenu(ffi.cast('HWND', handle[1][1])) if h_menu then local h_submenu = ffi.C.GetSubMenu(h_menu, 0) -- 0 - Принтер local id_item = ffi.C.GetMenuItemID(ffi.cast('int', h_submenu), 6) -- 6 - Приостановить печать if check1.checked then menuiteminfo.fState = MFS_CHECKED else menuiteminfo.fState = MFS_UNCHECKED end ffi.C.SetMenuItemInfoW(h_submenu, id_item, false, menuiteminfo) -- установить галку на пункт меню -- ffi.C.PostMessageA(handle[1][1], WM_COMMAND, id_item, 0) -- может надо, может нет end else log ('Окно очереди печати не найдено') end end win:show() while flag_close == 0 do while ProcessNextMessage() do wait (1) end
if flag_buttonSR == 1 then flag_buttonSR = 0 window_name='SR' end if flag_buttonSi == 1 then flag_buttonSi = 0 window_name='Si' end if flag_buttonGZ == 1 then flag_buttonGZ = 0 window_name='GZ' end if flag_buttonYN == 1 then flag_buttonYN = 0 window_name='YN' end
if flag_button1 == 1 then flag_button1 = 0 activate_window(window_name .. '1') window_name='' end if flag_button5 == 1 then flag_button5 = 0 activate_window(window_name .. '5') window_name='' end if flag_button30 == 1 then flag_button30 = 0 activate_window(window_name .. '30') window_name='' end if flag_buttonD == 1 then flag_buttonD = 0 activate_window(window_name .. 'D') window_name='' end if flag_buttonW == 1 then flag_buttonW = 0 activate_window(window_name .. 'W') window_name='' end
wait(10) end Добавьте, пожалуйста в код что-то (IMG: style_emoticons/default/rolleyes.gif) чтобы - при клике в чекбокс Окно очереди печати сначала делалось активным, а потом в него отправлялось сообщение снять/установить галку приостановки печати Т.к. когда Окно очереди печати не активно, то клик в чекбокс почему-то работает не всегда, делаю Окно очереди печати активным - тогда всё четко! (IMG: style_emoticons/default/smile.gif)
|
|
|
|
Сообщений в этой теме
for2 Меню окна, подскажите плз! 4.12.2020, 17:48 cirus --lua
local GA_ROOTOWNER = 3
local MF_BYPOSITION =... 5.12.2020, 3:04 FREEON Скорее всего имелось ввиду нажатие кнопок по их им... 5.12.2020, 9:06 cirus
Любые манипуляции с окнами выполняются через send... 5.12.2020, 9:39 for2
Любые манипуляции с окнами выполняются через send... 5.12.2020, 10:08 cirus
--lua
local WM_COMMAND = 0x0111
local ffi = requi... 5.12.2020, 17:23 for2
Пилот версии 2.41 или выше. Горячие клавиши для з... 5.12.2020, 18:01 for2
[spoiler=код][code]--lua
local WM_COMMAND = 0x011... 6.12.2020, 6:09  Fors1k И ещё такая просьба,
На сколько сложно реализоват... 7.12.2020, 18:21 cirus Без понятия, у меня нет этой проги, используйте ст... 5.12.2020, 18:17 for2
Без понятия, у меня нет этой проги, используйте с... 5.12.2020, 19:08 cirus
--lua
wait(3000) -- пауза 3 секунды ... 5.12.2020, 19:24 for2
--lua
wait(3000) -- пауза 3 секунды ... 5.12.2020, 19:34 for2
--lua
wait(3000) -- пауза 3 секунды ... 6.12.2020, 16:19 cirus
Этот код не может такого писать. 5.12.2020, 19:38 for2
Этот код не может такого писать.
https://s8.host... 5.12.2020, 19:46 cirus А первую строку копировать кто будет?
--lua 5.12.2020, 19:50 for2
А первую строку копировать кто будет?
--lua
мля.... 5.12.2020, 19:56 cirus
Смотрите примеры тут: https://uopilot.uokit.com/w... 5.12.2020, 20:05 for2
Если что-то непонятно, то поможем.
Благодарю, эт... 5.12.2020, 20:07 cirus
--lua
local WM_COMMAND = 0x0111
local ffi = requi... 6.12.2020, 13:57 for2
Не знаю какая функция winapi выполняет перемещен... 6.12.2020, 15:00 cirus
--lua
alarm()
Это работает только в стар... 6.12.2020, 16:44 for2
Не путайте старый синтаксис пилота и луа. Список ... 6.12.2020, 17:30 cirus
Пожалуй, да. 6.12.2020, 17:56 for2
Пожалуй, да.
Хорошо, можно ли организовать ввод ... 6.12.2020, 19:46  Fors1k
- после нажатия горячей клавиши скрипт ждет ввода... 8.12.2020, 20:02   for2
- Вводить имя окна с учетом регистра, например: [... 9.12.2020, 16:51 cirus А не проще вызывать нужное окно при нажатии комбин... 6.12.2020, 20:22 for2
А не проще вызывать нужное окно при нажатии комби... 8.12.2020, 16:51 for2
А не проще вызывать нужное окно при нажатии комби... 8.12.2020, 17:28 cirus
Скачать архив LuaWindow.zip из этой темы: https:/... 9.12.2020, 2:26 for2
Скачать архив LuaWindow.zip из этой темы: [url=ht... 9.1.2021, 18:36 for2
Как-то так:
Офигительно! Буду тестить, спаси... 10.1.2021, 19:19 for2 Да, строка "может надо, может нет" оказа... 10.1.2021, 19:35 cirus local handle = findwindow('Canon iP2700... 13.2.2021, 11:24 for2
local handle = findwindow('Canon iP2700... 13.2.2021, 11:47 cirus Вот так:
showwindow(handle[1][1... 13.2.2021, 11:56 for2
Вот так:
showwindow(handle[1][1... 13.2.2021, 12:03 for2
Вот так:
showwindow(handle[1][1... 19.2.2021, 16:46 cirus
Есть, но времени на это нет. 20.2.2021, 2:43 for2
Есть, но времени на это нет.
Можно вас попросить... 25.2.2021, 19:08 cirus
https://forum.uokit.com/index.php?s=&sh...st... 27.2.2021, 1:35 for2
https://forum.uokit.com/index.php?s=&sh...st... 28.2.2021, 7:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|