让我把场景的需求...
1.我们的windows应用程序正在运行,假设它有Form1,Form2这样的表单...... 2.从Outlook-Plugin(自定义插件)中我们想在已经运行的windows应用程序中打开Form1的某些特定操作...... .
正如我们从 System. 诊断我们可以知道系统的活动进程。有了这个,我能够找到运行 Windows 应用程序的进程,但不确定如何在该应用程序中打开新表单....帮助,谢谢
让我把场景的需求...
1.我们的windows应用程序正在运行,假设它有Form1,Form2这样的表单...... 2.从Outlook-Plugin(自定义插件)中我们想在已经运行的windows应用程序中打开Form1的某些特定操作...... .
正如我们从 System. 诊断我们可以知道系统的活动进程。有了这个,我能够找到运行 Windows 应用程序的进程,但不确定如何在该应用程序中打开新表单....帮助,谢谢
您可以在主窗体中添加一个按钮,该按钮打开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