Нет, мне не нужно чтоб окно были постоянно зафиксированы на одном месте. У меня несколько окон просто должны всплывать друг за другом, в одинаковых координатах.
Оконный режим пока только изучаю и пока не очень подходит.
Я сам припоминаю, что с WNDBUMP были какието косяки.
Гдето встречал в делфи нужную для этого функцию. SetForegroundWindow называется, просто делает окно активным, поверх всех других.
Написал ради интереса длл, ничего сложного. Проверил, вроде работает четко и без сбоев.
Код делфи длл:
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" в одной папке со скриптом):
CALL("SetForegroundWindow.dll", $hwnd) // hwnd естественно нужный пишем
halt
CALL в этом случае вернет в системную переменную $_return1 результат "1" если такое окно существует, если же такого hwnd нет, то результатом будет "0"
Для теста, запустил 5 калькуляторов, и решил делать их активными рандомно:
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-битной версии кликерман во вложении.