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

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


**

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



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


**********

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



Цитата
Есть программа -1
У нее нет горячей клавиши на сохранение конфига -2
При помощи InqSoft Window Scanner я могу видеть структуру меню программы и нажать -4, чтобы начать сохранение.
Как тоже самое сделать НЕ при помощи InqSoft Window Scanner, а скриптом и горячей клавиши??

код
Код
--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);
]]
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) -- отправить сообщение пункту меню
        else
            log('Не получен хенд подменю или id итема подменю')
        end
    else
        log('У окна нет меню')
    end
else
    log('Окно не найдено')
end

Пилот версии 2.41 или выше. Горячие клавиши для запуска скрипта во вкладке 'Ещё'.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 6.12.2020, 6:09
Сообщение #3


**

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



Цитата(cirus @ 5.12.2020, 17:23) *

код
Код
--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);
]]
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) -- отправить сообщение пункту меню
        else
            log('Не получен хенд подменю или id итема подменю')
        end
    else
        log('У окна нет меню')
    end
else
    log('Окно не найдено')
end

Пилот версии 2.41 или выше. Горячие клавиши для запуска скрипта во вкладке 'Ещё'.


(IMG:https://s8.hostingkartinok.com/uploads/images/2020/12/b2f96bdd5a82f21d51eccd64f9e7b6c6.png)

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

Пжл, допишите код??

И ещё такая просьба,
На сколько сложно реализовать сортировку окон по рабочим столам, т.к. после перезагрузки получается свалка на столе №1.
Например, есть 6 рабочих столов.
Код должен сканировать все рабочие столы и сортировать окна по конкретным столам.
Вот правила перемещения окон на рабочие столы:
(IMG:https://s8.hostingkartinok.com/uploads/images/2020/12/0690545a03a2c52df6f0df1ae2dfafb8.png)
Если можете, помогине пожалуйста с кодом
Пользователь в офлайне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
for2   Пилот версии 2.41 или выше. Горячие клавиши для з...   5.12.2020, 18:01
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
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:32
Designed by Nickostyle