

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 SubPublic 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 Functionthe 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 и сопутствующие функции...
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 12