--lua
local ffi = require("ffi")
ffi.cdef[[
typedef const char *LPCSTR;
struct HWND__ { int unused; }; typedef struct HWND__ *HWND;
HWND FindWindowExA (HWND hWndParent, HWND hWndChildAfter, LPCSTR lpszClass, LPCSTR lpszWindow);
]]
function _FindWindow(name, class, name_child, class_child)
local ListWindow = {}
local h = ffi.C.FindWindowExA(nil, nil, class or nil, name or nil)
while tonumber(ffi.cast('int', h)) > 0 do
local child = nil
if name_child or class_child then
child = ffi.C.FindWindowExA(h, nil, class_child or nil, name_child or nil)
end
if child then
ListWindow[#ListWindow+1] = tonumber(ffi.cast('int', child))
else
ListWindow[#ListWindow+1] = tonumber(ffi.cast('int', h))
end
h = ffi.C.FindWindowExA(nil, h, class or nil, name or nil)
end
if #ListWindow > 0 then
return ListWindow
end
return nil
end
-- Найти окна всех блокнотов
log 'clear' log 'mode compact'
local handle = _FindWindow(nil, 'Notepad', nil, nil) -- имя окна, класс окна, имя дочернего окна, класс дочернего окна
if handle then
log ("Найдено окон: " .. tostring(#handle))
log (table.concat(handle, '\r\n'))
else
log ('Окно не найдено')
end
-- Найти окно редактора всех блокнотов
local handle = _FindWindow(nil, 'Notepad', nil, 'Edit') -- имя окна, класс окна, имя дочернего окна, класс дочернего окна
if handle then
log ("Найдено окон: " .. tostring(#handle))
log (table.concat(handle, '\r\n'))
else
log ('Окно не найдено')
end