Цитата: Увеличение паузы помогло?
Нет.
Цитата: Я же не знаю нужную задачу.
Переключаться между окнами чтобы отправлять в них нажатия используя ардуино.
Цитата: Надо ли что бы окно всегда деактивировалось.
Нужно чтобы окно деактивировалось после нажатия.
1. Активировать окно.
2. Отправить нажатие используя ардуино.
3. Деактивировать окно.
4. Повторить действия для других окон. И вот тут начинаются проблемы. Если не выполнить пункт 3, то другие окна не активируются, точнее они будут выведены на передний план, при этом будут мигать в панели задач. Но фокус они не получат, у них заголовок выглядит как у фоновых окон, не активен. Нажатие выполнится в окне, которое до этого активировали.
На счёт мигания окна на панели написано тут: SetForegroundWindow
Remarks
Цитата: The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:
The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The process is being debugged.
The foreground process is not a Modern Application or the Start Screen.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
No menus are active.
An application cannot force a window to the foreground while the user is working with another window. Instead, Windows flashes the taskbar button of the window to notify the user.
Вот это работает:
CODE:external(INT, "set_port", "set_port", "Arduino.dll");
external(INT, "_key", "key", "Arduino.dll");
set_port(7);
win w[9];
int k = window (#w[0], -1, "Notepad", -1);
loop(3)
{
for(int i=0; i<k; i++)
{
activate (w[i]);
pause(500);
_key('z'); // отправка нажатия через ардуино
sleep(300);
enabledeactive(w[i]);
sleep(300);
disabledeactive();
sleep(300);
}
}
И это, работает быстро, но явно не самый надёжный вариант:
CODE:external(INT, "set_port", "set_port", "Arduino.dll");
external(INT, "_key", "key", "Arduino.dll");
set_port(7);
win w[9];
int k = window (#w[0], -1, "Notepad", -1);
for(int i=0; i<k; i++)enabledeactive(w[i]);
loop(3)
{
for(i=0; i<k; i++)
{
activate (w[i]);
_key('z'); // отправка нажатия через ардуино
sleep(100);
}
}
Получается:
Или что-то сделать с активацией окон, тогда вопрос исчерпан.
Или деактивацией, после которой нормально срабатывает активация. |