日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在winform嵌入外部应用程序

發布時間:2025/3/19 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在winform嵌入外部应用程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 應朋友要求,需要將一個第三方應用程序嵌入到本程序WinForm窗口,以前在VB6時代做過類似的功能,其原理就是利用Windows API中FindWindow函數找到第三方應用程序句柄,再利用SetParent函數,將該句柄設置為本窗口的子窗口。

? ? ? ? 網上搜索大部分都是利用System.Diagnostics.Process獲取外部應用程序的MainWindowHandle,貌似以前的COM應用程序可以,在Win10下調用Process.MainWindowHandle會提示“應用程序已退出”,也就是獲取不到應用程序句柄。于是轉換思路,利用FindWindow查找窗口句柄,測試成功。

? ? ? ? 但是需要注意的是,有些第三方應用程序對訪問權限要求高,需要“以管理員身份運行"/bin/debug"下的exe文件才能成功嵌入,代碼調試無效,調試模式調用SetParent會返回-5錯誤。

? ? ? ? ?以下是部分代碼:

/// <summary>/// 將指定的程序嵌入指定的控件/// </summary>private void EmbedProcess(){string title = System.Configuration.ConfigurationManager.AppSettings["Title"];//要查找的外部應用程序窗口標題 IntPtr P = new IntPtr(0);while (true){P = FindWindow(null, title);//通過標題查找窗口句柄,當然也可以按class查找,如果需要查找子窗口需要FindWindowEx函數Thread.Sleep(100); if (P == IntPtr.Zero)continue;elsebreak;}try{// 將外部應用程序嵌入到本窗口 long ret = SetParent(P, this.panel1.Handle);if (ret == 0){MessageBox.Show("ErrorCode:"+ GetLastError().ToString());}// 移除邊框樣式 SetWindowLong(new HandleRef(this, P), GWL_STYLE, WS_VISIBLE);//移動窗口MoveWindow(P, 0, 0, this.Width, this.Height, true);}catch (Exception ex1){Console.WriteLine(ex1.Message);}}

? ??

? ? ?點擊這里下載源碼

?

? ? ? ?主要參考來源:

  http://blog.csdn.net/llddyy123wq/article/details/5624625

轉載于:https://www.cnblogs.com/habin/p/7815369.html

總結

以上是生活随笔為你收集整理的在winform嵌入外部应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。