Budni |
Отправлено: 07 Июня, 2019 - 18:43:07
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Kibor , Спасибо
Ещё ошибки появились, не верно считывает данные из ini
И при закрытии скрипта он должен сохранять новые значения в скролах но вместо этого Кибор вылетает с ошибкой. Что не так?
Код (Отобразить)
CODE:
#define WS_BORDER 8388608
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetScrollRange", "SetScrollRange", "User32.dll" );
external(INT, "SetScrollPos", "SetScrollPos", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
char str[255];
string path=pathfolder()+"setting.ini";
int i;
int b1, b2, s1[3], hText[3], hwnd;
createdialog(0);
showdialog(0, "Диалог",100, 100, 240, 290, 4, 1);
int count_scroll=3;
int min[3]={0, 0, 0}
int max[3]={200, 200, 200}
int pos[3];
for(i=0; i<count_scroll; i++)
{
SetScrollRange(s1[i],2,min[i],max[i],1);
SetScrollPos(s1[i],2,pos[i],1);
}
if(fopen(path, "r")!=0)
{
fclose();
GetPrivateProfileString ("Default", "Edit0", 0, address (#str[0]), 255, path); //pos[0]
pos[0]=formatsn(format (#str[0]));
GetPrivateProfileString ("Default", "Edit1", 0, address (#str[0]), 255, path); //pos[1]
pos[1]=formatsn(format (#str[1]));
GetPrivateProfileString ("Default", "Edit2", 0, address (#str[0]), 255, path); //pos[2]
pos[2]=formatsn(format (#str[2]));
}
dalnost();
loop()sleep(1);
function dalnost()
{
SetWindowText(hText[0], format(pos[0]));
SetWindowText(hText[1], format(pos[1]));
SetWindowText(hText[2], format(pos[2]));
}
function getmessage(0, WM_HSCROLL)
{
for(i=0; i<count_scroll; i++)
{
if (message.lparam==s1[i])
{
if (message.wparam==1 || message.wparam==3)//SB_LINERIGHT
{
pos[i]=pos[i]+10;
if (pos[i]>max[i])pos[i]=max[i];
SetScrollPos(s1[i],2,pos[i],1);
dalnost();
return;
}
if (message.wparam==0 || message.wparam==2)//SB_LINELEFT
{
pos[i]=pos[i]-10;
if (pos[i]<min[i])pos[i]=min[i];
SetScrollPos(s1[i],2,pos[i],1);
dalnost();
return;
}
///////////
if (loword(message.wparam)==5)
{
pos[i]=pos[i]-(pos[i]-hiword(message.wparam));
if (pos[i]>max[i])pos[i]=max[i];
if (pos[i]<min[i])pos[i]=min[i];
SetScrollPos(s1[i],2,pos[i],1);
dalnost();
}
}
}
}
function getmessage(0, WM_CREATE)
{
hwnd = gethwnd(0);
s1[0]=CreateWindow(0, "scrollbar", 0, WS_CHILD | WS_VISIBLE, 10, 50, 200, 20, hwnd, 0, 0, 0);
hText[0] = CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 10, 80, 100, 15, hwnd, 0, 0, 0);
s1[1]=CreateWindow(0, "scrollbar", 0, WS_CHILD | WS_VISIBLE, 10, 120, 200, 20, hwnd, 0, 0, 0);
hText[1] = CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 30, 150, 100, 15, hwnd, 0, 0, 0);
s1[2]=CreateWindow(0, "scrollbar", 0, WS_CHILD | WS_VISIBLE, 10, 200, 200, 20, hwnd, 0, 0, 0);
hText[2] = CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 30, 220, 100, 15, hwnd, 0, 0, 0);
}
function getmessage(0, WM_CLOSE)
{
WritePrivateProfileString ("Default", "Edit0", pos[0], path);
WritePrivateProfileString ("Default", "Edit1", pos[1], path);
WritePrivateProfileString ("Default", "Edit2", pos[2], path);
}
(Отредактировано автором: 07 Июня, 2019 - 18:49:42) |
|
|
Zireael |
Отправлено: 08 Июня, 2019 - 01:57:16
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: не верно считывает данные из ini
Цитата: GetPrivateProfileString ("Default", "Edit1", 0, address (#str[0]), 255, path); //pos[1]
pos[1]=formatsn(format (#str[1]));
Передаётся адрес на первый элемент массива address (#str[0]), что правильно, а получаете значение начиная со второго элемента pos[1]=formatsn(format (#str[1])), что неправильно в данном случае.
Цитата: И при закрытии скрипта он должен сохранять новые значения в скролах но вместо этого Кибор вылетает с ошибкой. Что не так?
Если вылетает, то включаете отладку и смотрите на какой строке вылет. На этой:
Цитата: WritePrivateProfileString ("Default", "Edit0", pos[0], path);
А вылет потому что pos[0] это int, а функция принимает string, нужно передавать строку, а не число, т. е. format(pos[0]).
code (Отобразить)CODE:#define WS_BORDER 8388608
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetScrollRange", "SetScrollRange", "User32.dll" );
external(INT, "SetScrollPos", "SetScrollPos", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
char str[255];
string path=pathfolder()+"setting.ini";
int i;
int b1, b2, s1[3], hText[3], hwnd;
createdialog(0);
showdialog(0, "Диалог",100, 100, 240, 290, 4, 1);
int count_scroll=3;
int min[3]={0, 0, 0}
int max[3]={200, 200, 200}
int pos[3]={0, 0, 0}
for(i=0; i<count_scroll; i++)
{
SetScrollRange(s1[i],2,min[i],max[i],1);
SetScrollPos(s1[i],2,pos[i],1);
}
if(fopen(path, "r")!=0)
{
fclose();
if(GetPrivateProfileString ("Default", "Edit0", 0, address (#str[0]), 255, path)) //pos[0]
{
pos[0]=formatsn(format (#str[0]));
SetScrollPos(s1[0],2,pos[0],1);
}
if(GetPrivateProfileString ("Default", "Edit1", 0, address (#str[0]), 255, path)) //pos[1]
{
pos[1]=formatsn(format (#str[0]));
SetScrollPos(s1[1],2,pos[1],1);
}
if(GetPrivateProfileString ("Default", "Edit2", 0, address (#str[0]), 255, path)) //pos[2]
{
pos[2]=formatsn(format (#str[0]));
SetScrollPos(s1[2],2,pos[2],1);
}
}
dalnost();
loop()sleep(1);
function dalnost()
{
SetWindowText(hText[0], format(pos[0]));
SetWindowText(hText[1], format(pos[1]));
SetWindowText(hText[2], format(pos[2]));
}
function getmessage(0, WM_HSCROLL)
{
for(i=0; i<count_scroll; i++)
{
if (message.lparam==s1[i])
{
if (message.wparam==1 || message.wparam==3)//SB_LINERIGHT
{
pos[i]=pos[i]+10;
if (pos[i]>max[i])pos[i]=max[i];
SetScrollPos(s1[i],2,pos[i],1);
dalnost();
return;
}
if (message.wparam==0 || message.wparam==2)//SB_LINELEFT
{
pos[i]=pos[i]-10;
if (pos[i]<min[i])pos[i]=min[i];
SetScrollPos(s1[i],2,pos[i],1);
dalnost();
return;
}
///////////
if (loword(message.wparam)==5)
{
pos[i]=pos[i]-(pos[i]-hiword(message.wparam));
if (pos[i]>max[i])pos[i]=max[i];
if (pos[i]<min[i])pos[i]=min[i];
SetScrollPos(s1[i],2,pos[i],1);
dalnost();
}
}
}
}
function getmessage(0, WM_CREATE)
{
hwnd = gethwnd(0);
s1[0]=CreateWindow(0, "scrollbar", 0, WS_CHILD | WS_VISIBLE, 10, 50, 200, 20, hwnd, 0, 0, 0);
hText[0] = CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 10, 80, 100, 15, hwnd, 0, 0, 0);
s1[1]=CreateWindow(0, "scrollbar", 0, WS_CHILD | WS_VISIBLE, 10, 120, 200, 20, hwnd, 0, 0, 0);
hText[1] = CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 30, 150, 100, 15, hwnd, 0, 0, 0);
s1[2]=CreateWindow(0, "scrollbar", 0, WS_CHILD | WS_VISIBLE, 10, 200, 200, 20, hwnd, 0, 0, 0);
hText[2] = CreateWindow(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 30, 220, 100, 15, hwnd, 0, 0, 0);
}
function getmessage(0, WM_CLOSE)
{
WritePrivateProfileString ("Default", "Edit0", format(pos[0]), path);
WritePrivateProfileString ("Default", "Edit1", format(pos[1]), path);
WritePrivateProfileString ("Default", "Edit2", format(pos[2]), path);
} |
|
|
Budni |
Отправлено: 08 Июня, 2019 - 10:13:38
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Всё разобрался библиотеку не подключил
(Добавление)
Как правильно использовать переменные в данном случаи?
Цитата: go(#x[2],#y[2], #x[5],#y[5]);
go(#x[1],#y[1], #x[8],#y[8]);
function go (int #x, int #y, int?, int?) {
mousedown(LEFT,x, y);
sleep(rand(30,60));
mouseup(LEFT,x, y);
sleep(500);
mousedown(LEFT,x?, y?);
sleep(rand(30,60));
mouseup(LEFT,x?, y?);
} |
|
|
Kibor |
Отправлено: 08 Июня, 2019 - 11:21:02
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
CODE:go(#x[0],#y[0], 2, 5);
go(#x[0],#y[0], 1, 8);
function go (int #x, int #y, int xy1, int xy2) {
mousedown(LEFT,x[xy1], y[xy1]);
sleep(rand(30,60));
mouseup(LEFT,x[xy1], y[xy1]);
sleep(500);
mousedown(LEFT,x[xy2], y[xy2]);
sleep(rand(30,60));
mouseup(LEFT,x[xy2], y[xy2]);
}
А в данном случае так
CODE:go(x[2],y[2], x[5],y[5]);
go(x[1],y[1], x[8],y[8]);
function go (int x1, int y1, int x2, int y2) {
mousedown(LEFT,x1, y1);
sleep(rand(30,60));
mouseup(LEFT,x1, y1);
sleep(500);
mousedown(LEFT,x2, y2);
sleep(rand(30,60));
mouseup(LEFT,x2, y2);
} |
|
|
Budni |
Отправлено: 08 Июня, 2019 - 11:41:27
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Я правильно понял логику?
К примеру если добавить ещё 1 массив с переменной то будет так?
CODE:go(#x[0],#y[0], #z[0], 2, 5, 2);
go(#x[0],#y[0], #z[0], 1, 8, 1);
function go (int #x, int #y, int#z, int xy1, int xy2, int z1) {
mousedown(LEFT,x[xy1], y[xy1]);
sleep(rand(30+z1,60+z1));
mouseup(LEFT,x[xy1], y[xy1]);
sleep(z1);
mousedown(LEFT,x[xy2], y[xy2]);
sleep(rand(30+z1,60+z1));
mouseup(LEFT,x[xy2], y[xy2]);
}
(Добавление)
Ещё вопрос как сделать чтобы данные заносились в массив в зависимости от разрешения экрана игры?
Я подумал может так? Но не получается, ошбики вылетают. И не понимаю как брать разрешение не с экрана а с игры.
int col,xek,yek;
int dis[100];
getdisplay(col, xek, yek);
if (xek)==1600&&(yek)==1200 {dis[100] = {354,435,545,545);// Тут получается dis[0] = 354 и т.д?}
if (xek)==1600&&(yek)==900 {dis[100] = {454,535,345,445);
if (xek)==1440&&(yek)==900 {dis[100] = {145,153,134,144);
// А как сделать чтобы данные заносились в глобальную переменную?
(Добавление)
CODE:int col,xek,yek;
getdisplay(col, xek, yek);
int dis[100];
if (xek)==1600&&(yek)==1200 {dis[100] = {354,435,545,545);}
if (xek)==1600&&(yek)==900 {dis[100] = {454,535,345,445);}
if (xek)==1440&&(yek)==900 {dis[100] = {145,153,134,144);}
|
|
|
Zireael |
Отправлено: 08 Июня, 2019 - 12:39:21
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: if (xek)==1600&&(yek)==1200
CODE:if (xek==1600 && yek==1200)
Цитата: А как сделать чтобы данные заносились в глобальную переменную?
Объявить переменную вначале скрипте, а не в функции. |
|
|
Budni |
Отправлено: 08 Июня, 2019 - 12:49:18
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Пишет ошибку
Цитата: int col,xek,yek;
int dis[100];
getdisplay(col, xek, yek);
if (xek==1600 && yek==1200) {dis[100] = {354,435,545,545}};
if (xek==1600 && yek==1200) {dis[100] = {454,535,345,445}};
if (xek==1600 && yek==1200) {dis[100] = {145,153,134,144}};
И как брать разрешение с контрола?(Отредактировано автором: 08 Июня, 2019 - 12:52:42) |
|
|
Zireael |
Отправлено: 08 Июня, 2019 - 13:04:35
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: dis[100] = {354,435,545,545}
Так можно при объявлении массива.
CODE:int dis[100] = {354,435,545,545} // объявили и присвоили значения
messagebox(dis[0]);
CODE:int dis[100];
getdisplay(col, xek, yek);
if (xek==1600 && yek==1200){dis[0]=354; dis[1]=435; dis[2]=545; dis[3]=545;} // присваивать значения отдельно для каждого элемента
Цитата: И как брать разрешение с контрола?
Получить указатель на окно, в структуре win есть все параметры.
CODE:win w=window (-1, "Notepad", -1); // блокнот
if(w)
{
messagebox(w.width);
messagebox(w.height);
messagebox(w.widthclient);
messagebox(w.heightclient);
}
else messagebox("Окно не найдено"); |
|
|
|