نقل قول نوشته شده توسط محسن واژدی مشاهده تاپیک
سلام
راههای مختلفی وجود دارد، که مطمئن ترین آنها sub-classing است
برای اینکار یک ماژول به برنامه اضافه و کدهای زیر را در آن کپی کنید:

Option Explicit
Private 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
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Private lPProc&
Public Sub OldWindowProc(tTextBox As TextBox)
lPProc& = SetWindowLong(tTextBox.hWnd, GWL_WNDPROC, AddressOf NoPopupWindowProc)
End Sub

Private Function NoPopupWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_CONTEXTMENU = &H7B
Const WM_DESTROY = &H2

If msg = WM_CONTEXTMENU Then
Exit Function
ElseIf msg = WM_DESTROY Then
SetWindowLong hWnd, GWL_WNDPROC, lPProc&
Else
NoPopupWindowProc = CallWindowProc(lPProc&, hWnd, msg, wParam, lParam)
End If

End Function



استفاده:
Private Sub Form_Load()
Call OldWindowProc(Text1)
End Sub


البته توجه داشته باشین که در استفاده از توابع هوک احتمال بسته شدن ناگهانی وی بی وجود دارد، پس برای جلوگیری از این اتفاق حتما از دستور unload یا فشردن کلید Close برای بستن برنامه استفاده کنید تا دستور یا دکمه End

موفق باشید
سلام ب همه.
من می خوام تابع SetWindowLong رو در VB.Net استفاده کنم اما مشکلی که هست برای ورودی dwNewLong AsLong دستور AddressOf رو پشتیبانی نمی کنه آیا نحوه استفاده از تابع در VB.Net تغییر کرده یا باید از تابع API دیگه ای استفاده بشه؟