Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.
Keywords: obtain get handle WIL dialog control id number name GetDlgItem DllCall DialogProcOptions
Update:
WinBatch 2010A January 27, 2010 Added DialogControlGet request-code 19 which accepts the name of a regular control and returns a window handle. The request cannot be used on MENUITEM and MENUBAR controls because these controls are not windows.
A User Defined Function that obtains a handle to a dialog control, when passed the name of the control.
IMPORTANT: the control id is set by the tab order of the controls in the dialog. But it is a little more complicated than that because of group boxes. So in order for DlgGetItem to work by adding 99, the control number and the tab order must follow the same sequence!
#DefineFunction udfGetDialogControlHandle(dialog_handle,ctrlname) ;--------------------------------------------------------------------------------; ;udfGetDialogControlHandle : obtains a handle to a dialog control, when passed ; ; the name of the control. ; ; ; ;--------------------------------------------------------------------------------; ;dialog_handle : handle to your WIL dialog. ; ;ctrlname : control name of the control you need to handle to. ; ; ; ;--------------------------------------------------------------------------------; ;returns : handle of the WIL dialog control ; ;--------------------------------------------------------------------------------; ; IMPORTANT: the control id is set by the tab order of the controls in the ; ; dialog. But it is a little more complicated than that because of group boxes. ; ; So in order for DlgGetItem to work by adding 99, the control number and the ; ; tab order must follow the same sequence! ; ;--------------------------------------------------------------------------------; ctrlnum = DialogProcOptions( dialog_handle, 1005, ctrlname )+99 ctrhandle = DllCall(StrCat(DirWindows(1),'user32.dll'),long:'GetDlgItem',long:dialog_handle,long:ctrlnum) Return ctrhandle #EndFunction
Here is a complete example:
#DefineFunction udfGetDialogControlHandle(dialog_handle,ctrlname) ;--------------------------------------------------------------------------------; ;udfGetDialogControlHandle : obtains a handle to a dialog control, when passed ; ; the name of the control. ; ; ; ;--------------------------------------------------------------------------------; ;dialog_handle : handle to your WIL dialog. ; ;ctrlname : control name of the control you need to handle to. ; ; ; ;--------------------------------------------------------------------------------; ;returns : handle of the WIL dialog control ; ;--------------------------------------------------------------------------------; ; IMPORTANT: the control id is set by the tab order of the controls in the ; ; dialog. But it is a little more complicated than that because of group boxes. ; ; So in order for DlgGetItem to work by adding 99, the control number and the ; ; tab order must follow the same sequence! ; ;--------------------------------------------------------------------------------; ctrlnum = DialogProcOptions( dialog_handle, 1005, ctrlname )+99 ctrhandle = DllCall(StrCat(DirWindows(1),'user32.dll'),long:'GetDlgItem',long:dialog_handle,long:ctrlnum) Return ctrhandle #EndFunction #DefineSubRoutine InitDialogConstants() ;DialogprocOptions Constants MSG_INIT=0 ; The one-time initialization MSG_TIMER=1 ; Timer event MSG_BUTTONPUSHED=2 ; Pushbutton or Picturebutton MSG_RADIOPUSHED=3 ; Radiobutton clicked MSG_CHECKBOX=4 ; Checkbox clicked MSG_EDITBOX=5 ; Editbox or Multilinebox MSG_FILESELECT=6 ; Filelistbox MSG_ITEMSELECT=7 ; Itembox MSG_COMBOCHANGE=8 ; Combobox/Droplistbox MSG_CALENDAR=9 ; Calendar date change MSG_SPINNER=10 ; Spinner number change MSG_CLOSEVIA49=11 ; Close clicked (Enabled via DialogProcOptions 1002 MSG_FILEBOXDOUBLECLICK=12 ; Get double-click message on a FileListBox MSG_ITEMBOXDOUBLECLICK=13 ; Get double-click message on an ItemBox MSG_COMEVENT=14 ; COMCONTROL Event notification from DialogObject (NOT DialogProcOptions) DPO_DISABLESTATE=1000 ; codes -1=GetSetting 0=EnableDialog 1=DisableDialog DPO_CHANGEBACKGROUND=1001 ; -1=Get Current otherise bitmap or color string DPO_CHANGESYSMENU=1002 ; -1=Get Current 0=none 1=close 2=close/min 3=close/max 4=close/min/max DPO_CHANGETITLE=1003 ; Set/Get Dialog Title - (-1 to get) ;DialogControlState Constants DCSTATE_SETFOCUS=1 ; Give Control Focus DCSTATE_QUERYSTYLE=2 ; Query control's style DCSTATE_ADDSTYLE=3 ; Add control style DCSTATE_REMOVESTYLE=4 ; Remove control style DCSTATE_GETFOCUS=5 ; Get control that has focus DCSTATE_MOVEMOUSEOVER=6 ; Move the mouse over the control DCSTYLE_DEFAULT=0 ; Set Default Style DCSTYLE_INVISIBLE=1 ; Set Control Invisible DCSTYLE_DISABLED=2 ; Set Control Disabled DCSTYLE_NOUSERDATA=4 ; Note: Setable via DialogControlState function ONLY SPINNER control only DCSTYLE_READONLY=8 ; Sets control to read-only (user cannot type in data) EDITBOX MULTILINEBOX SPINNER DCSTYLE_PASSWORD=16 ; Sets 'password mode' where only *'s are displayed EDITBOX DCSTYLE_DEFAULTBUTTON=32 ; Sets a button as the default button PUSHBUTTON PICTUREBUTTON DCSTYLE_DIGITSONLY=64 ; Set edit box to accept digits only EDITMOX MULTILINEBOX DCSTYLE_FLAT=128 ; Makes a 'flat' hyperlink-looking button PUSHBUTTON PICTUREBUTTON DCSTYLE_NOADJUST=256 ; Turns off auto-height adjustment ITEMBOX FILELISTBOX DCSTYLE_TEXTCENTER=512 ; Center text in control VARYTEXT STATICTEXT DCSTYLE_TEXTRIGHT=1024 ; Flush-Right text in control VARYTEXT STATICTEXT DCSTYLE_NOSELCURLEFT=2048 ; No selection, cursor left EDITBOX MULTILINEBOX DCSTYLE_NOSELCURRIGHT=4096; No selection, cursor right EDITBOX MULTILINEBOX ;DialogControlSet / DialogControlGet Constants DC_CHECKBOX=1 ; CHECKBOX DC_RADIOBUTTON=2 ; RADIOBUTTON DC_EDITBOX=3 ; EDITBOX MULTILINEBOX DC_TITLE=4 ; PICTURE RADIOBUTTON CHECKBOX PICTUREBUTTON VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON DC_ITEMBOXCONTENTS=5 ; ITEMBOX FILELISTBOX DROPLISTBOX DC_ITEMBOXSELECT=6 ; ITEMBOX FILELISTBOX DROPLISTBOX DC_CALENDAR=7 ; CALENDAR DC_SPINNER=8 ; SPINNER DC_MULTITABSTOPS=9 ; MULTILINEBOX DC_ITEMSCROLLPOS=10 ; ITEMBOX FILELISTBOX DC_BACKGROUNDCOLOR=11 ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FILELISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX DC_PICTUREBITMAP=12 ; PICTURE PICTUREBUTTON DC_TEXTCOLOR=13 ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FIELLISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX DC_ITEMBOXADD=14 ; ITEMBOX FILELISTBOX DROPLISTBOX DC_ITEMBOXREMOVE=15 ; ITEMBOX FILELISTBOX DROPLISTBOX DC_RADIOVALUE=16 ; RADIOBUTTON ;DialogObject constants DLGOBJECT_ADDEVENT=1 ; Call dialog callback when the specified event occurs DLGOBJECT_STOPEVENT=2 ; Stop calling dialog callback when an event previously requested with DLGOBJECT_GETOBJECT=3 ; Return an object references to the specified control DLGOBJECT_GETPICTURE=4 ; Create and return an object reference to a picture object ;Return code constants RET_DO_CANCEL=0 ; Cancels dialog RET_DO_DEFAULT= -1 ; Continue with default processing for control RET_DO_NOT_EXIT= -2 ; Do not exit the dialog Return #EndSubRoutine ;============================================================ ;============================================================ ;============================================================ #DefineFunction MyDialogCallbackProc(MyDialog_Handle,MyDialog_Message,MyDialog_Name,MyDialog_EventInfo,rsvd) InitDialogConstants() ; Initialize Dialog Constants ON_EQUAL = @TRUE ; Initialize variable ON_EQUAL Switch MyDialog_Message ; Switch based on Dialog Message type Case MSG_INIT ; Standard Initialization message ; DialogProcOptions(MyDialog_Handle,MSG_TIMER,1000) DialogProcOptions(MyDialog_Handle,MSG_BUTTONPUSHED,@TRUE) Return(RET_DO_DEFAULT) Case MSG_BUTTONPUSHED Switch ON_EQUAL Case MyDialog_Name == "PushButton_OK" ; ID "PushButton_OK" PushButton_OK handle = udfGetDialogControlHandle(MyDialog_Handle,MyDialog_Name ) Pause(MyDialog_Name,handle) Return(RET_DO_DEFAULT) Case MyDialog_Name == "PushButton_Cancel" ; ID "PushButton_Cancel" PushButton_Cancel handle = udfGetDialogControlHandle(MyDialog_Handle,MyDialog_Name ) Pause(MyDialog_Name,handle) Return(RET_DO_DEFAULT) EndSwitch ; MyDialog_Name Return(RET_DO_DEFAULT) EndSwitch ; MyDialog_Message Return(RET_DO_DEFAULT) #EndFunction ; End of Dialog Callback MyDialogCallbackProc ;============================================================ ;============================================================ ;============================================================ MyDialogFormat=`WWWDLGED,6.2` MyDialogCaption=`WIL Dialog 1` MyDialogX=191 MyDialogY=042 MyDialogWidth=302 MyDialogHeight=151 MyDialogNumControls=002 MyDialogProcedure=`MyDialogCallbackProc` MyDialogFont=`DEFAULT` MyDialogTextColor=`DEFAULT` MyDialogBackground=`DEFAULT,DEFAULT` MyDialogConfig=0 MyDialog001=`077,131,036,012,PUSHBUTTON,"PushButton_OK",DEFAULT,"OK",1,10,32,DEFAULT,DEFAULT,DEFAULT` MyDialog002=`189,131,036,012,PUSHBUTTON,"PushButton_Cancel",DEFAULT,"Cancel",0,20,DEFAULT,DEFAULT,DEFAULT,DEFAULT` ButtonPushed=Dialog("MyDialog")
Article ID: W17745
Filename: Get handle to WIL Dialog Control.txt
File Created: 2011:06:17:14:36:28
Last Updated: 2011:06:17:14:36:28