Открыть калькулятор Windows в моем приложении C# Win?

Я знаю, что могу открыть калькулятор Windows со следующим кодом:

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

но я хочу открыть его в своем приложении C# Win, i.e: я не хочу открывать его в независимом окне, я хочу открыть его в своем окне.
Как я могу это сделать ?

6 ответов


вы не можете встроить другое приложение в свою форму.

однако вы можете переместить окно калькулятора поверх формы и установить форму в качестве родительской. Это может достичь визуального эффекта, который вы ищете. Вы можете проверить в setparent осуществляет функции API. Например:

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


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


вы можете pinvoke SetParent (), дескриптор дочернего окна должен быть процессом.MainWindowHandle Calc, родительское окно должно быть дескриптором окна, в которое вы хотите вставить его. Форма.Ручка дает вам значение. Вам также понадобится 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");