Modify

Opened 3 years ago

Closed 3 years ago

#3809 closed Bug (Fixed)

WinGetTitle returns blank on Windows 10 using _WinAPI_CreateWindowEx

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

Description (last modified by mLipok)

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

Attachments (0)

Change History (3)

comment:1 Changed 3 years ago by mLipok

  • Description modified (diff)

comment:2 Changed 3 years ago by Jpm

  • Owner set to Jpm
  • Status changed from new to assigned

Fix sent to Jon

comment:3 Changed 3 years ago by Jon

  • Milestone set to 3.3.15.4
  • Owner changed from Jpm to Jon
  • Resolution set to Fixed
  • Status changed from assigned to closed

Fixed by revision [12566] in version: 3.3.15.4

Guidelines for posting comments:

  • You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
  • In-depth discussions should take place on the forum.

For more information see the full version of the ticket guidelines here.

Add Comment

Modify Ticket

Action
as closed The owner will remain Jon.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.