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

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

 Страниц (22): « 1 2 [3] 4 5 6 7 8 9 » В конец    

> Без описания
Kibor
Отправлено: 09 Марта, 2019 - 14:17:46
Post Id



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


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




 007wan пишет:
Возможно ли какое-нибудь создание сервера через external?

Для сервера нужна много поточность. Если это многопользовательский сервер. Ее нет в Кибор. То есть скриптом не реализовать.
 
 Top
007wan
Отправлено: 09 Марта, 2019 - 15:23:42
Post Id



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


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




Вообще все проблемы я решил, кроме одной - нужно узнать когда активна галочка, а когда нет через extenal
(Добавление)
Я смотрел в основной теме, где есть пример с галками, комбо итд, но там не через external
 
 Top
Zireael
Отправлено: 09 Марта, 2019 - 18:05:10
Post Id



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


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




 Цитата:
нужно узнать когда активна галочка, а когда нет через extenal

CODE:
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define BS_AUTOCHECKBOX 3
#define BM_GETSTATE 242

external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SendMessage", "SendMessageA", "User32.dll" );

int check1, state;

createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);

enabletimer(0);
loop()sleep(1);


function getmessage(0, WM_CREATE)
{
check1=CreateWindow(0, "BUTTON", "Галка1", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 20, 10, 70, 20, gethwnd(0), 0, 0, 0);
}

CREATE_TIMER(0, 200)
{
textbkcolor(255, 65280);
state=SendMessage(check1, BM_GETSTATE, 0, 0); // получить статус кнопки
if(state==1 || state==9)textout(0, 220, 135, "Галка включена", 1);
else textout(0, 220, 135, "Галка выключена", 1);
}

 Цитата:
Мне просто нужны источники, что бы я смог разобраться что откуда брать и что это означает. Я считаю, мало ссылок по этой теме.

Каких ссылок? В поисковике набрали нужную функцию, например, SendMessage, первая ссылка почти всегда на msdn. SendMessage function | Microsoft Docs
Всё что нужно там написано. Ну или почти всё.
 
 Top
007wan
Отправлено: 10 Марта, 2019 - 09:18:32
Post Id



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


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




CODE:
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
char str[255];
string path="*.ini"; // путь к файлу настроек


int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];

pos_size_button0[0][0]=17; pos_size_button0[0][1]=85; pos_size_button0[0][2]=140; pos_size_button0[0][3]=20;
text_button0[0]="Сохранить настройки";

int pos_size_edit0[2][4];
string text_edit0[2];

pos_size_edit0[0][0]=18; pos_size_edit0[0][1]=18; pos_size_edit0[0][2]=100; pos_size_edit0[0][3]=20;
pos_size_edit0[1][0]=18; pos_size_edit0[1][1]=50; pos_size_edit0[1][2]=100; pos_size_edit0[1][3]=20;
text_edit0[0]=""; text_edit0[1]=""; // значения по умолчанию, можно не указывать

if(fopen(path, "r")!=0) // если файл с настройками открылся, т. е. существует
{
fclose();
GetPrivateProfileString ("Default", "Edit0", 0, address (#str[0]), 255, path); // читаем значение для text_edit0[0]
text_edit0[0]=format (#str[0]);
GetPrivateProfileString ("Default", "Edit1", 0, address (#str[0]), 255, path); // читаем значение для text_edit0[1]
text_edit0[1]=format (#str[0]);
}

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
EDIT, #pos_size_edit0[0][0], #text_edit0[0]);
showdialog(0, "Диалог", 835, 390, 222, 160, 1, 1);

enabletimer(0);
loop() sleep(10);


CREATE_TIMER(0, 500)
{
if(flag_button0[0]>0) // если нажата кнопка сохранить настройки
{
flag_button0[0]=0;
WritePrivateProfileString ("Default", "Edit0", text_edit0[0], path); // записываем значение text_edit0[0]
WritePrivateProfileString ("Default", "Edit1", text_edit0[1], path); // записываем значение text_edit0[1]
}
}
Не мгу сопоставить то, что выше и это.
А
CODE:
BM_SETCHECK//Это дать состояние галки?

(Добавление)
А, кажется понял
(Добавление)
CODE:
StatusCheckbox1 = SendMessage(Checkbox1, BM_GETSTATE, 0, 0);
StatusCheckbox2 = SendMessage(Checkbox2, BM_GETSTATE, 0, 0);
StatusCheckbox3 = SendMessage(Checkbox3, BM_GETSTATE, 0, 0);

WritePrivateProfileString ("Default", "Checkbox1", StatusCheckbox1, PathSaveSettings);
WritePrivateProfileString ("Default", "Checkbox2", StatusCheckbox2, PathSaveSettings);
WritePrivateProfileString ("Default", "Checkbox3", StatusCheckbox3, PathSaveSettings);
Вылетает.
(Добавление)
Нашел ошибку:
WritePrivateProfileString ("Default", "Checkbox1", format(StatusCheckbox1), PathSaveSettings);
В каждом
(Добавление)
CODE:
#define WM_GETTEXT0x000D
Что дальше?
CODE:
Text_Edit2 = SendMessage(Edit2, WM_GETTEXT, 0, 0);
0x000D - как это почсчитать наверное надо?
(Добавление)
CODE:
BM_GETSTATE
и как это посчитать? Что бы ставить загружаемые значения галочек в галки
(Добавление)
 007wan пишет:
BM_SETSTATE
Ошибочка)
(Добавление)
Вообще у меня получилось сделать, что бы он получал данные от галочек и сохранял и получал данные от файла - все это в переменные, но не получается дать значение галочкам
(Добавление)
Явно external сложнее, чем обычные функции, но мне это нравится, я думаю скоро разберусь.
(Добавление)
Просто я уже начал писать код с external(контролы итд), ну я же не могу напрямую сделать так:
CODE:
Edit2 = CreateWindow(0, "EDIT", "Jlby ntrcn", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 270, 70, 120, 20, formatwi(SecondaryWindow), 0, 0, 0);
А потом
CODE:
Edit2 = CreateWindow(0, "EDIT", "Хоп и поменяли", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 270, 70, 120, 20, formatwi(SecondaryWindow), 0, 0, 0);
Я пробовал, он просто копирует кнопку поверх другой

(Отредактировано автором: 10 Марта, 2019 - 09:19:09)

 
 Top
Zireael
Отправлено: 10 Марта, 2019 - 10:51:28
Post Id



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


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




 Цитата:
#define WM_GETTEXT0x000D

0x000D это шестнадцатеричное значение. Нужно перевести в десятичное.
В калькуляторе, в win7 не помню как, в win10 выбрать тип калькулятора 'Программист', нажать 'hex' и ввести шестнадцатеричное число 'D', нули писать не нужно. Десятичное число dec покажет 13. Т. е. получится:
CODE:
#define WM_GETTEXT 13

 Цитата:
не получается дать значение галочкам

 Цитата:
#define BM_SETCHECK 241
// 241 это dec, в hex 0x00F1

check1=CreateWindow(...)
SendMessage(check1, BM_SETCHECK, 0, 0); // убрать галку
SendMessage(check1, BM_SETCHECK, 1, 0); // поставить галку

 Цитата:
он просто копирует кнопку поверх другой

Естественно, функция так и называется CreateWindow, создать окно. Каждый вызов будет создавать ещё одно окно.
 
 Top
007wan
Отправлено: 10 Марта, 2019 - 11:14:12
Post Id



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


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




Zireael , Спасибо. С калькулятором разобрался. А
CODE:
SendMessage(Checkbox1, BM_SETCHECK, Тута, 0);
Поддержимает переменные? Я пробовал
CODE:
SendMessage(Checkbox1, BM_SETCHECK, LoadCheckbox1, 0);

SendMessage(Checkbox1, BM_SETCHECK, format(LoadCheckbox1), 0);
CODE:
SendMessage(Checkbox1, BM_SETCHECK, format(#LoadCheckbox1[0]), 0);

И всегда пишет либо 0 либо 1, но я то проверял файл там нули стоят и изменял даже(закрывал диалог и он сам вписывал, разумеется и ставил галочки под 1)
CODE:
SendMessage(Checkbox1, BM_SETCHECK, format(LoadCheckbox1), 0);

(Добавление)
тоже никак
(Добавление)
Тоесть получается
CODE:
//Text_Edit2 = SendMessage(Edit2, WM_GETTEXT, 0, 0);
Записываем
CODE:
//WritePrivateProfileString ("Default", "Edit1", Text_Edit2, PathSaveSettings);
Сохраняем
CODE:
//GetPrivateProfileString ("Default", "Checkbox2", 0, address(#LoadCheckbox3[0]), 255, PathSaveSettings);
Загружаем?
(Добавление)
Значение для галочки int, а для Эдита string и выдает ошибку string[0] = 0что-то такое...
(Добавление)
CODE:
SendMessage(Checkbox1, BM_SETCHECK, format(LoadCheckbox1), 0);

Это яч поместил после создания диалог и после объявления переменных для кноппок

CODE:
Int button;
Button = create....;
createdialog;
shodialog

(Отредактировано автором: 10 Марта, 2019 - 11:14:54)

 
 Top
Zireael
Отправлено: 10 Марта, 2019 - 11:57:46
Post Id



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


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




 Цитата:
SendMessage(Checkbox1, BM_SETCHECK, format(#LoadCheckbox1[0]), 0);

Функции SendMessage принимает числа в качестве параметров, а format(#LoadCheckbox1[0]) это строка. Т. е. нужно её преобразовать в число функцией formatsn.
CODE:
SendMessage(Checkbox1, BM_SETCHECK, formatsn(format(#LoadCheckbox1[0])), 0);

 Цитата:
Тоесть получается
//Text_Edit2 = SendMessage(Edit2, WM_GETTEXT, 0, 0);

Смотрим описание сообщения https://docs.microsoft.com/en-us...inmsg/wm-gettext.
 Цитата:
wParam
Максимальное число копируемых символов, включая завершающий символ null.
lParam
Указатель на буфер, который должен получить текст.

Т. е. надо передать размер массива, в который запишется имя окна и указатель на массив.
CODE:
char buffer[255];
SendMessage(Edit2, WM_GETTEXT, sizearray(buffer), address(#buffer[0]));
messagebox(format(#buffer[0]));

Или можно использовать функцию GetWindowTextA
 Цитата:
Значение для галочки int, а для Эдита string и выдает ошибку string[0] = 0что-то такое...

Разберитесь с типами данных и функциями format и formatsn.
CODE:
int a=10; // это число
string b="20";// это строка
// format(a) // это строка
// formatsn(b) // это число

//messagebox(a+b); // так будет ошибка, потому что нельзя к числу прибавить строку
messagebox(a+formatsn(b)); // нужно так
 
 Top
007wan
Отправлено: 10 Марта, 2019 - 12:31:48
Post Id



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


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




Последний вопрос:
CODE:
SendMessage(Edit2, WM_GETTEXT, sizearray(Text_Edit2), address(#buffer[0]));

А для Эдита буфер нужен, а если для галчоки тоже так сойдет?
CODE:
StatusCheckbox3 = SendMessage(Checkbox3, BM_GETSTATE, 0, 0);

(Добавление)
CODE:
SendMessage(Checkbox3, BM_GETSTATE, sizearray(StatusCheckbox3), address(#StatusCheckbox3[0]));
SendMessage(Edit2, WM_GETTEXT, sizearray(Text_Edit2), address(#Text_Edit2[0]));
Вот так
 
 Top
Zireael
Отправлено: 10 Марта, 2019 - 13:07:58
Post Id



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


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




BM_GETSTATE message тут всё написано.
 Цитата:
wParam
Не используется; должно быть ноль.
lParam
Не используется; должно быть ноль.

Так зачем передавать wParam и lParam отличные от 0.
 Цитата:
SendMessage(Checkbox3, BM_GETSTATE, sizearray(StatusCheckbox3), address(#StatusCheckbox3[0]));

К тому же, выше есть пример как получить статус кнопки.
 
 Top
007wan
Отправлено: 10 Марта, 2019 - 13:14:30
Post Id



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


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




Zireael , Ну это я так. Для красоты, думал, что
CODE:
StatusCheckbox1 = SendMessage(Checkbox1, BM_GETSTATE, 0, 0);
StatusCheckbox2 = SendMessage(Checkbox2, BM_GETSTATE, 0, 0);
StatusCheckbox3 = SendMessage(Checkbox3, BM_GETSTATE, 0, 0);
SendMessage(Edit2, WM_GETTEXT, sizearray(Text_Edit2), address(#Text_Edit2[0]));
Не очень.
CODE:
SendMessage(Checkbox1, BM_GETSTATE, 0, 0);
SendMessage(Checkbox2, BM_GETSTATE, 0, 0);
SendMessage(Checkbox3, BM_GETSTATE, 0, 0);
SendMessage(Edit2, WM_GETTEXT, sizearray(Text_Edit2), address(#Text_Edit2[0]));
Так улчше))))
 
 Top
Страниц (22): « 1 2 [3] 4 5 6 7 8 9 » В конец
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by