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

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

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

> Описание: Продолжение
Kibor
Отправлено: 14 Марта, 2021 - 15:13:00
Post Id



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


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




Доработка gethwnd

CODE:
gethwnd();

Без параметра. Возвращает HWND главного окна.
 
 Top
Zireael
Отправлено: 04 Мая, 2021 - 19:24:37
Post Id



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


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




Перетаскивание файлов на диалоговое окно (Отобразить)

Если не обрабатывает сообщение WM_DROPFILES, то запустить кибор без прав администратора.
 
 Top
Kibor
Отправлено: 04 Мая, 2021 - 22:04:26
Post Id



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


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




Надо и в Киборе такую ерунду сделать. И для вкладки Графика.
 
 Top
Gormit
Отправлено: 16 Декабря, 2021 - 22:39:22
Post Id



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


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




Не могу разобраться, взял с прошлой темы пример создания combobox и отлавливание изменений
CODE:
#define CB_ADDSTRING 323
#define CB_DELETESTRING 324
#define CB_FINDSTRING 332
#define CB_GETCURSEL 327

external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "GetFocus", "GetFocus", "User32.dll" );

int i, button1, button2, combo1, combo2, row;
string combo1_text[4]={"qwe", "rty", "asd", "123"}; // список строк для комбо1
string combo2_text[6]={"Строка1", "Строка2", "string1", "string2", "987", "654"}; // список строк для комбо2
char c[255];

//////////
createdialog(0);
showdialog(0, "Диалог", 258, 234, 250, 300, 1, 1);
//////////

loop() sleep(10);//Убрать после теста



function getmessage(0, WM_CREATE)
{
button1=CreateWindow(0, "BUTTON", "Добавить в список", 8192+1342177280, 130, 10, 100, 40, gethwnd(0), 0, 0, 0);
button2=CreateWindow(0, "BUTTON", "Удалить из списка", 8192+1342177280, 130, 60, 100, 40, gethwnd(0), 0, 0, 0);

combo1=CreateWindow(0, "COMBOBOX", "", 64+2097152+1342177280, 10, 10, 110, 120, gethwnd(0), 0, 0, 0);
// добавление строк в combo1 из массива combo1_text
for(i=0; i<sizearray(combo1_text); i++)
{
strcpy(#c[0], combo1_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo1));
}


combo2=CreateWindow(0, "COMBOBOX", "", 3+64+2097152+1342177280, 10, 150, 110, 120, gethwnd(0), 0, 0, 0);
// добавление строк в combo2 из массива combo2_text
for(i=0; i<sizearray(combo2_text); i++)
{
strcpy(#c[0], combo2_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo2));
}
}


function getmessage(0, WM_COMMAND)
{
if (message.lparam==button1) // если нажата 'Добавить в список'
{
GetWindowText(combo1, address(#c[0]), sizearray(c)); // получаем введённый текст

if(sendmessage(CB_FINDSTRING, 1, address(#c[0]), formatiw(combo1))==-1) // ищем есть ли он в списке
{
SetWindowText(combo1, ""); // удаляем текст из поля
sendmessage(CB_ADDSTRING, 1, address(#c[0]), formatiw(combo1)); // добавляем строку в список
}
else
{
if(messageboxyn("Такая строка уже есть в списке"+formatic(13)+formatic(10)+"Всё равно добавить строку?")!=-1)
{
SetWindowText(combo1, "");
sendmessage(CB_ADDSTRING, 1, address(#c[0]), formatiw(combo1));
}
}
}

if (message.lparam==button2) // если нажата 'Удалить из списка'
{
// получить номер выбранной строки и удалить строку
sendmessage(CB_DELETESTRING, sendmessage(CB_GETCURSEL, 1, 0, formatiw(combo1)), 0, formatiw(combo1));
}


if (message.lparam==combo2) // если выбрана строка combo2
{
beep(500, 200); //Вместо звука чтение из файла
row=sendmessage(CB_GETCURSEL, 1, 0, formatiw(combo2)); // узнаём номер выбранной строки
if(row>-1)
{
textbkcolor(255, 65280);
textout(0, 380, 480, "Выбранная строка: "+combo2_text[row], 0);
}
}
}

Реакция идет на клик по комбо, на выбор и на снятие выбора с этого комбо. иногда и по нескольку раз подряд. Как можно ловить только изменение в этом комбо? А то исполняемый код выполняется несколько раз.
 
 Top
Zireael
Отправлено: 16 Декабря, 2021 - 23:04:01
Post Id



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


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




 Цитата:
Как можно ловить только изменение в этом комбо?

CODE:
if (message.lparam==combo2 && hiword(message.wparam) == CBN_CLOSEUP)

Константы:
CODE:
#define CBN_ERRSPACE (-1)
#define CBN_SELCHANGE 1
#define CBN_DBLCLK 2
#define CBN_SETFOCUS 3
#define CBN_KILLFOCUS 4
#define CBN_EDITCHANGE 5
#define CBN_EDITUPDATE 6
#define CBN_DROPDOWN 7
#define CBN_CLOSEUP 8
#define CBN_SELENDOK 9
#define CBN_SELENDCANCEL 10
 
 Top
Gormit
Отправлено: 17 Декабря, 2021 - 08:10:13
Post Id



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


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




Спасибо большое, но все ровно при выборе пункта комбо код отрабатывал 2 раза. Добавил еще флаг.
CODE:
if (message.lparam==combo2 && hiword(message.wparam) == CBN_CLOSEUP && n>1)
 
 Top
Hedgehog1
Отправлено: 07 Июня, 2022 - 15:01:18
Post Id



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


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2022  
Репутация: 0




Приветствую, подскажите пожалуйста. Не могу понять что делаю не правильно ! Как программно активировать строку из COMBOBX, почему не активируется ?
CODE:

#define CB_ADDSTRING 323
#define CB_DELETESTRING 324
#define CB_FINDSTRING 332
#define CB_GETCURSEL 327
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LB_SETCURSEL 390

external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "GetFocus", "GetFocus", "User32.dll" );

int i, combo2, row;
string combo2_text[6]={"1", "2", "3", "4", "5", "6"};
char c[255];


createdialog(0);
showdialog(0, "??????", 258, 234, 222, 222, 1, 1);

sendmessage(LB_SETCURSEL, 2, 0, formatiw(combo2)); /// тут должнга активироваться строка под индексом 2

loop() { sleep(11); }



function getmessage(0, WM_CREATE)
{

combo2=CreateWindow(0, "COMBOBOX", "", 3+64+2097152+1342177280, 20, 20, 110, 120, gethwnd(0), 0, 0, 0);
for(i=0; i<sizearray(combo2_text); i++)
{
strcpy(#c[0], combo2_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo2));
}
}
}

(Отредактировано автором: 07 Июня, 2022 - 15:03:52)

 
 Top
Zireael
Отправлено: 08 Июня, 2022 - 01:46:02
Post Id



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


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




 Цитата:
почему не активируется ?

Потому что отправляете не то сообщение. LB_SETCURSEL это сообщение для списка ListBox. Для комбобокса сообщение начинаются CB_SETCURSEL.
CODE:
#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define CBS_DROPDOWNLIST 0x0003
#define CB_ADDSTRING 0x0143
#define CB_GETCURSEL 0x0147
#define CB_SETCURSEL 0x014E
#define WS_VSCROLL 0x00200000

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

int i, combo2;
string combo2_text[6]={"1", "2", "3", "4", "5", "6"};
char c[255];


createdialog(0);
showdialog(0, "Dialog", 258, 234, 222, 222, 1, 1);


sendmessage(CB_SETCURSEL, 2, 0, formatiw(combo2)); /// выбрать 3ю строку

loop() { sleep(11); }



function getmessage(0, WM_CREATE)
{
combo2=CreateWindow(0, "COMBOBOX", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, 20, 20, 110, 120, gethwnd(0), 0, 0, 0);
for(i=0; i<sizearray(combo2_text); i++)
{
strcpy(#c[0], combo2_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo2));
}
}
 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


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




Powered by