10

次のコードで Windows Calculator を開くことができることを知っています。

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

しかし、私は自分の C# Win アプリケーションでそれを開きたいです。つまり、独立したウィンドウで開きたくないので、自分のウィンドウで開きたいのです。
どうすればできますか?

4

6 に答える 6

14

別のアプリケーションをフォームに埋め込むことはできません。

ただし、電卓ウィンドウをフォームの上に移動して、フォームを親として設定することはできます。これにより、探している視覚効果が得られる場合があります。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

于 2010-11-06T15:44:48.470 に答える
5

SetParent()をピンボークできます。子ウィンドウのハンドルはCalcのProcess.MainWindowHandleである必要があり、親ウィンドウはそれを埋め込むウィンドウのハンドルである必要があります。Form.Handleはあなたにその価値を与えます。ウィンドウを適切な場所に配置するには、MoveWindowも必要です。pinvoke.netを使用して、必要なpinvoke宣言を取得します。

于 2010-11-06T16:03:25.093 に答える
5

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

于 2010-11-06T15:41:19.503 に答える
2

以下で試してください。私のために走ってください。

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

        }
    }
于 2016-09-09T06:37:14.750 に答える
1
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);
            }
     }
于 2016-06-27T11:38:34.283 に答える