2016-11-03 33 views
0

コミュニティ全体に適しています。私はVisual Studio 2015、C#とWPFテクノロジーで作業しています。メモ帳などの第三者システムの別のウィンドウシステムである自分のプログラムのウィンドウに埋め込む必要があります。WPFウィンドウ内にアプリケーションを埋め込む

回答はhereでした(申し訳ありませんがサイトはスペイン語です)が、Windowsフォームでのみ動作します。

これは私のコードです。

//get the third party window 
public static IntPtr getWindow(string titleName) 
{ 
    Process[] pros = Process.GetProcesses("."); 
    foreach (Process p in pros) 
     if (p.MainWindowTitle.ToUpper().Contains(titleName.ToUpper())) 
     return p.MainWindowHandle; 
     return new IntPtr(); 
} 

//Get my own window 
IntPtr ptr = new WindowInteropHelper(this).Handle; 

//a window embedded within the other 
[DllImport("user32.dll")] 
     public extern static IntPtr SetParent(IntPtr hWnChild, IntPtr hWndNewParent); 

私が言ったように、それはWindowsフォームでは機能しますが、WPFでは機能しません。誰かが私を助けることができますか?

+0

を移動して再描画する方法である、あなただけ正しく一緒にコードを配置する必要があります。 –

答えて

0

ここにコードがあります。問題は、位置、幅、高さを設定し、新しい親ウィンドウで子ウィンドウを再描画する必要があることでした。

public void CapturarApp() 
     { 
      hWndApp = ScreenFuntion.getWindow("Notepad"); 
      if (hWndApp.ToInt32() > 0) 
      { 
       ProgramsEncrustForm.MoveWindow(hWndApp, 
        0, 0, 
        Int32.Parse(Width.ToString()), 
        Int32.Parse(Height.ToString()), 1); 
       ProgramsEncrustForm.SetParent(hWndApp, new WindowInteropHelper(this).Handle); 
      } 
      else 
      { 
       hWndApp = IntPtr.Zero; 
      } 
      this.Show(); 
     } 

そして、ここであなたがほとんど存在窓

[System.Runtime.InteropServices.DllImport("user32.dll")] 
public extern static int MoveWindow(IntPtr hWnd, int x, int y, 
    int nWidth, int nHeight, int bRepaint); 
+0

私はあなたの質問に答えていると思いますが、あなたのウィンドウにそれを追加した後でメモ帳の位置を変えることもできるかもしれないと思っています(http://stackoverflow.com/a/40410219/3110834)。 。この目的のためにSetWindowPosメソッドを使うことができます*。そのような場合は、あなた自身の答えを投稿する必要はありませんあなたはあなたの質問に答えた人が解決策を適用することに問題があれば教えてくれて以来、ソリューションを適用する方法についていくつかのコメントを投稿することができます* 。答えに 'SetWindowPos'を追加しました。 –

関連する問題