Opened 4 years ago

Last modified 3 years ago

#3809 closed Bug

WinGetTitle returns blank on Windows 10 using _WinAPI_CreateWindowEx — at Initial Version

Reported by: Nine Owned by:
Milestone: 3.3.15.4 Component: AutoIt
Version: 3.3.14.5 Severity: None
Keywords: Cc:

Description

It is working fine under Win7. But with Win10, WinGetTitle returns blank when called with $hWnd while using _WinAPI_CreateWindowEx. If you replace $hWnd with actual title, it works. If you use "[CLASS:MyWindowClass]", it works. If you do a WinList(), it will appear in the list.

#include <WinAPIRes.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

Opt( "MustDeclareVars", 1 )

Global $bExit = False

Example()

Func Example()
	Local Const $sClass = "MyWindowClass"
	Local Const $sName = "_WinAPI_RegisterClassEx"

	; Get module handle for the current process
	Local $hInstance = _WinAPI_GetModuleHandle( 0 )

	; Create a class cursor
	Local $hCursor = _WinAPI_LoadCursor( 0, 32512 ) ; IDC_ARROW

	; Create a class icons (large and small)
	Local $tIcons = DllStructCreate( "ptr;ptr" )
	_WinAPI_ExtractIconEx( @SystemDir & "\shell32.dll", 130, DllStructGetPtr( $tIcons, 1 ), DllStructGetPtr( $tIcons, 2 ), 1 )
	Local $hIcon = DllStructGetData( $tIcons, 1 )
	Local $hIconSm = DllStructGetData( $tIcons, 2 )

	; Create DLL callback function (window procedure)
	Local $pWinProc = DllCallbackGetPtr( DllCallbackRegister( "WinProc", "lresult", "hwnd;uint;wparam;lparam" ) )

	; Create and fill $tagWNDCLASSEX structure
	Local $tWCEX = DllStructCreate( $tagWNDCLASSEX & ";wchar szClassName[" & ( StringLen( $sClass ) + 1 ) & "]" )
	DllStructSetData( $tWCEX, "Size", DllStructGetPtr( $tWCEX, "szClassName" ) - DllStructGetPtr( $tWCEX ) )
	DllStructSetData( $tWCEX, "Style", 0 )
	DllStructSetData( $tWCEX, "hWndProc", $pWinProc )
	DllStructSetData( $tWCEX, "ClsExtra", 0 )
	DllStructSetData( $tWCEX, "WndExtra", 0 )
	DllStructSetData( $tWCEX, "hInstance", $hInstance )
	DllStructSetData( $tWCEX, "hIcon", $hIcon )
	DllStructSetData( $tWCEX, "hCursor", $hCursor )
	DllStructSetData( $tWCEX, "hBackground", _WinAPI_CreateSolidBrush( _WinAPI_GetSysColor( $COLOR_3DFACE ) ) )
	DllStructSetData( $tWCEX, "MenuName", 0 )
	DllStructSetData( $tWCEX, "ClassName", DllStructGetPtr( $tWCEX, "szClassName" ) )
	DllStructSetData( $tWCEX, "hIconSm", $hIconSm )
	DllStructSetData( $tWCEX, "szClassName", $sClass )

	; Register a window class
	_WinAPI_RegisterClassEx( $tWCEX )

	; Create a window
	Local $hWnd = _WinAPI_CreateWindowEx( 0, $sClass, $sName, BitOR( $WS_CAPTION, $WS_POPUPWINDOW, $WS_VISIBLE ), ( @DesktopWidth - 826 ) / 2, ( @DesktopHeight - 584 ) / 2, 826, 584, 0 )
  MsgBox ($MB_SYSTEMMODAL, "", WinGetTitle($hWnd))

  ; Main msg loop
	While Sleep(10)
		If $bExit Then ExitLoop
	WEnd

	; Unregister window class and release resources
	_WinAPI_UnregisterClass( $sClass, $hInstance )
	_WinAPI_DestroyCursor( $hCursor )
	_WinAPI_DestroyIcon( $hIcon )
	_WinAPI_DestroyIcon( $hIconSm )
EndFunc

; Window procedure
Func WinProc( $hWnd, $iMsg, $wParam, $lParam )
	Switch $iMsg
		Case $WM_CLOSE
			$bExit = True
	EndSwitch
	Return _WinAPI_DefWindowProcW( $hWnd, $iMsg, $wParam, $lParam )
EndFunc

Change History (0)

Note: See TracTickets for help on using tickets.