007wan |
Отправлено: 22 Апреля, 2019 - 15:29:00
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
В чём проблема? в файл грузит "ННННН..." . Какие еще есть рекомендациикод (Отобразить)CODE://-----------------------------------------------------------------------------------------------------------------------------------------------------
#define LBS_NOSEL 16384
#define WS_BORDER 8388608
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define LBS_DISABLENOSCROLL 4096
#define LB_SETHORIZONTALEXTENT 404
#define LB_ADDSTRING 384
#define LB_GETCOUNT 395
#define LB_GETTEXT 393
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external(INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
external(INT, "Strftime", "Strftime", pathfolder()+"Time.dll" );
string date = "22.04.2019";
string path = "C:\Users\Home\AppData\Local\Temp\K2019Bot_Log.txt";
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
int list, b1, hdc, max_length = 0;
char Time[100];
char Date[100];
char Text_Listbox1[255];
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
//-----------------------------------------------------------------------------------------------------------------------------------------------------
loop()
{
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
Strftime(address(#Time[0]), sizearray(Time), "%X", Hour, Minute, Second, Day, Month, Year);
Strftime(address(#Date[0]), sizearray(Date), "%d.%m.%y", Hour, Minute, Second, Day, Month, Year);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b1)
{
int count;
count = sendmessage(LB_GETCOUNT, 0, 0, formatiw(list));
add_list("["+format(#Time[0])+"] - Бот запущен.");
SendMessage(Object_Listbox1, LB_GETTEXT, count-1, address(#Text_Listbox1[0]));
WritePrivateProfileString (date, format(#Time[0])+" ", format(#Text_Listbox1[0]), path);
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function getmessage(0, WM_CREATE)
{
list = CreateWindow(0, "LISTBOX", "", LBS_NOSEL | WS_BORDER | WS_HSCROLL | WS_VSCROLL | LBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE, 10, 10, 200, 200, gethwnd(0), 0, 0, 0);
b1=CreateWindow(0, "BUTTON", "Запустить", WS_CHILD | WS_VISIBLE, 10, 220, 120, 30, gethwnd(0), 0, 0, 0);
hdc=GetDC(list);
ini_read();
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function add_list(string s)
{
int SIZE[2];
new char c[size(s)+1];
strcpy(#c[0], s);
GetTextExtentPoint32(hdc, address(#c[0]), sizearray(c), address(#SIZE[0]));
if(max_length<SIZE[0])
{
max_length=SIZE[0];
sendmessage(LB_SETHORIZONTALEXTENT, SIZE[0], 0, formatiw(list));
}
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
delete c;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function ini_read()
{
int length;
char key_ini[99999], value[999];
if(fopen(path, "rb"))
{
fclose();
int x=GetPrivateProfileString (date, 0, 0, address (#key_ini[0]), sizearray(key_ini), path);
if(x)
{
add_list("["+date+"]");
length=0;
for(int i=0; i+length<=x; i++)
{
if(GetPrivateProfileString (date, format(#key_ini[length]), 0, address (#value[0]), sizearray(value), path))
{
add_list(+"["+format(#key_ini[length])+"] - "+format(#value[0]));
}
length=length+size(#key_ini[i])+i+1;
}
}
else
{
messagebox("Секция "+date+" в файле "+path+" не найдена");
add_list("["+date+"]");
}
}
else
{
messagebox("Файл: "+path+" не найден");
add_list("[!]Файл отсутствует.");
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
(Добавление)
Как еще сделать пустую секцию? Пробовал в поля ставить "", но он создает секцию и ключ "=", а мне надо пустую.(Отредактировано автором: 22 Апреля, 2019 - 15:40:07) |
|
|
Zireael |
Отправлено: 23 Апреля, 2019 - 01:49:47
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: .txt
Файл должен быть ini.
Цитата: Как еще сделать пустую секцию?
Никак.
Если в файле будут две пустые секции, то какую из них должна вернуть функция. |
|
|
007wan |
Отправлено: 23 Апреля, 2019 - 14:50:01
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Хорошо, а секция считается пустой, если в ней нету ключей, а есть только комментарий?
(Добавление)
И как создать этот комментарий программно? Я пока знаю, что в файле он выглядит так:
Цитата: [Section 1]
;Сomment
Key=String
(Добавление)
Пробовал всякие вариации типа этого, что приводило к вылету.
CODE:WritePrivateProfileString(date, ";", "txt comm", path); (Отредактировано автором: 23 Апреля, 2019 - 14:53:17) |
|
|
007wan |
Отправлено: 23 Апреля, 2019 - 15:07:07
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
А еще. самое главное - как прочитать этот комментарий и возможно ли сделать некий массив комментариев? Тоесть^ комментарий1[0],комментарий2[1],комментарий2[2] и читать любой из них
(Добавление)
А, спасибо. значит вопрос отпал...
(Добавление)
В файл записывает "HHHHH..." вместо текстаКод (Отобразить)CODE://-----------------------------------------------------------------------------------------------------------------------------------------------------
#define LBS_NOSEL 16384
#define WS_BORDER 8388608
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define LBS_DISABLENOSCROLL 4096
#define LB_SETHORIZONTALEXTENT 404
#define LB_ADDSTRING 384
#define LB_GETCOUNT 395
#define LB_GETTEXT 393
#define LB_DELETESTRING 386
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external(INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
external(INT, "Strftime", "Strftime", pathfolder()+"Time.dll" );
string date = "22.04.2019";
string path = "C:\Users\Home\AppData\Local\Temp\K2019Bot_Log.ini";
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
int list, b1, hdc, max_length = 0;
char Time[100];
char Date[100];
char Text_Listbox1[255];
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
//-----------------------------------------------------------------------------------------------------------------------------------------------------
loop()
{
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
Strftime(address(#Time[0]), sizearray(Time), "%X", Hour, Minute, Second, Day, Month, Year);
Strftime(address(#Date[0]), sizearray(Date), "%d.%m.%y", Hour, Minute, Second, Day, Month, Year);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b1)
{
int count;
add_list("["+format(#Time[0])+"] - Бот запущен.");
count = sendmessage(LB_GETCOUNT, 0, 0, formatiw(list));
SendMessage(list, LB_GETTEXT, count, address(#Text_Listbox1[0]));
messagebox(format(#Text_Listbox1[0]));
WritePrivateProfileString(date, format(#Time[0]), format(#Text_Listbox1[0]), path);
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function getmessage(0, WM_CREATE)
{
list = CreateWindow(0, "LISTBOX", "", LBS_NOSEL | WS_BORDER | WS_HSCROLL | WS_VSCROLL | LBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE, 10, 10, 200, 200, gethwnd(0), 0, 0, 0);
b1=CreateWindow(0, "BUTTON", "Запустить", WS_CHILD | WS_VISIBLE, 10, 220, 120, 30, gethwnd(0), 0, 0, 0);
hdc=GetDC(list);
ini_read();
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function add_list(string s)
{
int SIZE[2];
new char c[size(s)+1];
strcpy(#c[0], s);
GetTextExtentPoint32(hdc, address(#c[0]), sizearray(c), address(#SIZE[0]));
if(max_length<SIZE[0])
{
max_length=SIZE[0];
sendmessage(LB_SETHORIZONTALEXTENT, SIZE[0], 0, formatiw(list));
}
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
delete c;
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function ini_read()
{
int length;
char key_ini[99999], value[999];
if(fopen(path, "rb"))
{
fclose();
//add_list("["+date+"]");
int x = GetPrivateProfileString (date, 0, 0, address (#key_ini[0]), sizearray(key_ini), path);
if(x)
{
length=0;
for(int i=0; i+length<=x; i++)
{
if(GetPrivateProfileString (date, format(#key_ini[length]), 0, address (#value[0]), sizearray(value), path))
{
add_list(+"["+format(#key_ini[length])+"] - "+format(#value[0]));
}
length = length+size(#key_ini[i])+i+1;
}
}
else
{
messagebox("секция даты не найдена");
WritePrivateProfileString(date, "", "", path);
ini_read();
}
}
else
{
messagebox("файл не найден");
fopen(path, "w");
{
fclose();
}
ini_read();
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
(Добавление)
Как использовать LD_DIR и LB_INITSTORAGE,а так же LB_ADDFILE? |
|
|
Zireael |
Отправлено: 24 Апреля, 2019 - 03:20:32
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: В файл записывает "HHHHH..." вместо текста
Цитата: fopen(path, "w" );
{
fclose();
}
Что это?
Цитата: ini_read();
И зачем вызывать функцию рекурсивно?
Цитата: Как использовать LD_DIR и LB_INITSTORAGE,а так же LB_ADDFILE?
Добавить в список имена exe файлов C:\Windows (Отобразить)#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define WS_VSCROLL 2097152
#define LB_DIR 397
#define DDL_READWRITE 0
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int list;
char path[999];
strcpy(#path[0], "C:\Windows\*.exe" ); // по поводу * читать про 'Подстановочные знаки'
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", WS_VSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 250, 250, gethwnd(0), 0, 0, 0);
sendmessage(LB_DIR, DDL_READWRITE, address(#path[0]), formatiw(list));
} (Отредактировано автором: 24 Апреля, 2019 - 03:34:54) |
|
|
007wan |
Отправлено: 24 Апреля, 2019 - 14:32:35
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Нужно, что бы создать пустой файл, когда он отсутсвует полностью Zireael пишет: fopen(path, "w" );
{
fclose();
}
007wan пишет: Что это?
Цитата:
ini_read();
И зачем вызывать функцию рекурсивно?
Задумка такая: Если файл не найден, создать пустой вызываю функцию ини рид, она теперь не будет писать, что файла нету, а выполнит условие, где не найдена дата, т.к мы создали пустой файл, а что она выполнит: создаст новую дат(ключ) и спишет в файл, а дальше снова прокрутит функцию ини рид и уже загрузит пустой ключ(дату) из файла с данными в список, а кнопка для чего спрашивается? что бы вписать в файл любые значения с текущей датой и верменем,
(Добавление)
Вообщем, я думаю функция у меня некорректна. Прошу исправить.
Задумка такая: открывает файл, если файла найден, то ищем все значения даты и если нашел, то загрузить все значения даты и времени(как сейчас), а если дата не найдена, то создать дату в файле(секцию), а если файл не найден, то создать пустой. (КОД ВЫШЕ) |
|
|
Zireael |
Отправлено: 25 Апреля, 2019 - 03:17:41
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: count = sendmessage(LB_GETCOUNT, 0, 0, formatiw(list));
SendMessage(list, LB_GETTEXT, count, address(#Text_Listbox1[0]));
А подключать библиотеку с функцией кто будет.
CODE:external(INT, "SendMessage", "SendMessageA", "User32.dll" );
LB_GETCOUNT возвращает количество, но индексация начинается с 0, т. е. количество - 1, чтобы получить текст последней строки.
CODE:count = sendmessage(LB_GETCOUNT, 0, 0, formatiw(list));
if(count)sendmessage(LB_GETTEXT, count-1, address(#Text_Listbox1[0]), formatiw(list)); |
|
|
|