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

         
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 или выше. Горячие клавиши для запуска скрипта во вкладке 'Ещё'.
|
|
|
|
for2 |
6.12.2020, 6:09
|
 
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) Если можете, помогине пожалуйста с кодом
|
|
|
|
Fors1k |
7.12.2020, 18:21
|

    
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 108
Пользователь №: 18.746

|
Цитата(for2 @ 6.12.2020, 6:09)  И ещё такая просьба, На сколько сложно реализовать сортировку окон по рабочим столам, т.к. после перезагрузки получается свалка на столе №1. Например, есть 6 рабочих столов. Код должен сканировать все рабочие столы и сортировать окна по конкретным столам. Вот правила перемещения окон на рабочие столы: (IMG: https://s8.hostingkartinok.com/uploads/images/2020/12/0690545a03a2c52df6f0df1ae2dfafb8.png) Если можете, помогине пожалуйста с кодом Снять галочку
Код --lua require"luaposh";log "clear";log "mode compact" PScode('return',{[[#} # $windows = @{#} "Калькулятор" = 2 "wordpad" = 3 "paint" = 4 }
$windows.GetEnumerator()|ForEach{#} Move-WindowToDesktop (Find-Window $_.Key) $_.Value } # ]]}) Move-WindowToDesktop третий параметр можно не указывать (по умолчанию 200). Если будет некорректно работать, то указывайте его с увеличением: 250;300;350;... , пока не найдете подходящий.
--------------------
Для связи
|
|
|
|
Сообщений в этой теме
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 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
|
|