Здравствуйте и спасибо заранее всем, кто постарается помочь.
Я пытаюсь установить хук окон CBT, который работает хорошо, когда я устанавливаю его глобально, но не удается всякий раз, когда я пытаюсь присоединить его к одному потоку. Насколько я знаю, я делаю все по книге:
- Я выставил процедуру подключения с неуправляемой DLL
- мое приложение, DLL и процесс потока все 32-битные
- Идентификатор потока, который я использую, является правильным (подтверждено spy ++)
Когда я пытался подключить только один поток из кода C ++, мне удалось это сделать ... вы можете подключить один поток только из неуправляемого кода?
вот мой код в любом случае:
[DllImport( "user32.dll", SetLastError = true )]
static extern IntPtr SetWindowsHookEx ( int hookType, UIntPtr lpfn, IntPtr hMod, uint dwThreadId );
[DllImport( "kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true )]
public static extern UIntPtr GetProcAddress ( IntPtr hModule, string procName );
[DllImport( "kernel32", SetLastError = true, CharSet = CharSet.Unicode )]
public static extern IntPtr LoadLibrary ( string libraryName );
const int WH_CBT = 5;
void SetHook ()
{
IntPtr dll = LoadLibrary( LIBRARY );
UIntPtr proc = GetProcAddress( dll, PROC );
uint threadId = GetAppWindowThreadId();
//assume that the threadId of the external window is correct, as I said I verified with spy++
//and assume that dll and proc both get correct values
IntPtr hookAddress = SetWindowsHookEx( WH_CBT , proc, dll, threadId );
//hookAddress is 0
}