获取Outlook C#中的活动窗口句柄hwnd

时间:2016-04-22 08:03:19

标签: c# outlook sendmessage hwnd

我想在C#中获取outlook活动窗口句柄(hwnd)。我想将此用于SendMessage()方法,该方法将hwnd作为第一个参数。 Outlook是开放的,而不是最小化。试图这样做.. dynamic winHwnd = Globals.ThisAddIn.Application.ActiveWindow(); 不适用于类型不匹配。即使我转换它也不起作用。有人建议我得到这个处理程序..

3 个答案:

答案 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对象。