Open Windows' Calculator in my C# Win Applicat

2019-02-13 05:56发布

I know I can open Windows Calculator with the following code :

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

But I wanna open it in my C# Win Application, i.e : I don't want to open it in the independent window, I wanna open it in my window.
How can I do it ?

6条回答
forever°为你锁心
2楼-- · 2019-02-13 06:36

MS Windows Calculator is not a GUI control, it is a standalone application. If you are looking for a .NET calculator control, there are some commercial controls from third party vendors, for example

here

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

or here

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

查看更多
手持菜刀,她持情操
3楼-- · 2019-02-13 06:38
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);
            }
     }
查看更多
叛逆
4楼-- · 2019-02-13 06:42
System.Diagnostics.Process.Start("calc.exe");
查看更多
手持菜刀,她持情操
5楼-- · 2019-02-13 06:43

You cannot embed another application into your form.

However, you can move the calculator window on top of your form and set your form as its parent. This might accomplish the visual effect that you're looking for. You might check into the SetParent API function. For example:

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

A better solution might be just to roll your own calculator control in C# if you really need that functionality embedded in your app. Banging together a simple calculator really isn't at all difficult, and its infinitely customizable to do and look exactly as you want.

Something like this, perhaps, would be a good starting point if you wanted to roll your own calculator: http://www.codeproject.com/KB/cs/Scientific_Calculator.aspx

And I've always thought this type of a control would be ridiculously useful someday if I ever wrote an app that relied heavily on numerical input: http://www.codeproject.com/KB/miscctrl/C__Popup_Calculator.aspx

查看更多
Evening l夕情丶
6楼-- · 2019-02-13 06:43

You can pinvoke SetParent(), the child window handle should be the Process.MainWindowHandle of Calc, the parent window should be the handle of the window in which you want to embed it. Form.Handle gives you that value. You'll also need MoveWindow to get the window in the right place. Use pinvoke.net to get the required pinvoke declarations.

查看更多
Viruses.
7楼-- · 2019-02-13 06:58

try below; run for me.

    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();

        }
    }
查看更多
登录 后发表回答