Привет. Использую данный код для ограниченного запуска exe.
Код (Отобразить)#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();
}
int my_mutex=Mutex("Global\MyMutex123"); // имя мьютекса (любое) после Global\
createdialog(0);
showdialog(0, "Диалог", 300, 300, 300, 300, 4, 1);
loop()sleep(10);
function getmessage(0, WM_CLOSE)
{
// удаление мьютекса
ReleaseMutex(my_mutex);
CloseHandle(my_mutex);
close();
}
function Mutex(string s)
{
if(OpenMutex(MUTEX_ALL_ACCESS, 0, s))
{
messagebox("Уже запущено");
close(); // если мьютекс существует, закрыть программу
}
return CreateMutex(0, 1, s); // иначе создать мьютекс
}
Я не умею работать с немодальными диалоговыми окнами и поэтому просто убираю
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 заново. Как можно поправить? |