Ребята, подскажите, куда копать! Есть программа InqSoft Window Scanner - просматривает главное меню окна любой программы, видит ID пунктов меню и позволяет на них нажимать и т.д. Как при помощи UOPilot так же работать с главным меню программы через скрипты, просматривать структуру меню и работать с дочерними окнами??
--lua
local GA_ROOTOWNER = 3
local MF_BYPOSITION = 0x00000400
local ffi = require("ffi")
ffi.cdef[[
int GetMenu(int hwnd);
int GetAncestor(int hwnd, unsigned int gaFlags);
int GetMenuItemCount(int hmenu);
int GetMenuStringA(int hmenu, unsigned int idItem, char* lpsz, int cbMax, unsigned int fuFlags);
]]
-- Ctrl+A привязка к окну, можно проверить на окне пилота или блокнота
log 'clear' log 'mode compact'
local h_menu = ffi.C.GetMenu(ffi.C.GetAncestor(workwindow(), GA_ROOTOWNER))
if h_menu > 0 then
local count_menu_item = ffi.C.GetMenuItemCount(h_menu)
log('Количество элементов в меню: ' .. tostring(count_menu_item))
for i=0, count_menu_item-1 do
local len_str = ffi.C.GetMenuStringA(h_menu, i, nil, 0, MF_BYPOSITION)
local name_item = ffi.new('char[?]', len_str+1)
ffi.C.GetMenuStringA(h_menu, i, name_item, ffi.sizeof(name_item), MF_BYPOSITION)
log(ffi.string(name_item))
end
else
log('У окна нет меню')
end
Скорее всего имелось ввиду нажатие кнопок по их имени или id
--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
Без понятия, у меня нет этой проги, используйте стандартные виртуальные столы.
--lua
wait(3000) -- пауза 3 секунды (можно убрать)
local name_active_window = getwindowtext(getwindow(0)) -- получить имя активного окна
clipboard (name_active_window) -- скопировать в буфер обмена
hint (name_active_window) -- подсказка в левом нижнем углу (можно убрать)
--lua
wait(3000) -- пауза 3 секунды (можно убрать)
local name_active_window = getwindowtext(getwindow(0)) -- получить имя активного окна
clipboard (name_active_window) -- скопировать в буфер обмена
hint (name_active_window) -- подсказка в левом нижнем углу (можно убрать)
А первую строку копировать кто будет?
--lua
--lua
--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
--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
--lua
wait(3000) -- пауза 3 секунды (можно убрать)
local name_active_window = getwindowtext(getwindow(0)) -- получить имя активного окна
clipboard (name_active_window) -- скопировать в буфер обмена
hint (name_active_window) -- подсказка в левом нижнем углу (можно убрать)
--lua
alarm()
--lua
-- тут какой-то код луа
--endlua
// тут используется старый синтаксис пилота
hint (24 clRed 500 500 -1 -1 (Готово))
--lua
-- дальше снова код на языке луа
-- какой-то код луа
А не проще вызывать нужное окно при нажатии комбинации клавиш. Примерно так:
--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
--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
}
#
]]})
set hotkeystart @{F1}
--lua
require"luaposh";log"clear";log"mode compact"
window=PScode('return',{[[$return=text_prompt]]})
showwindow(findwindow(window)[1][1], 'top')
--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
--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
Да, строка "может надо, может нет" оказалась нужна, без нее не работало
--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
local handle = findwindow('Canon iP2700')
if handle then
showwindow(handle , 'TOP') -- добавить эту строку
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
Вот так:
showwindow(handle[1][1], 'TOP')
showwindow(handle[1][1], 'TOP')
showwindow(handle[1][1], 'TOP')
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)