代码之家  ›  专栏  ›  技术社区  ›  Mohammad Dayyan

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

  •  8
  • Mohammad Dayyan  · 技术社区  · 15 年前

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

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

    6 回复  |  直到 15 年前
        1
  •  13
  •   Cody Gray Felix    15 年前

    不能将其他应用程序嵌入到窗体中。

    但是,您可以移动窗体顶部的计算器窗口,并将窗体设置为其父窗体。这可能会达到你想要的视觉效果。你可以查一下 SetParent

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

    一个更好的解决方案可能是,如果你真的需要在你的应用程序中嵌入这种功能的话,你可以用C语言滚动你自己的计算器控件。把一个简单的计算器组合在一起其实一点都不难,而且它的无限可定制的功能和外观完全符合你的要求。

    如果你想使用自己的计算器,也许这样的方法是一个很好的起点: http://www.codeproject.com/KB/cs/Scientific_Calculator.aspx

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

        2
  •  5
  •   Doc Brown    15 年前

    MS-Windows计算器不是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

        3
  •  5
  •   Hans Passant    15 年前

        4
  •  1
  •   callmebob ani627    10 年前
    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);
                }
         }
    
        5
  •  1
  •   mui    9 年前

    在下面试试;替我跑。

        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();
    
            }
        }
    
        6
  •  1
  •   Ali Hamza    8 年前
    System.Diagnostics.Process.Start("calc.exe");