Открыть калькулятор 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();
}
}