Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Sub AddFormsData(ByVal hWnd As Long)
Dim hAppForm As AppForm
FormsCount = FormsCount + 1
hAppForm.hWnd = hWnd
hAppForm.hOwnWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf FormWndProc)
'отладка
MsgBox "Перезаписан!"
ReDim Preserve FormsData(1 To FormsCount)
FormsData(FormsCount) = hAppForm
End Sub
Public Function FormWndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim hAppForm As AppForm, hFormWndProc As Long
hAppForm = FindFormData(CStr(hWnd))
hFormWndProc = hAppForm .hOwnWndProc
On Error Resume Next
Select Case Msg
Case WM_NOTIFY
Select Case lParam
.........................
End Select
Case WM_LBUTTONDOWN
..............
Case Else
End Select
FormWndProc = CallWindowProc(hFormWndProc, hWnd, Msg, wParam, lParam)
End Function
the exception Floating-point inexact result (0xc000008f)
Sebas писал(а):AppForm - это что?
tyomitch писал(а):Нет никакой защиты. Всё должно бы работать...
А может это у тебя Native DLL?
GSerg писал(а):А это случаем не apartment-threading компонент, который там юзает всякие межпроцессные переходнички, в результате чего возникают всякие проблемы с адресным пространством?
Windows NT/2000/XP: You cannot change this attribute if the window does not belong to the same process as the calling thread.
tyomitch писал(а):Чего-то топик превращается в монолог... Плохая примета
tyomitch писал(а):зацени GetWindowThreadProcessId, SuspendThread/ResumeThread и сопутствующие функции...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12