C#里调用系统计算器(calc.exe)的代码应该怎么写

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace CSharpWin04
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        Process pcalc = null;
        //启动计算器
        private void button1_Click(object sender, EventArgs e)
        {
            pcalc = Process.Start("calc.exe");
        }

        //获取文本框的结果
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);
        [DllImport("User32 ")]
        public static extern bool SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);
        public const int WM_GETTEXT = 0xD;
        private void button2_Click(object sender, EventArgs e)
        {
            if (pcalc == null || pcalc.HasExited) return;
            IntPtr hEdit = FindWindowEx(pcalc.MainWindowHandle, IntPtr.Zero, "Edit", null);
            string w = " ";
            IntPtr ptr = Marshal.StringToHGlobalAnsi(w);
            if (SendMessage(hEdit, WM_GETTEXT, 100, ptr))
            {
                MessageBox.Show(Marshal.PtrToStringAnsi(ptr));
            }
        }
    }
}

 

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace CSharpWin02
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        Process pcalc = null;
        //启动计算器
        private void button1_Click(object sender, EventArgs e)
        {
            pcalc = Process.Start("calc.exe");
        }

        //获取文本框的结果
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);
        [DllImport("User32 ")]
        public static extern bool SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);
        public const int WM_GETTEXT = 0xD;
        [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
        public static extern int SetForegroundWindow(IntPtr hwnd);
        private void button2_Click(object sender, EventArgs e)
        {
            if (pcalc == null || pcalc.HasExited) return;
            string result = "";//最终获得计算器的结果
            if (Environment.OSVersion.Version.Major >= 6)//win7 or vista
            {
                //vista or win7发送ctrl+c获取返回值
                SetForegroundWindow(pcalc.MainWindowHandle);
                SendKeys.Send("^(C)");
                result = Clipboard.GetText();
            }
            else
            {
                //xp或更早版本寻找对应控件获得返回值
                IntPtr hEdit = FindWindowEx(pcalc.MainWindowHandle, IntPtr.Zero, "#32770", null);
                string w = " ";
                IntPtr ptr = Marshal.StringToHGlobalAnsi(w);
                if (SendMessage(hEdit, WM_GETTEXT, 100, ptr))
                {
                    result = Marshal.PtrToStringAnsi(ptr);
                }
            }
            MessageBox.Show(result);
        }
    }
}

 

posted @ 2013-08-29 15:04  Net-Spider  阅读(1254)  评论(0)    收藏  举报