Что нового

Кому доверить окно WinAPI или user32.dll?

Sαuron

Новичок
Сообщения
45
Репутация
1
Я нашел пример для корявого назначения стиля окну.
Код:
Func WinSetStyle($hWnd, $Style, $ExStyle)
    DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "int", $Style)
    DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_EXSTYLE, "int", $ExStyle)
    DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", 0, "int", 0, "int", 0, "int", 0, "int", BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOMOVE, $SWP_NOZORDER))
EndFunc

Но вспомнил, что в WinAPI есть аналогичные функции setwindowlong, setwindowpos и сделал эту же функцию через WinAPI
Код:
_winapi_setwindowlong($dso_win, $GWL_STYLE, 0)
_winapi_setwindowlong($dso_win, $GWL_EXSTYLE, 0)
_winapi_setwindowpos($dso_win, 0, 0, 0, 780, 500, BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOMOVE, $SWP_NOZORDER))

Через dll у меня были непонятные глюки, когда окно теряло размер или не изменялось вовсе... С winapi, у меня такого еще не было, но то ли еще будет...
Кому же все таки доверить, если ко всему этому требуется безукоризненная работа на других версиях винды XP, 8, 10?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Sαuron

"\AutoIt3\Include\WinAPI.au3"

Код:
Func _WinAPI_SetWindowLong($hWnd, $iIndex, $iValue)
	_WinAPI_SetLastError(0) ; as suggested in MSDN
	Local $sFuncName = "SetWindowLongW"
	If @AutoItX64 Then $sFuncName = "SetWindowLongPtrW"
	Local $aResult = DllCall("user32.dll", "long_ptr", $sFuncName, "hwnd", $hWnd, "int", $iIndex, "long_ptr", $iValue)
	If @error Then Return SetError(@error, @extended, 0)

	Return $aResult[0]
EndFunc   ;==>_WinAPI_SetWindowLong


Это одно и тоже. Ваши вызовы Dll попросту некорректны, поэтому при некоторых обстоятельствах и возникали ошибки.
 
Верх