TatsuSheva Ответов: 1

Показать калькулятор windows на winform


Здравствуйте, я смог показать блокнот в Winform с помощью панели и вставить его в форму, как этот код ниже, и с помощью SetParent API:
[DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

Process proc = Process.Start(
    new ProcessStartInfo()
    {
                                                   //here I put notepad.exe and it works   
        FileName = Environment.GetEnvironmentVariable("windir") + @"\system32\calc.exe", 
        WindowStyle = ProcessWindowStyle.Minimized
    });
            Thread.Sleep(200);
           
            SetParent(proc.MainWindowHandle, this.panel1.Handle);


Что я уже пробовал:

Моя проблема заключается в калькуляторе, я не могу показать калькулятор в winform, он показывает мне ошибку.(Система.Исключение InvalidOperationException)
Спасибо.

Richard MacCutchan

Система.InvalidOperationException означает, что какая-то инструкция в вашем коде сделала что-то незаконное. Часто это происходит из-за перехода в место, которое не содержит действительной инструкции, даже если она находится в адресном пространстве вашего приложения. Единственный способ исправить это-использовать свой отладчик, чтобы выяснить, где и почему это произошло.

TatsuSheva

Можно ли показать калькулятор в WinForm ? Ошибка происходит здесь setparent осуществляет(тез.Докл.MainWindowHandle, это.панель1.Ручка); но когда я снимаю нить.Sleep (200); калькулятор появляется, но не в winform

Richard MacCutchan

Я не думаю, что приложения Windows разрабатываются с учетом этого, поэтому не гарантируется, будут ли они работать в такой среде.

BillWoodruff

Взгляните на использование средства автоматизации Windows для этого; есть полная статья о CodeProject по автоматизации Calc.exe:

http://www.codeproject.com/Articles/141842/Automate-your-UI-using-Microsoft-Automation-Framew

Richard Deeming

Вы используете Windows 10? Насколько мне известно, на рабочем столе приложения "Калькулятор" уже не существует. Если ты побежишь calc.exe вместо этого он запускает калькулятор "современного приложения".

Win32 API почти наверняка не будет работать с "современным приложением".

TatsuSheva

Вы правы... Последнее решение-создать свой собственный калькулятор

Philippe Mori

Вы не должны этого делать. Приложения Windows не предназначены для использования в качестве дочернего приложения другого приложения. Если вам нужен калькулятор в вашем собственном приложении, то создайте свой собственный. Кроме того, используя существующее приложение, у вас может возникнуть проблема с отображением, и приложение может выглядеть странно, если оба приложения не используют один и тот же внешний вид (цвет, размер, форма...) и, таким образом, ваше приложение выглядит очень непрофессионально.

Maciej Los

Согласитесь!

BillWoodruff

Если вы используете Windows 10, вы можете получить старый Calc.exe назад:

http://winaero.com/blog/get-calculator-from-windows-8-and-windows-7-in-windows-10/

Однако, хотя я думаю, что это может сработать так же, как и до Win 10, я не совсем уверен в этом.

TatsuSheva

Спасибо, это работает.

BillWoodruff

К вашему сведению: у CodeProject есть несколько проектов калькуляторов для WinForms, которые вы можете использовать, например этот:

http://www.codeproject.com/Tips/853405/A-Simple-Calculator-in-Windows-Forms

1 Ответов