在我的C#Win应用程序中打开Windows计算器?

我知道我可以使用以下代码打开Windows Calculator:

System.Diagnostics.Process.Start("calc"); 

但是我想在我的C#Win应用程序中打开它,即:我不想在独立窗口中打开它,我想在我的窗口中打开它。
我该怎么做 ?

您无法在表单中嵌入其他应用程序。

但是,您可以将计算器窗口移动到表单顶部,并将表单设置为其父级。 这可能会实现您正在寻找的视觉效果。 您可以检查SetParent API函数。 例如:

 System.Diagnostics.Process p = System.Diagnostics.Process.Start("calc.exe"); p.WaitForInputIdle(); NativeMethods.SetParent(p.MainWindowHandle, this.Handle); 

如果您真的需要嵌入在应用程序中的function,更好的解决方案可能只是在C#中使用自己的计算器控件。 一起使用一个简单的计算器并不困难,它可以无限制地定制,并且看起来完全符合您的要求。

如果你想推出自己的计算器,这样的事情可能是一个很好的起点: http : //www.codeproject.com/KB/cs/Scientific_Calculator.aspx

如果我曾经写过一个严重依赖于数字输入的应用程序,我一直认为这种类型的控件有一天会非常有用: http : //www.codeproject.com/KB/miscctrl/C__Popup_Calculator.aspx

MS Windows Calculator不是GUI控件,它是一个独立的应用程序。 如果您正在寻找.NET计算器控件,例如,有一些来自第三方供应商的商业控件

这里

http://download.cnet.com/Softgroup-Net-Calculator-Control/3000-10250_4-10909672.html

或者在这里

http://www.softpedia.com/get/Programming/Components-Libraries/Net-Calculator-Control.shtml

您可以对SetParent()进行pinvoke,子窗口句柄应该是Calc的Process.MainWindowHandle,父窗口应该是要嵌入它的窗口的句柄。 Form.Handle为您提供了这个价值。 您还需要MoveWindow才能将窗口放在正确的位置。 使用pinvoke.net获取所需的pinvoke声明。

 using System.Diagnostics; try { Process p = null; if (p == null) { p = new Process(); p.StartInfo.FileName = "Calc.exe"; p.Start(); } else { p.Close(); p.Dispose(); } } catch (Exception e) { MessageBox.Show("Excepton" + e.Message); } } 

尝试以下; 为我而战。

  using System.Diagnostics; private void button1_Click(object sender, EventArgs e) { string filename= "calc.exe"; Process runcalc= Process.Start(filename); while (runcalc.MainWindowHandle == IntPtr.Zero) { System.Threading.Thread.Sleep(10); runcalc.Refresh(); } } 
 System.Diagnostics.Process.Start("calc.exe");