Zireael |
Отправлено: 18 Мая, 2019 - 21:33:26
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Когда жмем кнопку "Запустить":
В лог пишется любой текст такого формата:
"[19:18:56] - Запущен".
И тут же записывает этот текст в файл таким образом:
[18.05.2019]
19:18:56=Запущен
code (Отобразить)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" );
external(INT, "SendMessage", "SendMessageA", "User32.dll" );
string date = "18.05.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];
int a = 0;
string temp_fold = tempfolder();
string path_fold = pathfolder();
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()
{
sleep(10);
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b1)add_list("Бот запущен.");
}
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);
}
function add_list(string s)
{
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);
string Text = s;
s="["+format(#Time[0])+"] - "+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));
WritePrivateProfileString (date, format(#Time[0]), Text, temp_fold+"K2019Bot_Log.ini");
delete c;
}
(Добавление)
Цитата: Как вернуть прежний шрифт?
Object_Font1 = CreateFont(-13, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, "Times New Roman" );//создаем
SendMessage(Object_Combobox1, WM_SETFONT, Object_Font1, 1);//посылаем
CODE:SendMessage(Object_Combobox1, WM_SETFONT, 0, 1); // установит шрифт по умолчанию |
|
|
007wan |
Отправлено: 19 Мая, 2019 - 09:57:14
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , А что делать, если вписалось в лог скажем в одно и тоже время разный текст и отобразил его в логе, но в файл только лишь заменился на последний.
Пример:
В лог пишет:
Цитата:
[19.05.2019]
[09:46:42] - Бот запущен.
[09:46:42] - Бот остановлен.
В файл:
Цитата:
[19.05.2019]
//09:46:42=Бот запущен. Будет отсутствовать, т.к текст был заменен для этого ключа
09:46:42=Бот остановлен.
Как решить? Мне на ум приходит только то, что можно добавить еще одно время- миллисекунды, но всеравно может и произойти таккая еж ошибка, если за одно тоже время вввести текст, то он в файл заменит ключ
(Добавление)
Спасибо
(Добавление)
Я это пишу, если не найдется другого решения...(Отредактировано автором: 19 Мая, 2019 - 09:58:47) |
|
|
007wan |
Отправлено: 19 Мая, 2019 - 10:28:45
|
Эксперт
Покинул форум
Сообщений всего: 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
#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" );
external(INT, "SendMessage", "SendMessageA", "User32.dll" );
string date = "19.05.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];
int a = 0;
string temp_fold = tempfolder();
string path_fold = pathfolder();
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()
{
sleep(10);
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b1)add_list("Бот запущен.", 1);
}
//s="["+format(#Time[0])+"] - "+s;
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 save)
{
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);
string Text = 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));
if (save == 1)
{
WritePrivateProfileString (date, format(#Time[0]), Text, temp_fold+"K2019Bot_Log.ini");
}
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)
{
add_list("["+date+"]", 0);
length=0;
for(int i=0; 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]), 0);
}
length=length+size(#key_ini[length])+1;
}
}
else
{
messagebox("секция даты не найдена");
WritePrivateProfileString(date, "", "", path);
ini_read();
}
}
else
{
messagebox("файл не найден");
messagebox("секция даты не найдена");
WritePrivateProfileString(date, "", "", path);
ini_read();
}
}
Почему в список пишется просто текст, а в файл то, что нужно?
В список должно быть писаться "[время] - Текст", а пишет только текст. добавил переменную save, что бы при загрузке из файла текста, он вызывает add_list, а там в это функции он сохраняет, поэтому я добавил, что бы при загрузке из файла не сохранял его в файл.
(Добавление)
Zireael пишет: Это не ошибка, в ini не может быть одинаковых ключей, поэтому значения перезаписываются.
С миллисекундами вполне реально. Но если не устроит, то записывать всё в txt. Устроит, если интервал между выполнениями функциями add_list и add_list будет хотя бы 1-2 миллисекунды, то хорошо(разные ключи будут), а если они выполнятся в одно время(за одну и ту же миллисекунду, то не хорошо). Не ставя при этом sleep
(Добавление)
Вообще может как-то переделать этот скрипт? А то принцип действия хороший, но корявый, т.к сохранение в файл+загрузка из файла и запись в лог всё слеплено в кучу. Если я бы не поставил переменную save, то когда он грузил бы из файла текст в список, то вызывал бы add-List, а там в свою очередь - сохранение в файл и был бы круговорот.
(Добавление)
НАдо как-то просто разделить:
Запись в лог из файла | запись в лог при нажатии кнопки или вызове функции add_list | сохранение в файл |
|
|
Zireael |
Отправлено: 19 Мая, 2019 - 10:57:36
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Почему в список пишется просто текст
В функцию передаётся строка s, потом она копируется в массив strcpy(#c[0], s); и из массива добавляется в список. Что скопировано в массив, то и пишет.
Цитата: может как-то переделать этот скрипт?
НАдо как-то просто разделить:
Запись в лог из файла | запись в лог при нажатии кнопки или вызове функции add_list | сохранение в файл
Разные действия - разные кнопки. |
|
|
007wan |
Отправлено: 19 Мая, 2019 - 11:31:55
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Вообще получилось сделать как я ожидал , но все-таки проблемы с ключами. Как добавить микросекунды? и еще отфильтровать текст таким образом: в файл где ключ пишет часты, минуты,секунды, микросекунды, а в список будет писать только часы, минуты.
(Добавление)
Код (Отобразить)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" );
external(INT, "SendMessage", "SendMessageA", "User32.dll" );
string date = "19.05.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];
int a = 0;
string temp_fold = tempfolder();
string path_fold = pathfolder();
//-----------------------------------------------------------------------------------------------------------------------------------------------------
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
//-----------------------------------------------------------------------------------------------------------------------------------------------------
loop()
{
sleep(10);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function getmessage(0, WM_COMMAND)
{
if (message.lparam == b1)
{
add_list("Бот запущен.", 1, 1);
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
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 save, int choose)
{
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);
string Text = s;
if (choose == 1)
{
s="["+format(#Time[0])+"] - "+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));
if (save == 1)//если нужно сохранить в файл.
{
WritePrivateProfileString (date, format(#Time[0]), Text, temp_fold+"K2019Bot_Log.ini");
}
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+"]", 0, 0);
length=0;
for(int i=0; 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]), 0, 0);
}
length=length+size(#key_ini[length])+1;
}
}
else
{
messagebox("секция даты не найдена");
WritePrivateProfileString(date, "", "", path);
ini_read();
}
}
else
{
//если файл не найден.
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
(Добавление)
Добавил переменную choose, она нужна для того, что бы получать флаг о том, что: нужно ли изменять текст или нет? это дает возможность изменить текст, вызыванный функцией add_list, но не во всех случаях, а только в тех случаях, когда она вызывается надобно, а не тогда, когда в список загружается текст из файла. Так же и переменная save. нужно. что бы сохранять в файл текст. Ведь когда мы грузим из файла текст в список, нужно ему запрещать его сохранять, т.к он вызывает add_list при ini_read |
|
|
Zireael |
Отправлено: 19 Мая, 2019 - 11:49:11
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как добавить микросекунды?
getlocaltime переменная Milliseconds.
Цитата: и еще отфильтровать текст таким образом: в файл где ключ пишет часты, минуты,секунды, микросекунды, а в список будет писать только часы, минуты.
CODE:string s="21:31:57:562"; // строка
regexreplace(1, #s, s, ":\d+", "", RIGHTTOLEFT); // удалить из конца строки : и цифры
messagebox(s); |
|
|
007wan |
Отправлено: 19 Мая, 2019 - 11:52:10
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Нет. Я имел ввиду "микросекунды", т.е еще меньше, чем Мили
(Добавление)
А, не не надо, чет я далеко зашел)
(Добавление)
Zireael пишет: string s="21:31:57:562"; // строка
regexreplace(1, #s, s, ":\d+", "", RIGHTTOLEFT); // удалить из конца строки : и цифры
messagebox(s); Не понимаю куда этот кусок вставить вообще запутался))
(Добавление)
В чем ошибка:
CODE:if(GetPrivateProfileString (date, format(#key_ini[length]), 0, address (#value[0]), sizearray(value), path))
{
regexreplace(1, #key_ini[length], key_ini[length], ":\d+", "", RIGHTTOLEFT);
messagebox(format(#key_ini[length]));
add_list(+"["+format(#key_ini[length])+"] - "+format(#value[0]), 0, 0);
} ? |
|
|
Zireael |
Отправлено: 19 Мая, 2019 - 12:33:30
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: В чем ошибка:
CODE:string s=format(#key_ini[length]);
regexreplace(1, #s, s, ":\d+", "", RIGHTTOLEFT);
messagebox(s); |
|
|
007wan |
Отправлено: 19 Мая, 2019 - 12:39:25
|
Эксперт
Покинул форум
Сообщений всего: 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
#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" );
external(INT, "SendMessage", "SendMessageA", "User32.dll" );
string date = "19.05.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];
int a = 0;
string temp_fold = tempfolder();
string path_fold = pathfolder();
//-----------------------------------------------------------------------------------------------------------------------------------------------------
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
//-----------------------------------------------------------------------------------------------------------------------------------------------------
loop()
{
sleep(10);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
function getmessage(0, WM_COMMAND)
{
if (message.lparam == b1)
{
add_list("Бот запущен.", 1, 1);
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
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 save, int choose)
{
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);
string Text = s;
if (choose == 1)
{
s="["+format(#Time[0])+"] - "+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));
if (save == 1)//если нужно сохранить в файл.
{
WritePrivateProfileString (date, format(#Time[0])+":"+format(Milliseconds), Text, temp_fold+"K2019Bot_Log.ini");
}
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+"]", 0, 0);
length=0;
for(int i=0; length<=x; i++)
{
if(GetPrivateProfileString (date, format(#key_ini[length]), 0, address (#value[0]), sizearray(value), path))
{
string s=format(#key_ini[length]);
regexreplace(1, #s, s, ":\d+", "", RIGHTTOLEFT);
add_list(+"["+s+"] - "+format(#value[0]), 0, 0);
}
length=length+size(#key_ini[length])+1;
}
}
else
{
messagebox("секция даты не найдена");
WritePrivateProfileString(date, "", "", path);
ini_read();
}
}
else
{
//если файл не найден.
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------
(Добавление)
Zireael , Спасибо.
(Добавление)
Теперь в файл грузит миллисекунды, что бы не перезаписывались ключи. Класс))
(Добавление)
Zireael , Спасибо еще раз. |
|
|
|