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

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

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

> Без описания
Zireael
Отправлено: 06 Мая, 2023 - 14:01:56
Post Id



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


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




При запуске скрипта проверяется сколько копий программы уже открыто. В данном примере запустится 3 копии программы, при запуске 4-й будет сообщение что запущено максимальное количество копий.
CODE:
#define NULL 0
#define PAGE_READWRITE 0x04
#define FILE_MAP_READ 4
#define FILE_MAP_WRITE 2
#define INVALID_HANDLE_VALUE -1

external(VOID, "RtlMoveMemory", "RtlMoveMemory", "Ntdll.dll");
external(INT, "CreateFileMapping", "CreateFileMappingA", "Kernel32.dll");
external(INT, "MapViewOfFile", "MapViewOfFile", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
external(INT, "UnmapViewOfFile", "UnmapViewOfFile", "Kernel32.dll");


options ("stop", "C");
char Buf[99];
int SizeBuf = sizearray(Buf);
int FileMapping, FileMap;

// проверка на количество копий
// в функцию передаём сколько копий программы можно запустить
// в данном примере можно запустить 3 exe
if(Start(3)<1)
{
messagebox("Уже открыто максимальное количество копий программы");
goto end; // можно использовать close(); чтобы закрыть программу
}
//////

createdialog(0);
showdialog(0, "Dialog",100, 100, 300, 300, 4, 1);
loop()sleep(10);
end:;




function getmessage(0, WM_CLOSE)
{
string Text = Read();
Write(format(formatsn(Text)-1));
ReleaseResource();
goto global end;
}

function Start(int Count)
{
FileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, SizeBuf, "MyKibFileName");
if(FileMapping==NULL)
{
messagebox("Error CreateFileMapping");
return -1;
}
FileMap = MapViewOfFile(FileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
if(FileMap==NULL)
{
messagebox("Error MapViewOfFile");
return -2;
}

string Text = Read();
if(Text=="")Write("1");
else
{
if(formatsn(Text) < Count)Write(format(formatsn(Text)+1));
else return -3;
}
return 1;
}

function Write(string Message)
{
strcpy(#Buf[0], Message);
RtlMoveMemory(FileMap, address(#Buf[0]), SizeBuf);
}

function Read()
{
RtlMoveMemory(address(#Buf[0]), FileMap, SizeBuf);
return format(#Buf[0]);
}

function ReleaseResource()
{
if(FileMap != NULL) UnmapViewOfFile(FileMap);
if(FileMapping != NULL) CloseHandle(FileMapping);
}
 
 Top
asterka
Отправлено: 21 Мая, 2023 - 15:41:28
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 16
Дата рег-ции: Апр. 2023  
Репутация: 0




Zireael , Спасибо за скрипт!. Есть вопрос. Как расширить это ограничение на другие запущенные учётные записи Windows? Я запустил две учётки. И на обеих могу запустить по три экземпляра.
 
 Top
Zireael
Отправлено: 21 Мая, 2023 - 15:53:23
Post Id



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


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




 Цитата:
Как расширить это ограничение на другие запущенные учётные записи Windows?

Добавить Global\ перед именем файла.
 Цитата:
FileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, SizeBuf, "Global\MyKibFileName" );
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Готовые скрипты »


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




Powered by