VB.NET/获取窗口的WndProc?
我正在尝试从打开的Windows资源管理器窗口获取WNDPROC。我可以成功获取窗口的句柄,但“GetWindowLongPtr”始终返回“0” 我宣布进入:VB.NET/获取窗口的WndProc?,vb.net,wndproc,hwnd,Vb.net,Wndproc,Hwnd,我正在尝试从打开的Windows资源管理器窗口获取WNDPROC。我可以成功获取窗口的句柄,但“GetWindowLongPtr”始终返回“0” 我宣布进入: <DllImport("user32.dll", EntryPoint:="GetWindowLongPtrW")> _ Public Shared Function GetWindowLongPtrW(ByVal hWnd As HandleRef, <MarshalAs(UnmanagedType.I8)&g
<DllImport("user32.dll", EntryPoint:="GetWindowLongPtrW")> _
Public Shared Function GetWindowLongPtrW(ByVal hWnd As HandleRef, <MarshalAs(UnmanagedType.I8)> ByVal nIndex As Long) As IntPtr
End Function
但是,WNDPROC MSGBOX始终返回0。。。我做错了什么?GetWindowLongPtrW声明错误,第二个参数是整数。如果使用错误,则必须通过-4才能获得WNDPROC值。而且您忘记了SetLastError,所以您也无法得到一个错误代码来告诉您做错了什么。使用pinvoke.net获得良好的pinvoke声明。@Hans Passant I在声明中添加了“SetLastError”,并且它也返回“0”。命令“Marshal.GetLastWin32Error”在尝试获取WNDPROC后返回“0”。这部分中的错误是:“Dim ist2作为新HandleRef(0,ist)”吗?
Dim ist As IntPtr
Dim mtm As IntPtr
Try
ist = FindWindow("CabinetWClass", vbNullString)
Dim ist2 As New HandleRef(0, ist)
MsgBox(ist)
mtm = GetWindowLongPtrW(ist2, 1)
MsgBox(mtm)
Catch ex As Exception
MsgBox("Erro :(" & vbCrLf & vbCrLf & ex.ToString)
End Try