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

 
Ответить в эту темуОткрыть новую тему
> Восстановление окна после showwindow #handle HIDE, showwindow #handle HIDE/RESTORE
Demergo
сообщение 2.6.2021, 9:52
Сообщение #1


**

Neophyte
Сообщений: 34
Регистрация: 22.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.040
Возраст: 29



Есть два скрипта, под каждый своя горячая клавиша.

Задача первого скрыть окно:

Set #a FindWindow (окно 1)
showwindow #a hide
end_script

Задача второго вернуть окно:

Set #a FindWindow (окно 1)
showwindow #a restore
end_script

По первому скрипту окно скрывается. А вот второй скрипт уже не может найти свернутое окно по Set #a FindWindow (окно 1)

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


**********

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



Цитата
Как искать окно которое скрыто?

Код
--lua
local ffi = require("ffi")
ffi.cdef[[ int FindWindowExA(int hWndParent, int hWndChildAfter, const char* lpszClass, const char* lpszWindow); ]]

local handle = ffi.C.FindWindowExA(0, 0, nil, 'Калькулятор') -- найти окно
if handle > 0 then
--     showwindow (handle, 'top')   -- показать окно
     showwindow (handle, 'hide')   -- скрыть окно
else
    log ('Окно не найдено')
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Demergo
сообщение 2.6.2021, 11:58
Сообщение #3


**

Neophyte
Сообщений: 34
Регистрация: 22.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.040
Возраст: 29



Цитата(cirus @ 2.6.2021, 12:26) *

Код
--lua
local ffi = require("ffi")
ffi.cdef[[ int FindWindowExA(int hWndParent, int hWndChildAfter, const char* lpszClass, const char* lpszWindow); ]]

local handle = ffi.C.FindWindowExA(0, 0, nil, 'Калькулятор') -- найти окно
if handle > 0 then
--     showwindow (handle, 'top')   -- показать окно
     showwindow (handle, 'hide')   -- скрыть окно
else
    log ('Окно не найдено')
end



то что доктор прописал (IMG:style_emoticons/default/cool.gif)

ничего непонятно но работает (IMG:style_emoticons/default/smile.gif)

Цитата(cirus @ 2.6.2021, 12:26) *

Код
--lua
local ffi = require("ffi")
ffi.cdef[[ int FindWindowExA(int hWndParent, int hWndChildAfter, const char* lpszClass, const char* lpszWindow); ]]

local handle = ffi.C.FindWindowExA(0, 0, nil, 'Калькулятор') -- найти окно
if handle > 0 then
--     showwindow (handle, 'top')   -- показать окно
     showwindow (handle, 'hide')   -- скрыть окно
else
    log ('Окно не найдено')
end



а можно искать по части названия окна?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 2.6.2021, 12:26
Сообщение #4


**********

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



Цитата
а можно искать по части названия окна?

код
Код
--lua
local ffi = require("ffi")
ffi.cdef[[
int FindWindowExA(int hWndParent, int hWndChildAfter, const char* lpszClass, const char* lpszWindow);
int GetWindowTextA(int hWnd, char* lpString, int nMaxCount);
int GetWindowTextLengthA(int hWnd);
]]

function _findwindow(name_window)
    local handle = ffi.C.FindWindowExA(0, 0, nil, nil)
    while handle > 0 do
        local WindowName = ffi.new('char[?]', ffi.C.GetWindowTextLengthA(handle)+1)
        ffi.C.GetWindowTextA(handle, WindowName, ffi.sizeof(WindowName))
        if ffi.string(WindowName):match(name_window) then
            return handle, ffi.string(WindowName)
        end
        handle = ffi.C.FindWindowExA(0, handle, nil, nil)
    end
    return 0, nil
end

local handle, full_name = _findwindow('Кальк')  -- имя или часть имени окна
if handle > 0 then
    log ('Полное имя окна:\t' .. full_name)
--    showwindow (handle, 'top')   -- показать окно
    showwindow (handle, 'hide')   -- скрыть окно
else
    log ('Окно не найдено')
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Demergo
сообщение 2.6.2021, 12:45
Сообщение #5


**

Neophyte
Сообщений: 34
Регистрация: 22.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.040
Возраст: 29



Цитата(cirus @ 2.6.2021, 13:26) *

код
Код
--lua
local ffi = require("ffi")
ffi.cdef[[
int FindWindowExA(int hWndParent, int hWndChildAfter, const char* lpszClass, const char* lpszWindow);
int GetWindowTextA(int hWnd, char* lpString, int nMaxCount);
int GetWindowTextLengthA(int hWnd);
]]

function _findwindow(name_window)
    local handle = ffi.C.FindWindowExA(0, 0, nil, nil)
    while handle > 0 do
        local WindowName = ffi.new('char[?]', ffi.C.GetWindowTextLengthA(handle)+1)
        ffi.C.GetWindowTextA(handle, WindowName, ffi.sizeof(WindowName))
        if ffi.string(WindowName):match(name_window) then
            return handle, ffi.string(WindowName)
        end
        handle = ffi.C.FindWindowExA(0, handle, nil, nil)
    end
    return 0, nil
end

local handle, full_name = _findwindow('Кальк')  -- имя или часть имени окна
if handle > 0 then
    log ('Полное имя окна:\t' .. full_name)
--    showwindow (handle, 'top')   -- показать окно
    showwindow (handle, 'hide')   -- скрыть окно
else
    log ('Окно не найдено')
end



спасибо огромное!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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