Edwin_Drood_1870
Nov 8th, 2000, 10:00 PM
Is it possible to intercept a program's messages and alter them to trick the program into thinking it is getting a return when it is not really communicating with the other program?
rfo
Nov 9th, 2000, 06:41 AM
You can intercept the messages to a certain windowhandle.
You need either a subclasscontrol like SubClass from desaware or you can install it by yourself, using 'VB.AddressOf'.
This is a quite advanced topic, you can crash almost anything ...
Here is an example of SubClassing. It will intercept the Right-click of a TextBox, hence disabling the context menu.
Add the following to a Module.
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)
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
Const GWL_WNDPROC = (-4)
Const WM_RBUTTONDOWN = &H204
Const MK_RBUTTON = &H2
Public WndProcOld As Long
Public Function WindProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If wMsg = WM_RBUTTONDOWN And wParam = MK_RBUTTON Then
Exit Function
End If
WindProc = CallWindowProc(WndProcOld&, hwnd&, wMsg&, wParam&, lParam&)
End Function
Sub SubClassWnd(hwnd As Long)
WndProcOld& = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindProc)
End Sub
Sub UnSubclassWnd(hwnd As Long)
SetWindowLong hwnd, GWL_WNDPROC, WndProcOld&
WndProcOld& = 0
End Sub
Add the following to a Form with a TextBox.
Private Sub Form_Load()
SubClassWnd Text1.hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnSubclassWnd Text1.hwnd
End Sub
Edwin_Drood_1870
Nov 9th, 2000, 03:38 PM
Thanks Megatron and rfo. One more question about this...
Say I have a window that I know is going to recieve a kill sendmessage. How would I implement this to intercept the message (thus keeping the window from closing) if the hwnd of the window is something like "121232"