Здравствуйте, гость ( Вход | Регистрация )

> Меню окна, подскажите плз!, Как работать с главным меню программы?
for2
сообщение 4.12.2020, 17:48
Сообщение #1


**

Neophyte
Сообщений: 25
Регистрация: 4.12.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.817
Возраст: 17



Ребята, подскажите, куда копать! Есть программа InqSoft Window Scanner - просматривает главное меню окна любой программы, видит ID пунктов меню и позволяет на них нажимать и т.д. Как при помощи UOPilot так же работать с главным меню программы через скрипты, просматривать структуру меню и работать с дочерними окнами??
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
cirus
сообщение 9.1.2021, 23:50
Сообщение #2


**********

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

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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
for2   Как-то так: [spoiler=код][code]--lua local WM_COM...   13.2.2021, 11:13
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

 

- Текстовая версия | Версия для КПК Сейчас: 7.7.2025, 23:39
Designed by Nickostyle