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

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

от vicenta_kertzmann , в категории: Другие , 7 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от aaron_armstrong , 7 месяцев назад

@vicenta_kertzmann 

В Go нет нативного способа блокировки изменения размера окна Windows. Однако, вы можете использовать функции из пакета "syscall" для вызова функций WinAPI и изменения стилей окна, чтобы предотвратить изменение размера.


Вот пример кода, который показывает, как заблокировать изменение размера окна Windows с использованием функций WinAPI:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import (
	"fmt"
	"syscall"
)

const (
	GWL_STYLE = -16
	WS_THICKFRAME = 0x00040000
	WS_MAXIMIZEBOX = 0x00010000
	WS_MINIMIZEBOX = 0x00020000
)

var (
	moduser32    = syscall.NewLazyDLL("user32.dll")
	procGetWindowLongPtr = moduser32.NewProc("GetWindowLongPtrW")
	procSetWindowLongPtr = moduser32.NewProc("SetWindowLongPtrW")
)

func main() {
	// Получаем хэндл текущего окна
	hwnd := syscall.Handle(0)
	hwnd, _, _ = syscall.Syscall(procGetWindowLongPtr.Addr(), 2, uintptr(hwnd), uintptr(GWL_STYLE), 0)

	// Вызываем SetWindowLongPtr(), чтобы убрать стили WS_THICKFRAME, WS_MAXIMIZEBOX и WS_MINIMIZEBOX
	result, _, _ := syscall.Syscall(procSetWindowLongPtr.Addr(), 3, uintptr(hwnd), uintptr(GWL_STYLE), uintptr(WS_THICKFRAME|WS_MAXIMIZEBOX|WS_MINIMIZEBOX))
	if result == 0 {
		fmt.Println("Не удалось заблокировать изменение размера окна.")
	}
}


Пожалуйста, обратите внимание, что это низкоуровневый подход, и использование функций WinAPI требует знания о системных вызовах и спецификации Windows.