Sign in to follow this  
Followers 0
jchapman15

GUI window handle invalid after storing in dictionary

6 posts in this topic

Can anyone tell me why a window handle becomes invalid after it's stored inside a dictionary?

If you disable the line where it's stored the RichEdit box will show, otherwise it _GUICtrlRichEdit_Create errors out -1 (window handle no longer exists)

#include <GuiRichEdit.au3>

#include <WindowsConstants.au3>


$controls = ObjCreate("Scripting.Dictionary")
$win = GUICreate("Enter Information", 400, 400)

$controls.Add("gui", $win) ;if window handle stored in a dictionary object then the handle is invalidated
_GUICtrlRichEdit_Create($win, "test string", 25, 200, 350, 100, BitOr($ES_AUTOHSCROLL, $ES_AUTOVSCROLL, $WS_VSCROLL, $ES_MULTILINE, $ES_READONLY))
GUISetState()
While GUIGetMsg() <> -3

 sleep(10)

WEnd

Share this post


Link to post
Share on other sites



Why do you need to store it in a dictionary?


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Water: Well I didn't really need to do it that way I could store the window handle in a global, but the dictionary keeps all of my control IDs on the GUI in a nice organized package that can be easily passed to multiple functions.  

NutStomper: Odd that it converts the original variable, dictionary.Add is ByRef then I guess? Thanks for the workaround!

Edited by jchapman15

Share this post


Link to post
Share on other sites

I usually use an array to store all the IDs of a GUI.

Advantage: No external references needed.

Disadvantage: You can't access the elements by name.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

I used arrays to start, but after my GUI became pretty complex my code started to become too much of a pain to update having to look back and forth to figure out which indexes match to which controls.

Not having to worry about external references is a definate plus, but portability isn't a concern with this project.

Thanks for your help!

Share this post


Link to post
Share on other sites

The handle is being converted to a number when it's added to the dictionary. Use HWnd() to convert it back to a handle.

And you can use Ptr.

#include <Constants.au3>

Local $hGUI = GUICreate(Default)
MsgBox($MB_SYSTEMMODAL, '', 'hGUI = ' & $hGUI)
MsgBox($MB_SYSTEMMODAL, '', 'hGUI = ' & Number($hGUI))
MsgBox($MB_SYSTEMMODAL, '', 'Number-Ptr = ' & Ptr(Number($hGUI)) & @CRLF & 'Number-HWnd = ' & HWnd(Number($hGUI)))

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0