Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Убрать управление окна

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

1. ivantu - 27 Апреля, 2021 - 07:15:56 - перейти к сообщению
Здравствуйте, подскажите можно ли убрать кнопки управления (свернуть закрыть и т.д), используя данный метод создания окна?

CODE:

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

int b;

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

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



function getmessage(0, WM_CREATE)
{
b=CreateWindow(0, "BUTTON", "Первая кнопка", 1342177280, 10, 10, 120, 30, gethwnd(0), 0, 0, 0);
}


function getmessage(0, WM_COMMAND)
{
if (message.lparam==b)messagebox ("Первая кнопка");
}
2. Zireael - 27 Апреля, 2021 - 18:02:12 - перейти к сообщению
CODE:
#define GWL_STYLE -16
#define WS_VISIBLE 0x10000000
#define WS_CAPTION 0x00C00000
#define WS_CHILD 0x40000000
#define WS_SYSMENU 0x00080000

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

int b;

createdialog(0);
showdialog(0, "Диалог", 258, 234, 250, 150, 1, 1);
SetWindowLong(gethwnd(0), GWL_STYLE, WS_VISIBLE + WS_CAPTION); // изменить стиль окна

loop()sleep(10);
end:;


function getmessage(0, WM_CREATE)
{
b=CreateWindow(0, "BUTTON", "Стоп скрипт", WS_VISIBLE + WS_CHILD, 40, 30, 100, 20, gethwnd(0), 0, 0, 0);
}

function getmessage(0, WM_COMMAND)
{
if (message.lparam==b)
{
if (messageboxyn("Остановить скрипт?")==1)goto global end;
else return;
}
}
3. ivantu - 28 Апреля, 2021 - 00:11:53 - перейти к сообщению
 Zireael пишет:
SetWindowLong(gethwnd(0), GWL_STYLE, WS_VISIBLE + WS_CAPTION); // изменить стиль окна


Прописывал это, но забыл при этом указать external , спасибо.
(Добавление)
Пытаюсь еще рамку полностью убрать, что только не перепробовал... все равно рамка не убирается....

CODE:

#define GWL_STYLE -16
#define WS_POPUP 0x80000000
#define BS_NOBORDER 65536

#define WS_EX_LAYERED 0x80000
#define LWA_COLORKEY 1
#define LWA_ALPHA 2

#define WS_OVERLAPPED 0x00000000
#define WS_EX_DLGMODALFRAME 0x00000001
#define WS_EX_CLIENTEDGE 0x00000200
#define WS_EX_STATICEDGE 0x00020000

#define WS_SIZEBOX 0x00040000

#define WS_CAPTION 0x00C00000


(Добавление)
Я так понял это из за того что у меня x64 битная система...

 Цитата:

ПРИМЕЧАНИЕ.. Если вы попробуете мой ответ, но это не сработает для вас, это может быть так, потому что обе функции SetWindowLong и GetWindowLong были заменены и не работа для вас, и это потому, что они совместимы с только 32-разрядной версией Windows. Вероятно, вы используете 64-разрядную версию Windows, затем вместо этого используйте SetWindowLongPtr и GetWindowLongPtr, которые совместимы с и 32-разрядными и 64- бит. MSDN сообщает об этих функциях в разделе Примечание. Просто найдите их на этом сайте. Вот ссылки на них:


я так понял нужно через SetWindowLongPtr
4. Zireael - 28 Апреля, 2021 - 03:01:58 - перейти к сообщению
 Цитата:
Пытаюсь еще рамку полностью убрать

Если имеется ввиду заголовок, то убрать WS_CAPTION.
5. ivantu - 28 Апреля, 2021 - 03:06:11 - перейти к сообщению
 Zireael пишет:
Если имеется ввиду заголовок, то убрать WS_CAPTION.

Это понятно, я именно про рамку у окна, я вывел на него картинку, и хотел убрать рамку, но не получается.

6. Zireael - 28 Апреля, 2021 - 04:00:22 - перейти к сообщению
CODE:
#define WS_VISIBLE 0x10000000
#define WS_EX_TOPMOST 0x00000008
#define IDC_SIZEALL 32646
#define IDC_ARROW 32512
#define WM_CLOSE 0x0010
#define WS_POPUP 0x80000000
#define WS_EX_LAYERED 0x00080000
#define LWA_ALPHA 2
#define HTCAPTION 2

external(INT, "RegisterClass", "RegisterClassA", "User32.dll");
external(INT, "UnregisterClass", "UnregisterClassA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadCursor", "LoadCursorA", "User32.dll");
external(INT, "SetCursor", "SetCursor", "User32.dll");
external(INT, "GetModuleHandle", "GetModuleHandleA", "Kernel32.dll");
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll");
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");


int WinProc=address("WindowProc");
char Class[99];
strcpy(#Class[0], "myclass");

int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на название класса
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
PWNDCLASS[1] = WinProc;
PWNDCLASS[6] = LoadCursor(0, IDC_ARROW);
PWNDCLASS[9] = address(#Class[0]); // имя класса окна

int cursor_size_all = LoadCursor(0, IDC_SIZEALL);

if (RegisterClass(CLASS)==0){messagebox("Не удалось зарегистрировать класс"); goto er;}

int Win=CreateWindow(WS_EX_TOPMOST | WS_EX_LAYERED , address(#Class[0]), "", WS_POPUP | WS_VISIBLE, 200, 100, 400, 300, 0, 0, 0, 0);
SetLayeredWindowAttributes(Win, 0, 255, LWA_ALPHA); // уровень прозрачности от 0 до 255

win w = window ("Program Manager", "Progman", -1);
visualwindow(formatiw(Win), 0, 0, 0, 400, 300, 0, 0 , 100, w);

while(getkeystate(90)==0) // пока не нажата клавиша Z
{
textout(0, 0, 0, "Нажать Z чтобы остановить скрипт", 1);
sleep(1);
}
disablevisualwindow(0);


sendmessage(WM_CLOSE, 0, 0, formatiw(Win));
UnregisterClass(address(#Class[0]), 0);
er:;


function getmessage (WM_LBUTTONDOWN)
{
SetCursor(cursor_size_all);
sendmessage(WM_NCLBUTTONDOWN, HTCAPTION, 0, formatiw(Win)); // перетаскивание окна за клиентскую часть
}
7. ivantu - 28 Апреля, 2021 - 05:04:55 - перейти к сообщению
Остановлюсь на варианте с рамкой, Классы и т.д сложновато для меня еще, но все же спасибо за помощь.

Powered by ExBB FM 1.0 Final