2010-02-19 48 views
0

我們正在研究一個執行低級別鍵盤鉤子的.Net應用程序。當我們調用在調試器內運行的SetWindowsHookEx時,調用總是失敗。在VS2008調試器中調用SetWindowsHookEx總是返回NULL

從編譯的可執行文件運行時,一切正常。如果我們附加到進程SetWindowsHookEx被稱爲一切都起作用。

我讀過的地方(我不記得),VS已經做了一個低級別的鍵盤鉤子,但這應該不會有問題,因爲有CallNextHook函數。

有人知道發生了什麼?

編輯:代碼是很straigfoward,異常引發內部調試器,但不是外部。

Public Sub New() 
    m_callback = New NativeMethods.KeyboardHookDelegate(AddressOf KeyboardCallback) 
End Sub 

Public Sub Start() 
    m_handle = NativeMethods.SetWindowsHookEx(NativeMethods.HookType.WH_KEYBOARD_LL, m_callback, Marshal.GetHINSTANCE(Reflection.Assembly.GetExecutingAssembly().GetModules()(0)).ToInt32, 0) 
    If m_handle = 0 Then 
     Throw New Exception() 
    End If 
End Sub 
+0

我從來沒有見過使用調試器時失敗。其他事情正在發生。郵政編碼,如果你需要幫助。 –

回答

2

猜測可能是VS運行可能會出現不同的反射.vshost.exe過程,但我不能肯定地說。我們使用'Process.GetCurrentProcess()。MainModule`來讓模塊通過。也許試試看。

+0

無論如何,我將使用您的Process.GetCurrentProcess()。MainModule,因爲看起來更清潔。 –

+0

當更改代碼時,我發現使用Int而不是InPtr時發生了PInvoke錯誤。我也開始使用GetModuleHandle。兩個事物並排使得應用程序在VS內部也起作用。 –

相關問題