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

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

1. 007wan - 26 Ноября, 2017 - 10:31:24 - перейти к сообщению
Есть код
CODE:
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");
string all[2000];
char h[512];
int adr=address(#h[0]);
int a=my_windows(0, 0, 0, 0);
int n=0;
a:
if (a!=0)
{
h[0]=formatic(0);
my_getname(a, adr, 512);
all[n]=format(#h[0]);
a=my_windows(0, a, 0, 0);
n++;
goto a;
}
if (fopen ("C:\Users\Home\Desktop\Новый текстовый документ.txt", "w")!=0)
{
for (int x=0; x<n; x++)
{
fwrite(all[x]);
fwrite(ENDL);
}
fclose();
}
start ("C:\Users\Home\Desktop\Новый текстовый документ.txt");

Или есть лучше предложения по коду?
Короче нужно сделать так, что бы ЭТОТ код искал окно кибора или запущенный код в самой программе, но я там смотрел и нашел это:
CODE:
Кибор [C:\Users\Home\Desktop\МОЁ\KIBOR_BOT\Чат.txt]
, дело в том, что эта часть кода меняется:
CODE:
[C:\Users\Home\Desktop\МОЁ\KIBOR_BOT\Чат.txt]
Т.е путь, но как сделать , что бы призапуске возвращался этот путь программы и вписывался туда, а потом если нашел более 1 таких строчек
CODE:
[C:\Users\Home\Desktop\МОЁ\KIBOR_BOT\Чат.txt]
, то закрывал одну из программ, но закрывал так, что бы не обе закрылись, а только одна из них
2. Zireael - 26 Ноября, 2017 - 10:45:42 - перейти к сообщению
 Цитата:
Как сделать запрет запуска 2-х программ на одном компьютере?

Ищем указатель на окно, если найден ничего не делаем (значит программа уже запущена), если не найден запускаем программу.
3. 007wan - 27 Ноября, 2017 - 07:44:46 - перейти к сообщению
 Zireael пишет:
 Цитата:
Как сделать запрет запуска 2-х программ на одном компьютере?

Ищем указатель на окно, если найден ничего не делаем (значит программа уже запущена), если не найден запускаем программу.


Ну да, я тоже так считал сначало
(Добавление)
Но как он закроет лишнюю? указатели одинаковые, как и программы, получается он закроет обе
4. Zireael - 27 Ноября, 2017 - 19:41:16 - перейти к сообщению
Собрать в exe. Если запустить вторую копию этого exe, то выдаст сообщение и закроет вторую копию.
CODE:
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");
external(VOID, "my_exit", "ExitProcess", "kernel32.dll");

string hh="Kibor";
string class="2049725492-21869";
char t[25];
strcpy(#t[0], hh);
int ss=size(#t[0]), si, y, x;
string all[500];
char h[512];
int adr=address(#h[0]);
int a=my_windows(0, 0, class, 0);
win w[500];
int n=0;

while (a!=0)
{
h[0]=formatic(0);
my_getname(a, adr, 512);
si=size(#h[0]);
if (pr()==-1) goto nn;
all[n]=format(#h[0]);
w[n]=formatiw(a);
n++;
nn: a=my_windows(0, a, class, 0);
}

if (n > 1) // если запущено больше 1 программы
{
messagebox("Kibor уже открыт, этот будет закрыт"); // можно убрать
my_exit(0); // закрыть программу
}

loop() // можно убрать
{
textout(0, 500, 500, "Kibor", 1);
sleep(100);
}
5. Kibor - 28 Ноября, 2017 - 00:10:37 - перейти к сообщению
У пользователя другого класс может отличаться..
6. 007wan - 28 Ноября, 2017 - 06:27:47 - перейти к сообщению
 Kibor пишет:
У пользователя другого класс может отличаться..

Как исправить? может другая идея есть?
(Добавление)
 Kibor пишет:
У пользователя другого класс может отличаться..

Можно сделать указатель на окно, он выведит класс и впишет его туда
7. Kibor - 28 Ноября, 2017 - 08:13:46 - перейти к сообщению
Немного переделал что б не вводить класс.
Он определяется по указателю на свою программу.
win wc=getwindow();
wc.class


CODE:
win wc=getwindow();
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");
external(VOID, "my_exit", "ExitProcess", "kernel32.dll");


int si, y, x;
string all[500];
char h[512];
int adr=address(#h[0]);
int a=my_windows(0, 0, wc.class, 0);
win w[500];
int n=0;

while (a!=0)
{
h[0]=formatic(0);
my_getname(a, adr, 512);
si=size(#h[0]);
if (pr()==-1) goto nn;
all[n]=format(#h[0]);
w[n]=formatiw(a);
n++;
nn: a=my_windows(0, a, wc.class, 0);
}

if (n > 1) // если запущено больше 1 программы
{
messagebox("Kibor уже открыт, этот будет закрыт"); // можно убрать
my_exit(0); // закрыть программу
}

loop() // можно убрать
{
textout(0, 500, 500, "Kibor", 1);
sleep(100);
}
8. 007wan - 28 Ноября, 2017 - 08:45:02 - перейти к сообщению
Kibor , Спасибо, но как сделать, что бы этот код:
CODE:
win wc=getwindow();
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");
external(VOID, "my_exit", "ExitProcess", "kernel32.dll");
int si, y, x;
string all[500];
char h[512];
int adr=address(#h[0]);
int a=my_windows(0, 0, wc.class, 0);
win w[500];
int n=0;
while (a!=0)
{
h[0]=formatic(0);
my_getname(a, adr, 512);
si=size(#h[0]);
if (pr()==-1) goto nn;
all[n]=format(#h[0]);
w[n]=formatiw(a);
n++;
nn: a=my_windows(0, a, wc.class, 0);
}
if (n > 1) // если запущено больше 1 программы
{
messagebox("Kibor уже открыт, этот будет закрыт"); // можно убрать
my_exit(0); // закрыть программу
}
loop() // можно убрать
{
textout(0, 500, 500, "Kibor", 1);
sleep(100);
}

Как его разместить в loop' е или вообще куда его запихать, а то я сменил название переменных, а программа вылетает, вместо while я ставил if, потому что уже есть цикл луп и метку другое
9. Kibor - 28 Ноября, 2017 - 09:24:17 - перейти к сообщению
CODE:
// пишем вверху в самом
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");
external(VOID, "my_exit", "ExitProcess", "kernel32.dll");
win wc;
проверить_запущена_ли_программа();


//тут вся программа













function проверить_запущена_ли_программа()
{
wc=getwindow();
int si, y, x;
string all[500];
char h[512];
int adr=address(#h[0]);
int a=my_windows(0, 0, wc.class, 0);
win w[500];
int n=0;

while (a!=0)
{
h[0]=formatic(0);
my_getname(a, adr, 512);
si=size(#h[0]);
if (pr()==-1) goto nn;
all[n]=format(#h[0]);
w[n]=formatiw(a);
n++;
nn: a=my_windows(0, a, wc.class, 0);
}

if (n > 1) // если запущено больше 1 программы
{
messagebox("Kibor уже открыт, этот будет закрыт"); // можно убрать
my_exit(0); // закрыть программу
}

loop() // можно убрать
{
textout(0, 500, 500, "Kibor", 1);
sleep(100);
}
}
10. 007wan - 28 Ноября, 2017 - 10:14:12 - перейти к сообщению
Kibor , Спс, сейчас проверю)
(Добавление)
Kibor , вылетает...(я поменял название переменных, т.к уже некоторые из них используются)
Идет объявление кучи переменных, потом инитдиалог, вывод диалога, потом
CODE:
external(INT, "my_windows", "FindWindowExA", "user32.dll");
external(VOID, "my_getname", "GetWindowTextA", "user32.dll");
external(VOID, "my_exit", "ExitProcess", "kernel32.dll");
Запрет_на_запуск();

потом куча функций и условий...а потом...
CODE:
function Запрет_на_запуск()
{
wc=getwindow();
int sij, yj, xj;
string all[500];
char h[512];
int adr=address(#h[0]);
int av=my_windows(0, 0, wc.class, 0);
win w[500];
int nfg=0;
while (av!=0)
{
h[0]=formatic(0);
my_getname(av, adr, 512);
sij=size(#h[0]);
if (pr()==-1) goto ngn;
all[nfg]=format(#h[0]);
w[nfg]=formatiw(av);
nfg++;
ngn: a=my_windows(0, av, wc.class, 0);
}
if (nfg > 1) // если запущено больше 1 программы
{
messagebox("Kibor уже открыт, этот будет закрыт"); // можно убрать
my_exit(0); // закрыть программу
}
loop() // можно убрать
{
textout(0, 500, 500, "Kibor", 1);
sleep(100);
}
}

(Добавление)
Нашел ошибку в строчке:
CODE:
a=my_windows(0, av, wc.class, 0);
Все работает, но он при запуске сразу же выполняет условие:
CODE:
if (nfg > 1) // если запущено больше 1 программы
{
messagebox("Kibor уже открыт, этот будет закрыт"); // можно убрать
my_exit(0); // закрыть программу
}

(Добавление)
и закрывает запущенную программу, только одно окно открыто

Powered by ExBB FM 1.0 Final