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

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

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

> Описание: работа с ini
idcco
Отправлено: 27 Марта, 2017 - 15:56:41
Post Id



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


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




Точно! Спасибо!! =)
CODE:
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
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";
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
return format (#str[0]);
}
string name = iniread ("Name");
messagebox (name);
 
 Top
007wan
Отправлено: 11 Июля, 2017 - 14:04:35
Post Id



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


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




 idcco пишет:
В общем сложности... Все прекрасно работает если не пихать в функцию. Щас поясню...
Есть файл 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
Zireael
Отправлено: 12 Ноября, 2017 - 21:50:25
Post Id



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


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




Как получить значение понятно. Можно пример как записать значение?
 
 Top
Kibor
Отправлено: 13 Ноября, 2017 - 12:58:34
Post Id



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


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




 Zireael пишет:
Как получить значение понятно. Можно пример как записать значение?

Так же само, только используя
WritePrivateProfileString

external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
 
 Top
Zireael
Отправлено: 13 Ноября, 2017 - 13:54:47
Post Id



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


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




Спасибо. Теперь понятно.
CODE:
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");
 
 Top
007wan
Отправлено: 13 Ноября, 2017 - 15:48:01
Post Id



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


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




 Zireael пишет:
Спасибо. Теперь понятно.
CODE:
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");

Всё это херня полная, можно через фопен или даже изменить типа файла на текстовый и тоже сделать через фопен
 
 Top
Kibor
Отправлено: 13 Ноября, 2017 - 16:41:30
Post Id



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


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




Если надо сохранять настройки именно для Кибор, то такой код позволяет сохранять введенные настройки и при следующем запуске их считывать.

CODE:
int n1;
int n2;

n1=formatsn(getcontrol(EDIT_0));
n2=formatsn(getcontrol(EDIT_1));

if (fopen ("C:\config.txt", "w")!=0)
{
fwrite(n1);fwrite (ENDL);
fwrite(n2);
fclose();
}

/////////////////////////////////

messagebox (n1);
messagebox (n2);




INITDIALOG
{
if (fopen ("C:\config.txt", "r")!=0)
{
fread(n1);
fread(n2);
fclose();

sendcontrol(EDIT_0, format(n1));
sendcontrol(EDIT_1, format(n2));
}
}


CREATE_INTERFACE
{
DIALOG "Название окна" 237 180 //РазмерX РазмерY
BUTTONSCRIPT "Запустить" 125 121 100 25 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_0 "Настройка первая" 10 10 120 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "5" 115 8 110 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 "Настройка вторая" 10 30 120 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_1 "25" 115 28 110 18 //ПозицияX ПозицияY РазмерX РазмерY
}
 
 Top
007wan
Отправлено: 14 Ноября, 2017 - 16:13:04
Post Id



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


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




 007wan пишет:
 Zireael пишет:
Спасибо. Теперь понятно.
CODE:
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("Default", "Name", "parametr", "C:\config.ini");

Всё это херня полная, можно через фопен или даже изменить типа файла на текстовый и тоже сделать через фопен

Я не про то, а про это...
 
 Top
grBIN
Отправлено: 02 Марта, 2019 - 03:53:03
Post Id



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


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




Парни то ли я уже засыпаю и не соображаю, то ли багуля какая-то, подскажет кто?
CODE:

external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
int wind_num = 1;


//Работает - TEST 1=1
//WritePrivateProfileString ("TEST", format(wind_num), "1", "C:\config.ini");

//Ошибка - "format1" - вместо 1
//WritePrivateProfileString ("TEST", format(wind_num), format(wind_num), "C:\config.ini");

//Ошибка - вылетает кибор, без сообщения об ошибке, в ini запись не идет.
//WritePrivateProfileString ("TEST", format(wind_num), wind_num, "C:\config.ini");


//По идее, 1 и 2 вариант - должны точно работать нормально. С 3 хз даже.
 
 Top
grBIN
Отправлено: 02 Марта, 2019 - 18:08:49
Post Id



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


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




Решил проблему временным костылем.
добавил дополнительную строковую переменную
CODE:

external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
int wind_num = 150;
string test = format(wind_num);

//Работает - TEST 1=1
//WritePrivateProfileString ("TEST", format(wind_num), "1", "C:\config.ini");

//Ошибка - "format1" - вместо 1
//WritePrivateProfileString ("TEST", format(wind_num), format(wind_num), "C:\config.ini");

//Костыль вроде работает.
//WritePrivateProfileString ("TEST", format(wind_num), test, "C:\config.ini");

 
 Top
Страниц (4): « 1 [2] 3 4 »
Сейчас эту тему просматривают: 4 (гостей: 4, зарегистрированных: 0)
« Предложения по программе »


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




Powered by