我尝试编写一个简单的函数将Internet Explorer窗口置于前台,然后按F5使用dll函数刷新它:
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Integer) As Integer
然后使用以下方法调用此函数:
SetForegroundWindow(processID.MainWindowHandle.ToInt32)
SendKeys.Send("{F5}")
但是,当我尝试调试代码时,setforeground不起作用。
我正在使用Windows 2008(64位),所以我认为我应该使用ToInt64。然而,当我调用SetForegroundWindow时,似乎也没有做到这一点,似乎没有任何东西出现。
还有其他推荐吗?我正在使用VS 2008。
许多thnaks!
答案 0 :(得分:1)
P/Invoke signatures我可以发现建议参数应该是一个IntPtr,而不是一个大小的整数(哪种有意义 - 你不应该为32位和64位编写单独的代码):
<DllImport("user32.dll")> _
Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
此外,焦点问题非常难以调试,因为调试器窗口往往希望在所有时间重新获得焦点(例如,如果您单步,它可能将焦点设置在其他位置,然后立即重新获得焦点以显示下一个代码行)