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

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


**

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



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


**********

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



Цитата
В конце кода, требуется ещё
- нажать "Сохранить",
- затем подтвердить перезапись существующего файла
-вывести какое-нибудь сообщение в углу на пару секунд об удачном сохранении

код
Код
--lua
local WM_COMMAND = 0x0111
local ffi = require("ffi")
ffi.cdef[[
    int GetMenu(int hwnd);
    int GetSubMenu(int hMenu, int nPos);
    unsigned int GetMenuItemID(int hMenu, int nPos);
    int PostMessageA(int hWnd, unsigned int Msg, unsigned int wParam, long lParam);
    int FindWindowExA(int hWndParent, int hWndChildAfter, const char* lpszClass, const char* lpszWindow);
]]
log 'clear' log 'mode compact'

local handle = findwindow ("QUIK")  -- имя окна (можно указать часть имени)
if handle then   -- если окно найдено
    local h_menu = ffi.C.GetMenu(handle[1][1])   -- получить хендл меню окна
    if h_menu > 0 then     -- если меню есть
        local h_submenu = ffi.C.GetSubMenu(h_menu, 0)  -- получить хендл подменю, первого по порядку (для QUIK это 'Система')
        local id_item = ffi.C.GetMenuItemID(h_submenu, 5)  -- получить id итема подменю, шестого по порядку (для QUIK это 'Сохранить настройки в файл')
        if h_submenu and id_item then    -- если существуют
            ffi.C.PostMessageA(handle[1][1], WM_COMMAND, id_item, 0) -- отправить сообщение пункту меню

            -- поиск окна сохранения настроек
            local timeout = os.clock() + 3   -- 3 секунды ожидание появления окна
            local save_settings
            repeat
                save_settings = findwindow ("Выберите файл для сохранения текущих настроек")
                wait (10)
            until save_settings  or os.clock() > timeout
            if os.clock() >= timeout then  -- окно с настройками не открылось
                log('Окно сохранения настроек не найдено')
                end_script()
            end

            -- поиск кнопки сохранения настроек
            local save_button = ffi.C.FindWindowExA(save_settings[1][1], 0, 'Button', 'Со&хранить')
            if save_button ~= 0 then
                workwindow(save_button)
                left (10, 10)    -- клик на кнопку
            else
                log('Кнопка Сохранить не найдена')
                end_script()
            end

            -- поиск окна для подтверждения сохранения настроек
            local confirm_save
            timeout = os.clock() + 3
            repeat
                confirm_save = findwindow ("Подтвердить сохранение в виде")
                wait (10)
            until confirm_save or os.clock() > timeout
            if os.clock() >= timeout then
                log('Окно подтверждения настроек не найдено')
                end_script()
            end

            -- поиск кнопки Да
            local temp =  getwindow (confirm_save[1][1], 'CHILD')
            local temp2 = ffi.C.FindWindowExA(temp, 0, 'CtrlNotifySink', nil)
            local yes_button=ffi.C.FindWindowExA(temp2, 0, 'Button', '&Да')
            if yes_button == 0 then
                while temp2 ~= 0 do
                    temp2 = ffi.C.FindWindowExA(temp, temp2, 'CtrlNotifySink', nil)
                    yes_button=ffi.C.FindWindowExA(temp2, 0, 'Button', '&Да')
                    if yes_button ~=0 then break end
                end
            end
            if yes_button ~= 0 then
                workwindow(yes_button)
                left (10, 10)    -- клик на кнопку
            else
                log('Кнопка Да не найдена')
                end_script()
            end

            hint ('Готово')
        else
            log('Не получен хенд подменю или id итема подменю')
        end
    else
        log('У окна нет меню')
    end
else
    log('Окно не найдено')
end

Цитата
На сколько сложно реализовать сортировку окон по рабочим столам

Не знаю какая функция winapi выполняет перемещение окна на другой рабочий стол.
Пользователь в офлайне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
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
cirus   Как-то так: --lua local WM_COMMAND = 0x0111 local...   9.1.2021, 23:50
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:38
Designed by Nickostyle