0

让我把场景的需求...

1.我们的windows应用程序正在运行,假设它有Form1,Form2这样的表单...... 2.从Outlook-Plugin(自定义插件)中我们想在已经运行的windows应用程序中打开Form1的某些特定操作...... .

正如我们从 System. 诊断我们可以知道系统的活动进程。有了这个,我能够找到运行 Windows 应用程序的进程,但不确定如何在该应用程序中打开新表单....帮助,谢谢

4

1 回答 1

0

您可以在主窗体中添加一个按钮,该按钮打开Form1并使用 WinAPI 模拟单击​​它。

[DllImport("user32.dll", EntryPoint="FindWindowExW",  SetLastError=true,
    CharSet=CharSet.Unicode)]

public static extern IntPtr FindWindowEx( IntPtr Ph,IntPtr Ch,
    IntPtr Ph1,
    String lpWindowName);

System.IntPtr hwnd = FindWindowEx(IntPtr.Zero,IntPtr.Zero,IntPtr.Zero,"Form1");
    System.IntPtr ptrChild = GetWindow(this.Handle, GW_CHILD) ;
    while(!ptrChild.Equals(IntPtr.Zero))
    {
        if(ptrChild == FindWindowEx(hwnd,IntPtr.Zero,IntPtr.Zero,"button2"))
        {
            SendMessage(ptrChild, WM_LBUTTONDOWN, 0, IntPtr.Zero); 
            SendMessage(ptrChild, WM_LBUTTONUP, 0, IntPtr.Zero); 
            SendMessage(ptrChild, BM_SETSTATE,1 , IntPtr.Zero);
            break;
        }
        else
        {
            ptrChild = GetWindow(ptrChild, GW_HWNDNEXT) ;
        }
    }

有关FindWindowEx方法的信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms633500 (v=vs.85).aspx

于 2013-01-23T08:05:31.623 回答