Red de conocimiento informático - Material del sitio web - ¿Realmente no hay nadie en el mundo? Déjame preguntarte nuevamente cómo bloquear el clic derecho del control de flash en VB

¿Realmente no hay nadie en el mundo? Déjame preguntarte nuevamente cómo bloquear el clic derecho del control de flash en VB

Para manejar la interceptación con subclases, si desea agregar un menú personalizado, primero debe crear un menú en el formulario usando el editor de menús o crear un menú emergente usando la API. Escribí un código para ti. El siguiente código utiliza primero el editor de menús para crear un menú en el formulario.

powerbuilder

Módulo de formulario

Opción explícita

Función de declaración privada FindWindow Lib "user32 "alias" FindWindowA" (ByVal lpClassName es String , ByVal lpWindowName es una cadena) es Long

Función de declaración privada FindWindowEx Lib "user32 "alias" FindWindowExA "(ByVal hwnd 1 es Long, ByVal hWnd2 es Long, ByVal lpsz1 es String, ByVal lpsz2 es String) es Long

Private subform_Load()

Atenuar identificador como identificador de ventana largo

Dim ParentHandle As Long 'Identificador de ventana principal.

parenthandle = findwindow(" thunderformdc ", " form1 ")' para obtener el identificador de la ventana principal.

handle = FindWindowEx(ParentHandle, 0 amp, " MacroMediaFlashPlayActivex ", vbnullstring)' para obtener el identificador de la ventana.

ret = SetWindowLong(Handle, GWL_WNDPROC, AddressOf WindowProc)

Conector final

Módulo estándar

Opción explícita

Función de declaración pública CallWindowProc Lib "usuario 32" alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) long

Público función de declaración SetWindowLong Lib "usuario 32" alias "SetWindowLongA" (ByVal hwnd es Long, ByVal nIndex es Long, ByVal dwNewLong es Long) es Long

Función de declaración privada trackpupmenu Lib "usuario 32" (ByVal hMenu es Long, ByVal wFlags es Long, ByVal x es Long, ByVal y es Long, ByVal nReserved es Long, ByVal hwnd es Long, ByVal lprc es Any) es Long

Función de declaración privada GetCursorPos Lib "usuario 32" (punto LP como POINTAPI) es largo

Función de declaración privada GetMenu Lib "usuario 32" (ByVal hwnd As Long) tiene la misma longitud

Función de declaración privada obtener submenú Lib "usuario 32 " (ByVal hMenu es Long, ByVal nPos es Long)

Constante pública GWL_WNDPROC = (-4)

Constante privada TPM _LEFTALIGN = ampH0 amp;

Privada Constante WM _ RBUTTONDOWN = ampH204

Tipo privado POINTAPI

x siempre

Siempre que

tipo final

RECT Privado

Igual largo a la izquierda

Mismo largo arriba

Mismo largo

Mismo largo abajo

Tipo de finalización

Ret público As Long

Función de devolución de llamada SetWindowLong, utiliza Msg para interceptar mensajes.

La función WindowProc (ByVal hwnd es Long, ByVal Msg es Long, ByVal wParam es Long, ByVal lParam es Long) es Long

Si Msg = WM_RBUTTONDOWN, entonces

Dim pos es POINTAPI, hMenu es Long

GetCursorPos pos

hMenu = get submenu(get menu(form 1 . hwnd), 0)

TPM_LEFTALIGN , pos.x, pos.y, ByVal 0 amp, hwnd, ByVal 0 amp

Salir de la función

Terminará si...

WindowProc = CallWindowProc(ret, hwnd, Msg, wParam, lParam)

Función final

Depuré el código anterior en Windows XP VB6.