0
我試圖去工作EnumThreadWindows一個電話,但我總是得到一個錯誤的參數錯誤,雖然我的代碼是this example on pinvoke.net幾乎相同。 我不知道爲什麼這不起作用:調用Win32的EnumThreadWindows()在C#
public static IntPtr FindMsgBoxFrom(IntPtr MainHWND)
{
SetLastError(0);
uint ThreadID = GetThreadID(MainHWND);
EnumThreadWindows(ThreadID, new WNDENUMPROC(decoder.FindMsgBox), IntPtr.Zero);
int last = Marshal.GetLastWin32Error();
if (last != 0)
MessageBox.Show("EnumThreadWindows-Error:\n" + GetLastErrorString());
return MSGHWND;
}
,這是decoder.FindMsgBox
:
public static bool FindMsgBox(IntPtr hwnd, IntPtr lparam)
{
if (IsMsgBox(hwnd))
{
MSGHWND = hwnd;
return false;
}
else
return true;
}
}
有什麼問題呢?
請包括您的EnumThreadWindows聲明和WNDENUMPROC委託。此外,如果您可以包含更多有用的錯誤信息。例如,你是否得到編譯時或運行時錯誤? 從託管代碼調用SetLastError毫無意義。 – 2009-11-10 15:30:43
哦對不起,我忘了: [DllImport(「user32.dll」,SetLastError = true)] public static extern bool EnumThreadWindows(uint dwThreadId,WNDENUMPROC lpfn,IntPtr lParam); 公共委託布爾WNDENUMPROC(IntPtr的的HWND,IntPtr的LPARAM); 和我得到的錯誤,當我打電話Marshal.GetLastWin32Error(); 並使用FormatMessage格式化 – alex 2009-11-10 15:40:05
用新信息編輯您的問題。評論沒有格式,所以幾乎不可能閱讀。 – ChrisF 2009-11-10 21:43:33