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

3 страниц V < 1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Меню окна, подскажите плз!, Как работать с главным меню программы?
for2
сообщение 6.12.2020, 16:19
Сообщение #21


**

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



Цитата(cirus @ 5.12.2020, 19:24) *

Код
--lua
wait(3000)  -- пауза 3 секунды (можно убрать)
local name_active_window = getwindowtext(getwindow(0))  -- получить имя активного окна
clipboard (name_active_window)  -- скопировать в буфер обмена
hint (name_active_window)   -- подсказка в левом нижнем углу (можно убрать)


Для добавления звукового сигнала добавил в конец кода, без параметров
Alarm
- выдает ошибку

hint (name_active_window)
- Попытался увеличить шрифт, всяко разно дописывал цифры и со скобками и без согласно в описанию
- выдает ошибку
Вообще не въезжаю в синтаксис??
Подскажите как правильно, пжл
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.12.2020, 16:44
Сообщение #22


**********

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



Цитата
Alarm
- выдает ошибку

Код
--lua
alarm()

Цитата
Попытался увеличить шрифт

Это работает только в старом синтаксисе. В луа нет.
Можно использовать такой вариант:
Код
--lua
-- тут какой-то код луа

--endlua

// тут используется старый синтаксис пилота
hint (24 clRed 500 500 -1 -1 (Готово))


--lua
-- дальше снова код на языке луа
-- какой-то код луа

Но, я бы не стал так делать, скорее всего никто не тестил насколько корректно будет работать такой скрипт.
Цитата
Вообще не въезжаю в синтаксис??

Не путайте старый синтаксис пилота и луа. Список функций, которые работают в луа без проблем: https://uopilot.uokit.com/wiki/index.php?ti...к_функций_(Lua)
Смотрите примеры именно тут.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 6.12.2020, 17:30
Сообщение #23


**

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



Цитата(cirus @ 6.12.2020, 16:44) *

Не путайте старый синтаксис пилота и луа. Список функций, которые работают в луа без проблем: https://uopilot.uokit.com/wiki/index.php?ti...к_функций_(Lua)
Смотрите примеры именно тут.

Хорошо, спасибо.
Ещё вопрос
(IMG:https://s8.hostingkartinok.com/uploads/images/2020/12/27abce1e63782a5a67ebb3249b5f4558.png)
Речь идет о всё той же программе Quik. Я могу рисовать в ней простые геометрические объекты и удалять их.
Вопрос, видите ли вы возможность через код работать с графическими объектами? Т.е. в коде, который вы мне писали происходит поиск поиск кнопок, отправка сообщений. Может ли это работать с простыми графическими объектами? (вообще эта прога Quik поддерживает работу со скриптами Lua) или постановка задачи слишком туманна, чтобы внятно ответить? )
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.12.2020, 17:56
Сообщение #24


**********

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



Цитата
или постановка задачи слишком туманна, чтобы внятно ответить?

Пожалуй, да.


Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 6.12.2020, 19:46
Сообщение #25


**

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



Цитата(cirus @ 6.12.2020, 17:56) *

Пожалуй, да.

Хорошо, можно ли организовать ввод с клавиатуры:
- после нажатия горячей клавиши скрипт ждет ввода с клавы
- ввожу ключевые буквы названия окна, Enter
- т.е. последовательность букв будет уникальна для каждого окна
- скрипт ищет и делает это окно активным, т.е. если свёрнуто или под другими окнами - раскрывается/вылезает вперед
Можно ли так сделать?
Суть в том, что
- сортировки по виртуальным столам - нету, т.е. после перезагрузки вся куча всё равно - на столе-1
- программа (Quik) работает корректно только со столом-1
??
(IMG:style_emoticons/default/rolleyes.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.12.2020, 20:22
Сообщение #26


**********

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



А не проще вызывать нужное окно при нажатии комбинации клавиш. Примерно так:
код
Код
--lua
local ffi = require("ffi")
local VK_CONTROL = 0x11
local key1 = 0x31
local key2 = 0x32
ffi.cdef[[
short GetKeyState(int nVirtKey);
short GetAsyncKeyState(int vKey);
]]
log 'clear' log 'mode compact'


while true do
    if ffi.C.GetAsyncKeyState(VK_CONTROL) < 0 and ffi.C.GetAsyncKeyState(key1) < 0 then   -- если нажаты Ctrl+1
        while ffi.C.GetKeyState(VK_CONTROL) < 0 and ffi.C.GetKeyState(key1) < 0 do wait(10) end
        log ("Активировать окно1")
    end

    if ffi.C.GetAsyncKeyState(VK_CONTROL) < 0 and ffi.C.GetAsyncKeyState(key2) < 0 then    -- если нажаты Ctrl+2
        while ffi.C.GetKeyState(VK_CONTROL) < 0 and ffi.C.GetKeyState(key2) < 0 do wait(10) end
        log ("Активировать окно2")
    end
    wait (10)
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 7.12.2020, 18:21
Сообщение #27


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2398
Пользователь №: 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;... , пока не найдете подходящий.


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 8.12.2020, 16:51
Сообщение #28


**

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



Цитата(cirus @ 6.12.2020, 20:22) *

А не проще вызывать нужное окно при нажатии комбинации клавиш. Примерно так:

Спасибо большое, но проблема в том, что открытых окон 40 шт (IMG:style_emoticons/default/blink.gif) и это не предел (IMG:style_emoticons/default/smile.gif)
При этом могут происходить изменения в наборе окон, перестановки.
Поэтому адекватно и оперативно работать с окнами я могу только вызывая их по ключевым буквам (имени окна)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 8.12.2020, 17:28
Сообщение #29


**

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



Цитата(cirus @ 6.12.2020, 20:22) *

А не проще вызывать нужное окно при нажатии комбинации клавиш. Примерно так:

А вообще лучше было бы плавающее окно поверх других такого вида
(IMG:https://s8.hostingkartinok.com/uploads/images/2020/12/69148f25fbc8b0c5e9d6bd29965bedab.png)
Каждая клетка - это кнопка. Нажимаю SR (или Si, GZ, YN) + 1' (или 5', 30', D, W)
что дает такие сочетания:
SR1' или SRD или GZ5' и т.д.
А SR1' (или SRD или GZ5' и т.д.) - это и есть название окна (часть названия). Т.о. активируется необходимое окно.
Такой графический интерфейс сложно сделать?

Цитата(Fors1k @ 7.12.2020, 18:21) *

Move-WindowToDesktop третий параметр можно не указывать (по умолчанию 200). Если будет некорректно работать, то указывайте его с увеличением: 250;300;350;... , пока не найдете подходящий.

Интересно, но я выяснил, что мои окна нормально работают только на рабочем столе №1, на остальных - глючат. Поэтому пусть будет свалка окон на столе-1, но чтобы я мог оперативно активировать любое нужное окно по его названию
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 8.12.2020, 20:02
Сообщение #30


*****

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



Цитата(for2 @ 6.12.2020, 19:46) *

- после нажатия горячей клавиши скрипт ждет ввода с клавы
- ввожу ключевые буквы названия окна, Enter
- т.е. последовательность букв будет уникальна для каждого окна
- скрипт ищет и делает это окно активным, т.е. если свёрнуто или под другими окнами - раскрывается/вылезает вперед

Код
set hotkeystart @{F1}
--lua
require"luaposh";log"clear";log"mode compact"
window=PScode('return',{[[$return=text_prompt]]})
showwindow(findwindow(window)[1][1], 'top')

- hotkey: Alt+F1.
- Вводить имя окна с учетом регистра, например: WordPad.


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.12.2020, 2:26
Сообщение #31


**********

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



Цитата
Такой графический интерфейс сложно сделать?

Скачать архив LuaWindow.zip из этой темы: https://forum.uokit.com/index.php?showtopic=70165, распаковать в папку с exe пилота.
код

Код
--lua
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'

-- создание окна и контролов
local win = Window{w = 290, h = 170, 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 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


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
сообщение 9.12.2020, 16:51
Сообщение #32


**

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



Цитата(Fors1k @ 8.12.2020, 20:02) *

- Вводить имя окна с учетом регистра, например: WordPad.

Очень интересно, надо пробовать (IMG:style_emoticons/default/smile.gif)

Цитата(cirus @ 9.12.2020, 2:26) *

Скачать архив LuaWindow.zip из этой темы: [url=https://forum.uokit.com/index.php?

Оооочень круто, буду тестить временем удобство и скорость и поведение системы
Ещё напишу (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 9.1.2021, 18:36
Сообщение #33


**

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



Цитата(cirus @ 9.12.2020, 2:26) *

Скачать архив LuaWindow.zip из этой темы: https://forum.uokit.com/index.php?showtopic=70165, распаковать в папку с exe пилота.
Закрывать окно можно только через крестик, а не остановкой скрипта.

Доброго времени! Скрипт показывает себя очень хорошо, спасибо!
Ещё есть просьба,
Есть окно очереди печати принтера
(IMG:https://s8.hostingkartinok.com/uploads/images/2021/01/8891936b66bbaf68ab4dc87e4534b654.png)
Можно ли в интерфейс вашего кода добавить "галочку"?
- я ставлю галку и для принтера ставится галка "Приостановить печать"
- убираю галку и галка с "Приостановить печать" - убирается
???
В ваш код я уже добавил много других кнопок, изменил их размер, поэтому в вашем оригинальном коде добавьте пжл кусок кода с "галкой", чтобы я мог его перенести в свой модифицированный код
(IMG:style_emoticons/default/rolleyes.gif) (IMG:style_emoticons/default/rolleyes.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.1.2021, 23:50
Сообщение #34


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 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
сообщение 10.1.2021, 19:19
Сообщение #35


**

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



Цитата(cirus @ 9.1.2021, 23:50) *

Как-то так:

Офигительно! Буду тестить, спасибо!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 10.1.2021, 19:35
Сообщение #36


**

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



Да, строка "может надо, может нет" оказалась нужна, без нее не работало (IMG:style_emoticons/default/rolleyes.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 13.2.2021, 11:13
Сообщение #37


**

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)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 13.2.2021, 11:24
Сообщение #38


**********

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



Код
local handle = findwindow('Canon iP2700') 
if handle then
    showwindow(handle , 'TOP')  -- добавить эту строку
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
for2
сообщение 13.2.2021, 11:47
Сообщение #39


**

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



Цитата(cirus @ 13.2.2021, 11:24) *

Код
local handle = findwindow('Canon iP2700') 
if handle then
    showwindow(handle , 'TOP')  -- добавить эту строку


Почему-то окно не делается активным
Строку вставил:
код
Код

function check1:on_click()   -- если был клик по галке
    local menuiteminfo = ffi.new('MENUITEMINFOW', {ffi.sizeof('MENUITEMINFOW'), MIIM_STATE })
    local handle = findwindow('Canon iP2700')   -- имя окна очереди печати
    if handle then
        showwindow(handle , 'TOP')
        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

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 13.2.2021, 11:56
Сообщение #40


**********

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



Вот так:
Код
showwindow(handle[1][1], 'TOP')
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V < 1 2 3 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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