007wan |
Отправлено: 29 Мая, 2019 - 14:12:38
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Можно пожалуйста пример с этим:CODE: SetWindowPos(formatwi(MainWindow), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING); Есть диалог и там 2 кнопки: "поверх" и "не". Каждая должна работать как часы. А то у меня ошибка какая-то. При закрытии диалога через WM_CLOSE вызывается поверх окна, но для 2 диалога, а оно не работает и окно становится не поверх, хотя оно было! А еще После этого WM_CLOSE не робит, т.к не слушается код в этой функции, (не закрывает), хотя там есть всё, даже скрипт не останавливается. Приходится силой. Раздражает очень. Ошибок не вижу, но что-то не так либо с кибором, либо с функцией этой.
(Добавление)
Еще если можно, то показать на двух диалогах. первый основной, а второй со вкладкой "настройки"
(Добавление)
Потому что оба диалога конфиктовали.
(Добавление)
Еще как олучить параметр, что окно "поверх" или "нет"
(Добавление)
Может это потому что... Цитата: *Ни флажок HWND_TOPMOST, ни флажок HWND_NOTOPMOST не установлен в параметре hWndInsertAfter.
(Добавление)
У меня как всё сделано:
Есть функция:Функция (Отобразить)CODE:function Window_Topmost()
{
while(Load_Checkbox[4] == -842150451)
{
sleep(10);
}
else
{
MainWindow = formatiw(gethwnd(0));
SecondaryWindow = formatiw(gethwnd(1));
if (Load_Checkbox[4] == 1)
{
SetWindowPos(formatwi(MainWindow), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
SetWindowPos(formatwi(SecondaryWindow), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
messagebox("Load_Checkbox[4]:"+format(Load_Checkbox[4]));
}
else
{
SetWindowPos(formatwi(MainWindow), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
SetWindowPos(formatwi(SecondaryWindow), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
}
}
}
есть 2 диалога. призапуске скрипта, вызывает функция поверх окна сразу же в зависимости от параметра в файле делает то, что нужно. при закрытии диалога2 "настройки" тоже вызывает и тут он не работает. |
|
|
Zireael |
Отправлено: 29 Мая, 2019 - 14:58:17
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define BS_AUTOCHECKBOX 3
#define BM_GETSTATE 242
#define SW_HIDE 0
#define HWND_TOPMOST -1
#define HWND_NOTOPMOST -2
#define SWP_NOSIZE 1
#define SWP_NOMOVE 2
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll" );
external(INT, "ShowWindow", "ShowWindow", "User32.dll" );
int b1;
int check1, check2;
int state;
createdialog(0);
createdialog(1);
showdialog(0, "Dialog1", 100, 100, 300, 300, 1, 0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
check1=CreateWindow(0, "BUTTON", "Поверх всех окон", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE , 10, 10, 150, 20, gethwnd(0), 0, 0, 0);
b1=CreateWindow(0, "BUTTON", "Открыть второй диалог", WS_CHILD | WS_VISIBLE , 10, 40, 170, 25, gethwnd(0), 0, 0, 0);
}
function getmessage(1, WM_CREATE)
{
check2=CreateWindow(0, "BUTTON", "Поверх всех окон", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE , 10, 10, 150, 20, gethwnd(1), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==b1)showdialog(1, "Dialog2", 400, 100, 300, 300, 4, 0);
if(message.lparam==check1)
{
state=sendmessage(BM_GETSTATE, 0, 0, formatiw(check1));
if(state == 1 || state == 9)SetWindowPos(gethwnd(0), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
else SetWindowPos(gethwnd(0), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
}
}
function getmessage(1, WM_COMMAND)
{
if(message.lparam==check2)
{
state=sendmessage(BM_GETSTATE, 0, 0, formatiw(check2));
if(state == 1 || state == 9)SetWindowPos(gethwnd(1), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
else SetWindowPos(gethwnd(1), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
}
}
function getmessage(1, WM_CLOSE)
{
ShowWindow(gethwnd(1), SW_HIDE);
} |
|
|
007wan |
Отправлено: 29 Мая, 2019 - 15:14:26
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Как использовать GetWindow?
(Добавление)
Zireael , 1) WM_CLOSE сбрасывает верхнее окно обоих диалогов. 2)При нажатии на иконку на панели задач "Kibor", учитывая запущенного скрипта, сбрасывает верхнее окно. ДУмаю аналогично с рисованием. Наверное нужно установить таймер - не проблема.
(Добавление)
Цитата: HWND GetWindow(
HWND hWnd,
UINT uCmd*//шо это такое?
);
(Добавление)
А, всё
(Добавление)
Решил попробовать сам:
CODE:
#define GW_HWNDFIRST 0
external(INT, "GetWindow", "GetWindow", "User32.dll" );
int a=GetWindow(Object_Button1, GW_HWNDFIRST);
(Добавление)
CODE:int a=GetWindow(gethwnd(0), GW_HWNDFIRST); |
|
|
007wan |
Отправлено: 30 Мая, 2019 - 10:20:34
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Помните MessageBox api? А почему не работает звук при сообщении? В описании функции параметр звука не видал.
(Добавление)
А всё. Не надо. Хочу сам попробовать. Нашел функцию MessageBeep
(Добавление)
CODE:#define MB_ICONERROR 16
#define MB_ICONEXCLAMATION 48
#define MB_ICONERROR 16
#define MB_ICONINFORMATION 64
#define MB_ICONQUESTION 32
#define MB_OK 0
//прописываем константы
external(INT, "MessageBeep", "MessageBeep", "user32.dll");//загружаем библиотеку
MessageBeep(MB_ICONERROR);//Запускаем
//Если хочешь другой звук поменяй MB_ICONERROR константу на те, что выше...
Всё константы ТУТ
(Добавление)
Почему квестовый сигнал не работает? #define MB_ICONQUESTION 32
(Добавление)
Использую это CODE:external(INT, "MessageBeep", "MessageBeep", "user32.dll");
MessageBeep(MB_ICONQUESTION); Все константы в файле
(Добавление)
Вообще в Панели управления, где Звуки. Звук "Вопрос" отсутствует, что нельзя воспроизвести.
(Добавление)
Теперь можно отключать отдельные строчки в меню вызывающееся ПКМ или просто меню, которое сверху.
Код (Отобразить)
CODE:
//пишем константы
MF_GRAYED 1 //Отключить, открасить в серый цвет, нельзя выбрать
MF_DISABLED 2 //Отключить, нельзя выбрать
MF_ENABLED 0 //Восстановить
external(INT, "EnableMenuItem", "EnableMenuItem", "User32.dll");//загружаем библиотеку
//EnableMenuItem(1*, 2*, 3*);//вызываем команду
//*1 Меню
//*2 Подменю
//*3 положение (статус). Вписываем константы
//Пример:
EnableMenuItem(HMENU1, HMENU2, 1);
//или
EnableMenuItem(HMENU1, 111, 1);
Все константы ТУТ |
|
|
007wan |
Отправлено: 30 Мая, 2019 - 12:35:14
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Или можно подсветить:
Код (Отобразить)CODE:
MF_HILITE 128
external(INT, "HiliteMenuItem", "HiliteMenuItem", "User32.dll");
HiliteMenuItem(gethwnd(0), HMENU, 1, MF_HILITE);
(Добавление)
Zireael , Не знаю что писать в последние 2 параметра:
CODE:
external(INT, "ModifyMenuA", "ModifyMenuA", "user32.dll");
ModifyMenuA(HMENU3, 6, MF_BYCOMMAND | MF_CHECKED);
//+константы имеются
ссылка<----константы.
Вообще работает, но не так:
ВЫделяет строку галочкой, но текст это строчки пропадает.
(Добавление)
Кнопки верх-вниз для эдита. Костыль пока что)
Код (Отобразить)CODE:
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "SetFocus", "SetFocus", "User32.dll" );
external(INT, "CreateUpDownControl", "CreateUpDownControl", "Comctl32.dll");
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");
int edit1;
loop()
{
sleep(1);
}
function getmessage(0, WM_CREATE)
{
edit1 = CreateWindow(0, "EDIT", "65464", WS_CHILD | WS_BORDER | WS_VISIBLE, 10, 10, 100, 20, gethwnd(0), 0, 0, 0);
CreateUpDownControl(WS_CHILD | WS_BORDER | WS_VISIBLE, 110, 10, 20, 20, gethwnd(0), 565, 0, edit1, 10, 10, 50);
}
Статья. Пока не до конца понял что и как работает.
(Добавление)
Еще одна новый контрол. И много разных ТУТ |
|
|
007wan |
Отправлено: 30 Мая, 2019 - 14:40:04
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Не знаю что это, но похожу на статик или статус окно какое-то)CreateStatusWindowA function (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "SetFocus", "SetFocus", "User32.dll" );
external(INT, "CreateStatusWindowA", "CreateStatusWindowA", "Comctl32.dll");
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");
int edit1;
loop()
{
sleep(1);
}
function getmessage(0, WM_CREATE)
{
edit1 = CreateWindow(0, "EDIT", "65464", WS_CHILD | WS_BORDER | WS_VISIBLE, 100, 100, 100, 20, gethwnd(0), 0, 0, 0);
CreateStatusWindowA(WS_VISIBLE | WS_CHILD, "123123", gethwnd(0), edit1);
} |
|
|
Zireael |
Отправлено: 30 Мая, 2019 - 14:56:42
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Статья. Пока не до конца понял что и как работает.
Это устаревшие функции. Вместо этого есть scrolbar.
CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "CreateUpDownControl", "CreateUpDownControl", "Comctl32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
int edit, up_down;
int min=10, max=40, pos=20; // минимум, максимум и начальное значения
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()sleep(1);
function getmessage(0, WM_VSCROLL)
{
if(message.lparam==up_down)SetWindowText(edit, format(hiword(message.wparam)));
}
function getmessage(0, WM_CREATE)
{
edit=CreateWindow(0, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 20, 30, 20, gethwnd(0), 0, 0, 0);
SetWindowText(edit, format(pos));
up_down=CreateUpDownControl(WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 20, 20, 20, gethwnd(0), 1111, 0, 0, max, min, pos);
} |
|
|
007wan |
Отправлено: 30 Мая, 2019 - 15:00:00
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Спасибо.
(Добавление)
В идеале можно еще на эдит дать лимит на значения и только цифры и всё) ну это я и сам могу)
(Добавление)
А как вообще тулбар сделать, я не понимаю.CreateToolbarEx function
(Добавление)
Блин, я не знаю короче. Я просто ищу всякие бары, тулбары, табы итд. Всё новое ищу, а если нахожу, то большинство не могу сделать что-то.
(Добавление)
Однако, старые функции мне показались более понятными
(Добавление)
Zireael , А что насчет этого-то?
CODE:external(INT, "ModifyMenuA", "ModifyMenuA", "user32.dll");
ModifyMenuA(HMENU3, 6, MF_BYCOMMAND | MF_CHECKED);
//+константы имеются Ставит галочку, но текст не отображается
(Добавление)
Ладно. Использую тогда это CheckMenuItem |
|
|
|