1
Общие вопросы / Re: Окно на передний план.
« on: June 07, 2019, 12:48:34 AM »
Спасибо! У меня просто стояла 64х версия кликера, из-за чего dll не отрабатывал.
Добавлена тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Интересный костыль, а главное работает!
Единственный минус это задержка между переключениями двух окон (более одной секунды), хотелось бы чтоб побыстрее окна вылазилы на поверхность.
Странно, что такая большая задержка. Ради интереса попробовал на открытых у меня окнах - переключает очень быстро.Code: (clickermann) [Select]start:
$h = WNDFIND("Калькулятор")
$j = WNDFIND("Droid")
$k = WNDFIND("Adobe")
$l = WNDFIND("Проводник")
WNDBUMP($h)
MOVE($_xmouse,$_ymouse)
waitms(100)
WNDBUMP($j)
MOVE($_xmouse,$_ymouse)
waitms(100)
WNDBUMP($k)
MOVE($_xmouse,$_ymouse)
waitms(100)
WNDBUMP($l)
MOVE($_xmouse,$_ymouse)
waitms(100)
goto(start)
Нет, мне не нужно чтоб окно были постоянно зафиксированы на одном месте. У меня несколько окон просто должны всплывать друг за другом, в одинаковых координатах.
Оконный режим пока только изучаю и пока не очень подходит.
Я сам припоминаю, что с WNDBUMP были какието косяки.
Гдето встречал в делфи нужную для этого функцию. SetForegroundWindow называется, просто делает окно активным, поверх всех других.
Написал ради интереса длл, ничего сложного. Проверил, вроде работает четко и без сбоев.
Код делфи длл:Code: (clickermann) [Select]library cmann_plugin;
uses Windows;
//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
pIntArr = array[0..0] of Integer;
var
hwnd : Integer;
begin
hwnd := pIntArr(_mas^)[0];
if SetForegroundWindow(hwnd) then result := 1 else result := 0;
end;
//------------------------------------------------------------------------------
// список экспорта
exports execute;
begin
// тело пусто
end.
Чтобы сделать окно активным с помощью моей длл, пишем такой код для км ("SetForegroundWindow.dll" в одной папке со скриптом):Code: (clickermann) [Select]CALL("SetForegroundWindow.dll", $hwnd) // hwnd естественно нужный пишем
halt
CALL в этом случае вернет в системную переменную $_return1 результат "1" если такое окно существует, если же такого hwnd нет, то результатом будет "0"
Для теста, запустил 5 калькуляторов, и решил делать их активными рандомно:Code: (clickermann) [Select]WNDFINDARR ($arr_hwnd, "Калькулятор") //ищем хендлы всех калькуляторов
FOR($a=0,$a < 15) //количество переключений между ними
//делаем рандомное окно калькулятора активным каждые 500мс
CALL("SetForegroundWindow.dll", $arr_hwnd[rnd(0,arrsize($arr_hwnd)-1)])
waitms(500)
END_CYC
halt
Тест прошел успешно.
"SetForegroundWindow.dll" для 32-битной версии кликерман во вложении.
Опытным путем установлено, что если после использования wndbump совершить какое либо действие с мышью, например клик или перемещение, то последующее использование wndbump работает нормально. Попробуй так:Code: (clickermann) [Select]start:
MOVE($_xmouse,$_ymouse)
$h = WNDFIND("Калькулятор")
WNDBUMP($h)
WAIT(2)
GOTO (start)