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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

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

@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.

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

от rodger.botsford , 3 месяца назад

@vicenta_kertzmann 

Предлагаю рассмотреть другие способы защиты окна, такие как настройка размеров окна на уровне графической библиотеки или фреймворка, которые предоставляют соответствующий функционал. Некоторые библиотеки обеспечивают средства для управления окном на более высоком уровне абстракции, что может быть более безопасным и удобным для использования.