Kibor |
Отправлено: 27 Января, 2021 - 18:21:22
|
Эксперт
Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Пример проверки пинга и вывода пинга на диалог ограниченное количество времени с выходом из режима пингования.
CODE:int pos_size_static0[1][4];
string text_static0[1];
pos_size_static0[0][0]=9; pos_size_static0[0][1]=9; pos_size_static0[0][2]=398; pos_size_static0[0][3]=367;
text_static0[0]="";
//////////
createdialog(0, STATIC, #pos_size_static0[0][0], #text_static0[0]);
//////////
showdialog(0, "Диалог", 207, 109, 426, 422, 1, 1);
//////////
//loop() sleep(10);//Убрать после теста
if (createpipeprocess("C:\Windows\System32\cmd.exe -i"))
{
int C;
string S;
char G[1000000];
int n=0;
sendpipe("ping googl.com -t^n");//Отправляем команду ping googl.com -t
waitpipe();//Ждем пока отработает и появятся данные
sleep(500);//для надежности
A: looptime(3000)//Считываем в течение 3 секунд
{
C=getpipe(#G[n]);
n=n+C;
text_static0[0]=d866tow1251 (format(#G[0]));
if (n>1000) break;
sleep(10);
if (C!=0) goto A;
}
messagebox ("Завершено");
closepipeprocess();//Завершим процесс и закрываем канал
} |
|
|
Gormit |
Отправлено: 12 Апреля, 2021 - 11:02:11
|
Наблюдатель
Покинул форум
Сообщений всего: 44
Дата рег-ции: Нояб. 2020
Репутация: 0
|
А как сделать, чтобы после остановки скрипта через ctrl+shift+z в собранном exe, не появлялось окно запуска скрипта кибора?
Раньше использовал графический интерфейс (CREATE_INTERFACE), так вот после остановки скрипта через ctrl+shift+z - возвращался обратно к графическому интерфейсу, а по закрытии его, ничего не появлялось.
Сейчас использую модальное окно (showdialog(0, "Диалог", 100, 100, 100, 100, 3, 1)), так как графический интерфейс ограничен по функционалу. Седьмой параметр выбираю "3", при нажатии на крестик - все нормально закрывается (причем если это тест, то и закрывает среду разработки кибор, что очень неприятно), а вот если просто остановить работу скрипта ctrl+shift+z - получаем окно запуска скрипта кибора.
Может как-то можно реализовать остановку скрипта и сразу автоматический запуск с showdialog... Или создать свой таймер с отслеживанием другого сочетания клавиш для остановки и моментального запуска? |
|
|
Zireael |
Отправлено: 12 Апреля, 2021 - 11:34:33
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А как сделать, чтобы после остановки скрипта через ctrl+shift+z в собранном exe, не появлялось окно запуска скрипта кибора?
CODE:#define MOD_CONTROL 0x0002
#define MOD_SHIFT 0x0004
#define MOD_ALT 0x0001
#define Z_key 0x5A
external(INT, "RegisterHotKey", "RegisterHotKey", "User32.dll");
options ("stop","C"); // остановка скрипта Ctrl+Shift+C
createdialog(0);
_start:;
showdialog(0, "Dialog", 100, 100, 300, 200, 4, 1);
loop()
{
// тут сам скрипт
sleep(10);
}
function getmessage(0, WM_CREATE)
{
RegisterHotKey(gethwnd(0), 1, MOD_CONTROL + MOD_SHIFT, Z_key); // регистрация хоткея Ctrl+Shift+Z
}
function getmessage(0, WM_HOTKEY)
{
if(message.wparam==1)goto global _start; // переход к метке если нажат хоткей
}
function getmessage(0, WM_CLOSE)
{
// при нажатии на крестик (нужное раскомментировать)
//close(); // закрыть кибор
//goto global _start; // переход к метке
hidedialog(0); // скрыть диалоговое окно
}
|
|
|
Gormit |
Отправлено: 20 Апреля, 2021 - 13:27:47
|
Наблюдатель
Покинул форум
Сообщений всего: 44
Дата рег-ции: Нояб. 2020
Репутация: 0
|
Что-то я не совсем врубаюсь в магию работы этих модальных окон. Если с графическим интерфейсом все было предельно понятно и при остановке скрипта все "косяки" и таймеры останавливались автоматически, то с модальным окном у меня все намного хуже)))) Я понимаю что скрипт продолжает работать и жить своей жизнью.
CODE:
//Тут начало графического блока start_();
#define MOD_CONTROL 0x0002
#define MOD_SHIFT 0x0004
#define MOD_ALT 0x0001
#define Z_key 0x5A
external(INT, "RegisterHotKey", "RegisterHotKey", "User32.dll");
options ("stop","C"); // остановка скрипта Ctrl+Shift+C
//Тут код диалога построенного инструментом "визуальный редактор диалогов"
createdialog(0);
_start:;
//тут останавливаю все таймеры
showdialog(0, "Dialog", 100, 100, 300, 200, 4, 1);
loop()
{
// тут у меня скрипт отвечающий за диалог
sleep(10);
}
function getmessage(0, WM_CREATE)
{
RegisterHotKey(gethwnd(0), 1, MOD_CONTROL + MOD_SHIFT, Z_key); // регистрация хоткея Ctrl+Shift+Z
}
function getmessage(0, WM_HOTKEY)
{
if(message.wparam==1)goto global _start; // переход к метке если нажат хоткей
}
function getmessage(0, WM_CLOSE)
{
// при нажатии на крестик (нужное раскомментировать)
close(); // закрыть кибор
//goto global _start; // переход к метке
hidedialog(0); // скрыть диалоговое окно
}
//а тут у меня скрипт отвечающий за логику бота и старт таймеров
//по завершении логики звуковой сигнал и переход к метке _start;
Возникают ситуации, что при нажатии Ctrl+Shift+Z - слышу не 1 звуковой сигнал, а 2 и более (как будто закрылось несколько потоков). Иногда при остановке и закрытии бота скрипт вообще не останавливается и висит в процессах, хотя визуально его не видно.
Что я делаю не так?
И может есть какой-то инструмент вроде "визуальный редактор диалогов" для создания этих самых диалогов с помощью extrnal и WinAPI?(Отредактировано автором: 20 Апреля, 2021 - 13:36:48) |
|
|
Zireael |
Отправлено: 20 Апреля, 2021 - 14:07:28
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Тут начало
Тут код
Эти тут никому ни о чём не скажут. Создайте отдельную тему, выложите код, который не работает или работает как-то не так. Тогда уже можно что-то подсказать.
Цитата: И может есть какой-то инструмент вроде "визуальный редактор диалогов" для создания этих самых диалогов с помощью extrnal и WinAPI?
Нет.(Отредактировано автором: 20 Апреля, 2021 - 14:17:35) |
|
|
Zireael |
Отправлено: 02 Мая, 2022 - 21:59:05
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как програмно сделать перенос строки в текстовом поле? \r и \n не работают.
CODE:int pos_size_edit0[1][4];
string text_edit0[1];
pos_size_edit0[0][0]=33; pos_size_edit0[0][1]=34; pos_size_edit0[0][2]=100; pos_size_edit0[0][3]=80;
text_edit0[0]="Text1^r^nText2^r^nText3";
createdialog(0, EDIT, #pos_size_edit0[0][0], #text_edit0[0]);
showdialog(0, "Диалог", 835, 390, 250, 300, 1, 1);
loop()sleep(10); |
|
|
Diskdisk |
Отправлено: 02 Мая, 2022 - 22:32:27
|
Прохожий
Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2022
Репутация: 0
|
Zireael пишет: Цитата: Как програмно сделать перенос строки в текстовом поле? \r и \n не работают.
CODE:int pos_size_edit0[1][4];
string text_edit0[1];
pos_size_edit0[0][0]=33; pos_size_edit0[0][1]=34; pos_size_edit0[0][2]=100; pos_size_edit0[0][3]=80;
text_edit0[0]="Text1^r^nText2^r^nText3";
createdialog(0, EDIT, #pos_size_edit0[0][0], #text_edit0[0]);
showdialog(0, "Диалог", 835, 390, 250, 300, 1, 1);
loop()sleep(10);
спасибо за оперативность! Работает) |
|
|
|