Thought this was in the TechDB but didn't see it. This approach works fairly well.
Jim
GoSub Load_Routines
Call("wb_dialog_variables.wbc","")
KEYPRESSFormat=`WWWDLGED,6.1`
KEYPRESSCaption=`KeyPress`
KEYPRESSX=002
KEYPRESSY=038
KEYPRESSWidth=182
KEYPRESSHeight=081
KEYPRESSNumControls=002
KEYPRESSProcedure=`KeyPress`
KEYPRESSFont=`DEFAULT`
KEYPRESSTextColor=`DEFAULT`
KEYPRESSBackground=`DEFAULT,DEFAULT`
KEYPRESSConfig=0
KEYPRESS001=`067,039,036,012,PUSHBUTTON,DEFAULT,"OK",1,1,32,DEFAULT,DEFAULT,DEFAULT`
KEYPRESS002=`115,039,036,012,PUSHBUTTON,DEFAULT,"Cancel",0,2,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
ButtonPushed=Dialog("KEYPRESS")
:Load_Routines
#DefineSubRoutine KeyPress(KEY_Handle,DMsg,DCID,resvd4,resvd5)
Switch (DMsg)
Case msg_init ; Dialog Initialization
DialogProcOptions(KEY_Handle, msg_timer,10) ; TimerEvent (0- Off).
DialogProcOptions(KEY_Handle, msg_buttonpushed,1) ; PushButton/PictureButton.
a_answer = 0
pb_KEY_OK = 1
pb_KEY_Cancel = 2
WinTitle("","KeyPress")
Break
Case msg_timer ; TimerEvent
a_answer = 0
a_answer = WaitForKeyEx("{F1} {F2} {F3} {F4} {F5} {F6} {F7} {F8} {F9} {F10} {F11} {F12} {INS} {DEL}",.01)
Switch(a_answer)
Case 0
If DialogProcOptions(KEY_Handle,1,-1) == 10 Then Return -1
Break
Case a_answer
If WinExist("KeyPress") Then win_state = WinState("KeyPress")
If StrSub(WinGetActive(),1,8) != "KeyPress" Then Return -1 ;Checks to make sure your script is active
;to avoid hotkey conflicts.
EndSwitch
Break
Case msg_buttonpushed ; PushButtion
Switch(DCID)
Case pb_KEY_OK
nSelection = DialogControlGet(KEY_Handle,pb_KEY_OK,dc_title)
Exit
Break
Case pb_KEY_Cancel
nSelection = DialogControlGet(KEY_Handle,pb_KEY_Cancel,dc_title)
Exit
Break
EndSwitch
Break
EndSwitch
Switch(a_answer)
Case 0
Break
Case 1
message("HELLO","You pressed F1")
Break
Case 2
message("HELLO","You pressed F2")
Break
Case 3
message("HELLO","You pressed F3")
Break
Case 4
message("HELLO","You pressed F4")
Break
Case 5
message("HELLO","You pressed F5")
Break
Case 6
message("HELLO","You pressed F6")
Break
Case 7
message("HELLO","You pressed F7")
Break
Case 8
message("HELLO","You pressed F8")
Break
Case 9
message("HELLO","You pressed F9")
Break
Case 10
message("HELLO","You pressed F10")
Break
Case 11
message("HELLO","You pressed F11")
Break
Case 12
message("HELLO","You pressed F12")
Break
Case 13 ;INSERT
message("HELLO","You pressed INSERT")
Break
Case 14 ;DELETE
message("HELLO","You pressed DELETE")
Break
EndSwitch
a_answer = 0
Return -2
#EndSubRoutine
Return