007wan |
Отправлено: 26 Ноября, 2017 - 18:31:24
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Есть код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] , то закрывал одну из программ, но закрывал так, что бы не обе закрылись, а только одна из них |
|
|
007wan |
Отправлено: 27 Ноября, 2017 - 15:44:46
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Как сделать запрет запуска 2-х программ на одном компьютере?
Ищем указатель на окно, если найден ничего не делаем (значит программа уже запущена), если не найден запускаем программу.
Ну да, я тоже так считал сначало
(Добавление)
Но как он закроет лишнюю? указатели одинаковые, как и программы, получается он закроет обе |
|
|
Zireael |
Отправлено: 28 Ноября, 2017 - 03:41:16
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Собрать в 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);
} |
|
|
007wan |
Отправлено: 28 Ноября, 2017 - 14:27:47
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Kibor пишет: У пользователя другого класс может отличаться..
Как исправить? может другая идея есть?
(Добавление)
Kibor пишет: У пользователя другого класс может отличаться..
Можно сделать указатель на окно, он выведит класс и впишет его туда |
|
|
Kibor |
Отправлено: 28 Ноября, 2017 - 16:13:46
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Немного переделал что б не вводить класс.
Он определяется по указателю на свою программу.
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);
} |
|
|
007wan |
Отправлено: 28 Ноября, 2017 - 16:45:02
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
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, потому что уже есть цикл луп и метку другое |
|
|
Kibor |
Отправлено: 28 Ноября, 2017 - 17:24:17
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
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);
}
} |
|
|
007wan |
Отправлено: 28 Ноября, 2017 - 18:14:12
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
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); // закрыть программу
}
(Добавление)
и закрывает запущенную программу, только одно окно открыто |
|
|
|