Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Global selective blocking for popup menu options.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Global selective blocking for popup menu options.

    Heres the utility i added to my security application.

    Code:
    '=================================================================================================================='
    '                                                                                                                  '
    '  PopupBlock.Bas Popup menu option selective blocking.    By: Elias Montoya                                       '
    '  Thanx to Peter Jinks                                                                                            '
    '                                                                                                                  '
    '  Tested with PB 8.04                                                                                             '
    '                                                                                                                  '
    '  Public domain source code.                                                                                      '
    '                                                                                                Jan 10 2009.      '
    '==================================================================================================================
    #COMPILE EXE
    #DIM ALL
    #INCLUDE "WIN32API.INC"
    '==================================================================================================================
    TYPE BlockData
     Active   AS LONG
     hStrings AS STRING * 2048
    END TYPE
    
    GLOBAL CYI  AS BLOCKDATA
    '==================================================================================================================
    FUNCTION WinEventFunc(BYVAL HookHandle AS LONG, BYVAL LEvent AS LONG, BYVAL hWnd AS LONG, BYVAL idObject AS LONG, BYVAL idChild AS LONG, BYVAL idEventThread AS LONG, BYVAL dwmsEventTime AS LONG) AS LONG
    
       LOCAL hmenu AS LONG
       LOCAL Index AS LONG
       LOCAL nMax  AS LONG
       LOCAL szString AS ASCIIZ * 256
       LOCAL TM AS STRING
       STATIC hMemory AS DWORD
       LOCAL CYI AS BLOCKDATA PTR
       LOCAL Itm AS LONG
    
       IF ISFALSE(hMemory) THEN
            hMemory = SendMessage(FindWindow(BYVAL %Null, "Popup Options blocker"), 19923, 2991, 3909)
       END IF
    
       IF ISFALSE(hMemory) THEN EXIT FUNCTION
    
       CYI = hMemory
    
       IF ISFALSE(@CYI.Active) THEN EXIT FUNCTION
    
       LOCAL TS AS STRING
       TS = TRIM$(@CYI.hStrings, ANY CHR$(0,32))
    
       IF ISFALSE(LEN(TS)) THEN EXIT FUNCTION
       
       DIM KW(1 TO PARSECOUNT(TS, ",")) AS LOCAL STRING
       PARSE TS, KW(), ","
    
       hMenu = SendMessage(hWnd, &h01E1, 0,0)
    
       IF ISFALSE(IsMenu(hMenu)) THEN EXIT FUNCTION
    
       nMax = GetMenuItemCount(hMenu)
    
       FOR Index = 0 TO nMax
        CALL GetMenuString(hMenu, Index, szString, 256, %MF_BYPOSITION)
        TM = UCASE$(TRIM$(szString, ANY CHR$(0,32)))
            FOR Itm = 1 TO UBOUND(KW())
                 IF LEN(TRIM$(KW(Itm))) THEN
                     IF INSTR(TM, UCASE$(TRIM$(KW(Itm)))) THEN
                        EnableMenuItem(hMenu, Index, %MF_BYPOSITION OR %MF_DISABLED OR %MF_GRAYED)
                        EXIT FOR
                     END IF
                 END IF
            NEXT Itm
       NEXT Index
    
       FUNCTION = %TRUE
    
    END FUNCTION
    '==================================================================================================================
    CALLBACK FUNCTION DialogProc()
    
      LOCAL Result AS LONG
      STATIC LHook AS DWORD
      
      SELECT CASE CBMSG
        CASE %WM_INITDIALOG
            LHook = SetWinEventHook(%EVENT_SYSTEM_MENUPOPUPSTART, %EVENT_SYSTEM_MENUPOPUPSTART, 0, _
                                    CODEPTR(WinEventFunc), 0, 0, %WINEVENT_OUTOFCONTEXT OR %WINEVENT_SKIPOWNTHREAD)
                                    
        CASE %WM_DESTROY
            Result = UnhookWinEvent(LHook)
            
        CASE 19923
            IF ISTRUE(CBWPARAM=2991) AND ISTRUE(CBLPARAM=3909) THEN
                FUNCTION = VARPTR(CYI)
                EXIT FUNCTION
            END IF
    
        CASE %WM_COMMAND
            IF CBCTL = 103 THEN
                CONTROL GET TEXT CBHNDL, 102 TO CYI.hStrings
                CYI.Active = %TRUE
                MSGBOX "Ok, now go and open a menu that contains one of the blocked keywords in another program!" & $CRLF & _
                       "" & $CRLF & _
                       "Note: Some options may not be enabled until the next time the host program of the " & $CRLF & _
                       "popup menu is restarted. Don't open any popup menus in programs you dont want to restart.",%MB_ICONINFORMATION,"Filter is ready."
            END IF
      END SELECT
    END FUNCTION
    '==================================================================================================================
    FUNCTION PBMAIN () AS LONG
    
      LOCAL hDlg AS DWORD
      DIM   CYI  AS GLOBAL BLOCKDATA
      
      DIALOG NEW 0, "Popup Options blocker", ,, 155, 70, %WS_SYSMENU TO hDlg
    
      CONTROL ADD LABEL,   hDlg, 101, "Key items to block separated with comma.", 5,  6, 134, 12, 0
      CONTROL ADD TEXTBOX, hDlg, 102, "cut,copy,properties", 5,  20, 140, 12, 0
      CONTROL ADD BUTTON,  hDlg, 103, "Block!", 55, 34, 40, 14, %BS_DEFAULT
    
     DIALOG SHOW MODAL hDlg, CALL DialogProc
    
    
    END FUNCTION
    '==================================================================================================================
Working...
X