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

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

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

> Описание: работа с ini
Prusak
Отправлено: 31 Мая, 2014 - 18:49:07
Post Id



Пользователь
Наблюдатель


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




Владимир было бы не плохо научить кибор работать с ini, что-то типо
INI(секция, ключ, значение_ключа, флаг_чтение_запись).
собераюсь в скрипт ввести графическую оболочку,и тут встал вопрос как хранить данные введенные с контролов.попытался реализовать средствами кибора получилось такое
PHP:
string put_p;
char b=' ';
string inp;
//проверяем записаны данные или нет
if (fopen ("c:\config.txt", "r")!=0)
{
l1:if (fread(put_p)!=0)
{
if (formatsn (put_p)==01){fread(put_p);put=put_p;}
goto l1;
}
fclose();
}
//записываем
inp=input ();
if (fopen ("c:\config.txt", "a")!=0)
{
fwrite("01");fwrite(b);fwrite(inp);
fwrite(ENDL);
fclose();
}

где "01" чтото типо ключа, но каждое обращение к fread приводит к чтению.ключ с одним значением выше упомянутый скрипт читает,а вот если потребуется записать сразу два значения, например клавиша бафа на себя через альт.
if (formatsn (put_p)==01){fread(put_p);put=put_p;} вот тут станет проблема.
 
 Top
Kibor
Отправлено: 31 Мая, 2014 - 22:23:51
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Работать с файлом настроек надо таким образом

 Цитата:
int i1=0, i2=1, i3=2;

i1=formatsn(getcontrol(EDIT_0));
i2=formatsn(getcontrol(EDIT_1));
i3=formatsn(getcontrol(EDIT_2));



if (fopen ("C:\Настройка.txt", "w")!=0)//открываем файл
{//если открылся
fwrite(i1); fwrite(" ");
fwrite(i2); fwrite(" ");
fwrite(i3); fwrite(" ");
fclose();//закрываем файл
}







INITDIALOG
{
if (fopen ("C:\Настройка.txt", "r")!=0)//открываем файл для чтения "r"
{//если открылся
fread(i1);
fread(i2);
fread(i3);
fclose();//закрываем файл

sendcontrol(EDIT_0, format(i1));
sendcontrol(EDIT_1, format(i2));
sendcontrol(EDIT_2, format(i3));
}

}



CREATE_INTERFACE
{
DIALOG "Название окна" 237 180 //РазмерX РазмерY
BUTTONSCRIPT "Запустить" 125 121 100 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......
STATIC_0 "текст 1" 10 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "0" 105 8 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 "текст 2" 10 30 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_1 "1" 105 28 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_2 "текст 3" 10 50 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_2 "2" 105 48 120 18 //ПозицияX ПозицияY РазмерX РазмерY
}
 
 Top
AaronSelenger
Отправлено: 23 Января, 2017 - 21:13:40
Post Id



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


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




 Kibor пишет:
Работать с файлом настроек надо таким образом

 Цитата:
int i1=0, i2=1, i3=2;

i1=formatsn(getcontrol(EDIT_0));
i2=formatsn(getcontrol(EDIT_1));
i3=formatsn(getcontrol(EDIT_2));



if (fopen ("C:\Настройка.txt", "w"Подмигивание!=0)//открываем файл
{//если открылся
fwrite(i1); fwrite(" "Подмигивание;
fwrite(i2); fwrite(" "Подмигивание;
fwrite(i3); fwrite(" "Подмигивание;
fclose();//закрываем файл
}







INITDIALOG
{
if (fopen ("C:\Настройка.txt", "r"Подмигивание!=0)//открываем файл для чтения "r"
{//если открылся
fread(i1);
fread(i2);
fread(i3);
fclose();//закрываем файл

sendcontrol(EDIT_0, format(i1));
sendcontrol(EDIT_1, format(i2));
sendcontrol(EDIT_2, format(i3));
}

}



CREATE_INTERFACE
{
DIALOG "Название окна" 237 180 //РазмерX РазмерY
BUTTONSCRIPT "Запустить" 125 121 100 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......
STATIC_0 "текст 1" 10 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "0" 105 8 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 "текст 2" 10 30 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_1 "1" 105 28 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_2 "текст 3" 10 50 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_2 "2" 105 48 120 18 //ПозицияX ПозицияY РазмерX РазмерY
}

А почему не учитывается то, что кибор например могут синхронизировать с другими программами. Ini было бы уместно в таком случаи.
 
 Top
Kibor
Отправлено: 23 Января, 2017 - 21:41:13
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




В чем проблема?
Пишите что надо.
Где вы вообще видели в языке программирования готовый модуль ini?
Какой такой ini шмини. Все зависит от требований самой готовой программы.
Есть язык. возможности. пишите.
 
 Top
Nightshade2
Отправлено: 23 Января, 2017 - 22:34:53
Post Id



Пользователь
Наблюдатель


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




ini удобен и поддерживается кучей других програм.
А так приходится костыли городить.
 
 Top
idcco
Отправлено: 26 Марта, 2017 - 14:53:16
Post Id



Пользователь
Участник


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




 Nightshade2 пишет:
ini удобен и поддерживается кучей других програм.

Вообще согласен с автором. Тоже сталкнулся с данной проблемой. Это реализовано во многих программах (редакторы ide, конвертеры всякие, даже гребаный кликерманн имеет оператор iniread и iniwrite), и действительно очень удобно обращаться к одним и тем же настройкам из разных продуктов, жаль нет такой возможности в Киборе и приходится изобретать велосипед... Гугл помог вот информацией с библиотекой kernel32.ini в которой есть такие штуки как GetPrivateProfileString и WritePrivateProfileString. Но воспользоваться ими у меня так и не получилось. Пробовал так:
PHP:
string str;
external (INT, "readini", "GetPrivateProfileStringA", "kernel32.dll");
readini ("Section", "Key", "", str, 255, "config.ini");

Значение str получается пустым. Не подскажете, где я ошибся?
 
 Top
Kibor
Отправлено: 26 Марта, 2017 - 17:04:36
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




idcco ,
CODE:
char stroka[255];
external (INT, "readini", "GetPrivateProfileStringA", "kernel32.dll");
readini ("Section", "Key", 0, address(#stroka[0]), 255, "C:\config.ini");
messagebox (format(#stroka[0]));
 
 Top
idcco
Отправлено: 26 Марта, 2017 - 19:24:28
Post Id



Пользователь
Участник


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




Отлично! Спасибо большое!!! Забыл про тип
 
 Top
idcco
Отправлено: 27 Марта, 2017 - 13:31:27
Post Id



Пользователь
Участник


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




В общем сложности... Все прекрасно работает если не пихать в функцию. Щас поясню...
Есть файл config.ini на диске C:\ (С:\config.ini) со следующим листингом:
CODE:
[Default]
Name=Bot

Если использовать такой код:
CODE:
char str[255];
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString ("Default", "Name", 0, address (#str[0]), 255, "C:\config.ini");
string name = format (#str[0]);
messagebox (name);

то в переменной name получается верное значение - "Bot". Оно и выводится сообщением messagebox.

Но если запихнуть все это в функцию и вызвать ее:
CODE:
function iniread (string ini_key, string ini_section, string ini_filename)
{
char str[255];
if (ini_section == "") ini_section = "Default";
if (ini_filename == "") ini_filename = "C:\config.ini";
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
return (format (#str[0]));
}
string name = iniread ("Name");
messagebox (name);

то в результате name имеет пустое знеачение. Где я ошибся?
(Добавление)
Блин я как всегда!
Надо выводить return'ом переменную. Отбой паники! Простите, был напуган =D
Вот верный код:
CODE:
function iniread (string ini_key, string ini_section, string ini_filename)
{
char str[255];
if (ini_section == "") ini_section = "Default";
if (ini_filename == "") ini_filename = "C:\config.ini";
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
string str_return = format (#str[0]);
return str_return;
}
string name = iniread ("Name");
messagebox (name);
 
 Top
Kibor
Отправлено: 27 Марта, 2017 - 14:04:42
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




return format (#str[0]);

скобки не требует
и
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
не стоит вызывать в функции .
один раз в начале.
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Предложения по программе »


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




Powered by