تنها راه ممکن استفاده از تکنیک SubClssing هست
یعنی باید پیامهای ارسالی به پنجرهی Flash رو بگیرید و اضافی ها رو تعطیل کنید!
1. frmMain.frm
Private Sub Form_Load()
Dim FlashHwnd As Long
Dim strAppPath As String
'Find the Fash ActiveX window handle
FlashHwnd = FindWindowEx(hwnd, 0&, "MacromediaFlashPlayerActiveX" & vbNullChar, vbNullString)
'Find old callback address to send messages to
OldWindowProc = GetWindowLong(FlashHwnd, -4&)
'Assign new callback address to Flash window
SetWindowLong FlashHwnd, -4&, AddressOf myCallBack
'Load Flash movie
strAppPath = App.Path
If Len(strAppPath) = 3 Then strAppPath = Left(strAppPath, 2)
With ShockwaveFlash1
.Left = 0
.Top = 0
.Width = 640
.Height = 480
.Movie = strAppPath & "\oVERfLOW.swf"
.Play
End With
End Sub
2. modMain.bas
Option Explicit
Public OldWindowProc As Long
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_KEYUP = &H101
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Function myCallBack(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long
'Detect if message is Right-Click
If Msg = WM_RBUTTONUP Or Msg = WM_RBUTTONDOWN Then
myCallBack = 1 'Return that message was processed
Exit Function
ElseIf Msg = WM_KEYUP And wp = 27 Then 'If Esc key pressed
myCallBack = 1
Unload frmMain
Exit Function
End If
'Send other messages to original WindowProc
myCallBack = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)
End Function