Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Без описания
Zireael
Отправлено: 13 Января, 2022 - 02:25:36
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




Добавить функцию наподобие enabledeactive, только не всё время деактивировать окно, а разово в момент вызова.
Либо как деактивировать окно?
 
 Top
Kibor
Отправлено: 13 Января, 2022 - 06:48:31
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 Zireael пишет:
Добавить функцию наподобие enabledeactive, только не всё время деактивировать окно, а разово в момент вызова.

Сделать схему с enabledeactive disabledeactive когда надо.
 Zireael пишет:
Либо как деактивировать окно?

Передать фокус любому другому окну.
 
 Top
Zireael
Отправлено: 13 Января, 2022 - 10:58:41
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
Передать фокус любому другому окну.

Как? activate активирует окно, но фокус не передаёт, если пользователь работает с другим окном.
Ардуино нажимает клавишу в одном окне, если выполнить activate другого окна, то это окно не получит фокус и в него нажатии не выполнится. Работает только если сначала деактивировать окно, в которое нажимало ардуино, а уже после этого activate.
 
 Top
Zireael
Отправлено: 13 Января, 2022 - 13:20:52
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




Для теста, открыть пару блокнотов и запустить скрипт.
CODE:
win w[9];
int k = window (#w[0], -1, "Notepad", -1);

pause(1000);

loop(3)
{
for(int i=0; i<k; i++)
{
activate (w[i]);
pause(500);
key('z');
sleep(100);
}
}

Напечатает в каждый блокнот zzz.
Если использовать ардуино то напечатает в один из блокнотов zzzzzz, в другой ничего.
С PS/2 также?
 
 Top
Kibor
Отправлено: 13 Января, 2022 - 13:36:23
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 Zireael пишет:
С PS/2 также?

С паузой
key('z');
sleep(100);
Да.

Без
PS/2 работает нормально и с 100

===========================

Если поставить паузу 500, то работает и с PS/2 нормально.

Так же проверьте такой алгоритм

CODE:
win w[9];
int k = window (#w[0], -1, "Notepad", -1);

pause(1000);

loop(3)
{
for(int i=0; i<k; i++)
{
activate (w[i]);
pause(500);
key('z');
enabledeactive(w[i]);
sleep(100);
disabledeactive();
sleep(100);
}
}
 
 Top
Zireael
Отправлено: 13 Января, 2022 - 13:50:43
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
Так же проверьте такой алгоритм

Про это я и писал, что при деактивации работает.
CODE:
enabledeactive(w[i]);
sleep(300);
disabledeactive();

Только зачем каждый включать/выключать, проще 1 раз выполнить код из enabledeactive чтобы деактивировать окно. Что-то вроде:
CODE:
deactivewindow(win);
 
 Top
Kibor
Отправлено: 13 Января, 2022 - 14:02:16
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 Zireael пишет:
Только зачем каждый включать/выключать, проще 1 раз выполнить код из enabledeactive чтобы деактивировать окно. Что-то вроде:

Я же не знаю нужную задачу. Надо ли что бы окно всегда деактивировалось.
Увеличение паузы помогло?
 
 Top
Zireael
Отправлено: 14 Января, 2022 - 01:42:04
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
Увеличение паузы помогло?

Нет.
 Цитата:
Я же не знаю нужную задачу.

Переключаться между окнами чтобы отправлять в них нажатия используя ардуино.
 Цитата:
Надо ли что бы окно всегда деактивировалось.

Нужно чтобы окно деактивировалось после нажатия.
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);
}
}


Получается:
Или что-то сделать с активацией окон, тогда вопрос исчерпан.
Или деактивацией, после которой нормально срабатывает активация.
 
 Top
Kibor
Отправлено: 14 Января, 2022 - 07:44:34
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Остается только применять
enabledeactive - key - disabledeactive

Никакое Api не переводит в реально активный режим при работе с PS/2
 
 Top
Zireael
Отправлено: 14 Января, 2022 - 11:02:17
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




Тогда уже проще кликом мыши активировать окна:
CODE:
mouse(LEFT, 0, -1, 1, w);
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Предложения по программе »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by