Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Не знаю как поправить код

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

1. Fintil - 23 Апреля, 2023 - 10:14:24 - перейти к сообщению
Привет. Использую данный код для ограниченного запуска exe.

Код (Отобразить)


Я не умею работать с немодальными диалоговыми окнами и поэтому просто убираю
CODE:
createdialog(0);
showdialog(0, "Диалог", 300, 300, 300, 300, 4, 1);
loop()sleep(10);

И вставляю свой код. Например
CODE:
int eCol_Kib, eX_Kib, eY_Kib;
getdisplay(eCol_Kib, eX_Kib, eY_Kib);

KIB_2: pause(formatsn(getcontrol(EDIT_0))*1000);
beep(500, 500);
goto KIB_2;
CREATE_INTERFACE
{
DIALOG "Название окна" 200 100 //РазмерX РазмерY
STATIC_0 "Beep раз в " 10 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "5" 75 8 65 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 " секунд" 140 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
BUTTONSCRIPT "Запустить" 10 40 174 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......

}


Запускаю, пользуюсь. Останавливаю скрипт ctrl+shift+z, в диалоговом окне нажимаю еще раз "Запустить" и получаю сообщение "Уже запущено". Приходится перезапускать exe заново. Как можно поправить?
2. Zireael - 26 Апреля, 2023 - 13:26:09 - перейти к сообщению
 Цитата:
Как можно поправить?

Нужно удалять мьютекс при остановке скрипта.
CODE:
#define MUTEX_ALL_ACCESS 0x1F0001
external(INT, "IsUserAnAdmin", "IsUserAnAdmin", "Shell32.dll");
external(INT, "CreateMutex", "CreateMutexA", "Kernel32.dll");
external(INT, "OpenMutex", "OpenMutexA", "Kernel32.dll");
external(INT, "ReleaseMutex", "ReleaseMutex", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");

if(IsUserAnAdmin()==0)
{
messagebox("Только от имени Администратора");
close();
}

options ("stop","O");//Меняет стандатрную остановку на другую букву.
int my_mutex=Mutex("Global\MyMutex123"); // имя мьютекса (любое) после Global\


enabletimer(0);
KIB_2: _pause(formatsn(getcontrol(EDIT_0))*1000);
beep(500, 500);
goto KIB_2;
EndScript:;

CREATE_INTERFACE
{
DIALOG "Название окна" 200 100 //РазмерX РазмерY
STATIC_0 "Beep раз в " 10 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "5" 75 8 65 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 " секунд" 140 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
BUTTONSCRIPT "Запустить" 10 40 174 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......
}

function _pause(int t){looptime(t)sleep(10);}

function Mutex(string s)
{
if(OpenMutex(MUTEX_ALL_ACCESS, 0, s))
{
messagebox("Уже запущено");
close(); // если мьютекс существует, закрыть программу
}
return CreateMutex(0, 1, s); // иначе создать мьютекс
}


CREATE_TIMER(0, 50)
{
if (getkeystate(17) && getkeystate(16) && getkeystate(90)) // если нажаты Ctrl+Shift+Z
{
// удаление мьютекса
ReleaseMutex(my_mutex);
CloseHandle(my_mutex);
goto EndScript;
}
}
3. Fintil - 27 Апреля, 2023 - 05:07:46 - перейти к сообщению
Zireael в который раз, большое спасибо!

Powered by ExBB FM 1.0 Final