我想在C#中获取outlook活动窗口句柄(hwnd)。我想将此用于SendMessage()方法,该方法将hwnd作为第一个参数。 Outlook是开放的,而不是最小化。试图这样做.. dynamic winHwnd = Globals.ThisAddIn.Application.ActiveWindow(); 不适用于类型不匹配。即使我转换它也不起作用。有人建议我得到这个处理程序..
答案 0 :(得分:1)
也许您可以通过使用系统Api FindWindow来尝试使用通用方法来获取您感兴趣的窗口名称:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
IntPtr hWnd = (IntPtr)FindWindow(windowName, null);
从ActiveWindow你可以尝试:
dynamic activeWindow = Globals.ThisAddIn.Application.ActiveWindow();
IntPtr outlookHwnd = new OfficeWin32Window(activeWindow).Handle;
答案 1 :(得分:1)
您可能想要使用GetActiveWindow api函数。
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
IntPtr handle = GetActiveWindow();
尝试并最小化窗口以查看您是否获得了正确的句柄。
private const int SW_SHOWMINIMIZED = 2;
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow)
ShowWindowAsync(hWnd, SW_SHOWMINIMIZED);
答案 2 :(得分:0)
将Inspector对象强制转换为IOleWindow接口并调用IOleWindow :: GetWindow。这同样适用于Explorer对象。