Автор вопроса: SDL | Web-сайт:StarTeleport.Narod.Ru | ICQ: 272678283
Пишу DLL для глобального хука.
Public Type CREATESTRUCT
lpCreateParams As Long
hInstance As Long
hMenu As Long
hWndParent As Long
cy As Long
cx As Long
y As Long
x As Long
style As Long
lpszName As String
lpszClass As String
ExStyle As Long
End Type
Public Type CBT_CREATEWND
lpcs As CREATESTRUCT
hWndInsertAfter As Long
End Type
Public mhHook As Long
Вот CallBack-функция:
Public Function CallBackProc(ByVal cHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim CW As CBT_CREATEWND
Dim whWnd As Long
If cHook < 0 Then CallBackProc = CallNextHookEx(mhHook, cHook, wParam, lParam): Exit Function
If cHook <> HCBT_CREATEWND Then CallBackProc = 0: Exit Function
whWnd = wParam
CopyMemory CW, ByVal lParam, Len(CW)
App.LogEvent mhHook
CallBackProc = 0
CallNextHookEx mhHook, cHook, wParam, lParam
End Function
Клиент вылетает на CopyMemory!
------------------------------
В чем дело?
---------
Первое и не относящееся к делу, ты не верно юзаешь хук, так если мессага не CBT_CREATEWND, то ты рвешь очередь ((
---------
Вроде теперь не рву (см. ниже)
Public Function CallBackProc(ByVal cHook As Long, ByVal wParam As Long, lParam) As Long
Dim CW As CBT_CREATEWND
Dim whWnd As Long
If cHook < 0 Then CallBackProc = CallNextHookEx(mhHook, cHook, wParam, lParam): Exit Function
If cHook = HCBT_CREATEWND Then
whWnd = wParam
CopyMemory CW, ByVal lParam, Len(CW)
If lParam.lpcs.lpszName = "Stupid" Then CallBackProc = 1 Else CallBackProc = 0
Else
CallBackProc = CallNextHookEx(mhHook, cHook, wParam, lParam)' <-- А нужно ли МНЕ возвращать результат?
End If
End Function
---------
А с КопиМемори - вроде все нормально, но это надо посмотреть как она у тебя объявлена... закинь сюда еще и ее декларацию...
---------
А вот и декларация:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)