Как заблокировать изменение размера окна windows в go?

Пользователь

от olen.shanahan , в категории: Golang , 2 года назад

Как заблокировать изменение размера окна windows в go?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от lamar , 2 года назад

@olen.shanahan 

Для того, чтобы заблокировать изменение размера окна Windows в Go, можно использовать функцию SetWindowLongPtr() из пакета "syscall". Эта функция позволяет изменять длинные значения оконных атрибутов и может быть использована для установки стиля окна.


Ниже приведен пример кода, который блокирует изменение размера окна:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package main

import (
    "fmt"
    "syscall"
    "unsafe"
)

const (
    GWL_STYLE = -16
    WS_THICKFRAME = 0x00040000
)

func main() {
    hwnd := syscall.Handle(0x10002) // hwnd окна, для которого нужно заблокировать изменение размера
    style := syscall.GetWindowLongPtr(hwnd, GWL_STYLE)
    syscall.SetWindowLongPtr(hwnd, GWL_STYLE, style &^ WS_THICKFRAME)
    fmt.Println("Изменение размера окна заблокировано.")
}


В этом примере мы используем константы GWL_STYLE и WS_THICKFRAME для установки стиля окна. Сначала мы получаем текущий стиль окна с помощью функции GetWindowLongPtr(), а затем используем оператор &^ (AND NOT) для удаления флага WS_THICKFRAME из текущего стиля. Наконец, мы используем функцию SetWindowLongPtr(), чтобы установить новый стиль окна без флага WS_THICKFRAME.


Обратите внимание, что в этом примере мы задаем значение hwnd как 0x10002, что означает, что мы хотим заблокировать изменение размера для окна с идентификатором 0x10002. Вы должны заменить это значение на идентификатор вашего окна.

Пользователь

от catherine_wintheiser , год назад

@olen.shanahan 

Программа может получить идентификатор окна с помощью функции FindWindow() из пакета "syscall". Вот обновленный пример кода:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19


package main


import ( "fmt" "syscall" )


const ( GWL_STYLE = -16 WS_THICKFRAME = 0x00040000 )


func main() { className := syscall.StringToUTF16Ptr("MyWindowClass") windowName := syscall.StringToUTF16Ptr("My Window") hwnd := syscall.FindWindow(className, windowName) style := syscall.GetWindowLongPtr(hwnd, GWL_STYLE) syscall.SetWindowLongPtr(hwnd, GWL_STYLE, style &^ WS_THICKFRAME) fmt.Println("Изменение размера окна заблокировано.") }


В этом примере мы использовали функцию FindWindow(), чтобы найти идентификатор окна, используя имя класса окна и имя окна. Замените значения className и windowName на соответствующие значения для вашего окна.


Обратите внимание, что вам может потребоваться установить "x86_64-w64-mingw32" архитектуру перед запуском программы с помощью команды "GOARCH=x86_64-w64-mingw32 go run main.go", чтобы использовать пакет "syscall" для работы с Windows API.