Modal Window Workaround(Win XP-Vista-7)

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: Modal Window Workaround(Win XP-Vista-7)

Post by RASHAD »

Thanks guys

Code has been revised
Optimized and it is now in good shape

Code: Select all

Structure KBDLLHOOKSTRUCT
   vkCode.l
   scanCode.l
   flags.l
   time.l
   dwExtraInfo.l
 EndStructure
 
 Global r.RECT,p.POINT 

Procedure HookMK(nCode,wParam,lParam)
  *key.KBDLLHOOKSTRUCT = lparam
  
  If wParam=#WM_LBUTTONDOWN Or wParam=#WM_LBUTTONUP Or wParam=#WM_LBUTTONDBLCLK Or wParam=#WM_RBUTTONDOWN Or wParam=#WM_RBUTTONUP Or wParam=#WM_RBUTTONDBLCLK
      If Not PtInRect_(@r,PeekQ(@p))
        ProcedureReturn 1
      EndIf
  EndIf      

  If *key\vkCode = #VK_LWIN Or *key\vkCode = #VK_RWIN Or *key\vkCode = #VK_LCONTROL Or *key\vkCode = #VK_RCONTROL Or (*key\vkCode ! #VK_MENU And *key\vkCode = #VK_TAB ) Or (*key\vkCode ! #VK_MENU And *key\vkCode = #VK_ESCAPE)
    ProcedureReturn 1
  EndIf
 
   ProcedureReturn CallNextHookEx_(0,nCode,wParam,lParam)   
EndProcedure

OpenWindow(1,0,0,400,300,"Modal Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StickyWindow(1,1) 
StringGadget(2,10,10, 200,24,"",#ES_CENTER)
ButtonGadget(3,10,270,80,22,"Exit")

MouseHook = SetWindowsHookEx_(#WH_MOUSE_LL,@HookMK(),GetModuleHandle_(0),0)
KeyHook = SetWindowsHookEx_(#WH_KEYBOARD_LL,@HookMK(),GetModuleHandle_(0),0)

Repeat
  SetForegroundWindow_(WindowID(1))
  GetCursorPos_(@p.point)
  GetWindowRect_(WindowID(1),r.RECT)
  Select WaitWindowEvent()
      
    Case #PB_Event_CloseWindow
        Q = 1
       
    Case #PB_Event_Gadget
        Select EventGadget()
          Case 2
            
          Case 3
            Q = 1
            
        EndSelect
  EndSelect 
Until Q =1
UnhookWindowsHookEx_(MouseHook)
UnhookWindowsHookEx_(KeyHook)

Egypt my love
Post Reply