精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何嵌入第三方可執行程序

jf_xutpKvFS ? 來源:LabVIEW QT 修煉之路 ? 作者:LabVIEW QT 修煉之路 ? 2022-11-01 09:54 ? 次閱讀

LabVIEW:2015

你可能碰到過這種需求:需要在自己開發的應用程序中嵌入某個第三方的可執行程序,那么該如何實現呢?其實是很簡單的,借助Windows API,簡單幾步即可完成:

1. 找到待嵌入的窗體句柄,使用WinAPI:

HWND FindWindowA(

[in, optional] LPCSTR lpClassName,

[in, optional] LPCSTR lpWindowName

);

參數的詳細描述如下圖所示:

aecc237c-593d-11ed-a3b6-dac502259ad0.png

從描述中可以看到,通過窗口的標題來查找句柄是簡單可行的方式(當有多個標題相同的窗體時,需要用窗體類名來區分),但是此時 lpClassName需要傳入NULL值,但LabVIEW中并沒有辦法直接創建NULL值,參考官方給出的解決方案1是可行的(按照值傳遞的方式傳入0,大多數時候DLL會視作指針類型參數傳入的是NULL值),如下圖所示:

af0f4cec-593d-11ed-a3b6-dac502259ad0.png

于是封裝 FindWindowA() 函數如下圖所示:

af2ab964-593d-11ed-a3b6-dac502259ad0.png

af438d18-593d-11ed-a3b6-dac502259ad0.png

af605fd8-593d-11ed-a3b6-dac502259ad0.png

另外如果你想獲取任一窗體的類名和標題名,借用Spy++工具是很容易的,可以自行搜索下載,當然如果你按照了Visual Studio也是帶的有的,如下圖所示:

af6ef2fa-593d-11ed-a3b6-dac502259ad0.png

af84e8ee-593d-11ed-a3b6-dac502259ad0.png

比如將查找程序工具拖拽到TEST.exe的窗體標題欄上,如下圖所示:

afa07d0c-593d-11ed-a3b6-dac502259ad0.png

2.設置帶嵌入窗體的父窗體,使用WinAPI:

HWND SetParent(

[in] HWND hWndChild,

[in, optional] HWND hWndNewParent

);

參數的詳細描述如下圖所示:

afbdff76-593d-11ed-a3b6-dac502259ad0.png

這兩個參數比較簡單,無需多解釋,封裝 SetParent() 函數如下圖所示:

afdd0b00-593d-11ed-a3b6-dac502259ad0.png

b0018c6e-593d-11ed-a3b6-dac502259ad0.png

b018eb2a-593d-11ed-a3b6-dac502259ad0.png

那么如何獲取LabVIEW編寫的VI窗體句柄呢?這里提供兩種方式:

通過上面封裝的 FindWinowA() 函數,傳入窗體標題來獲取;

通過VI的Front Panel Window.Native Window屬性直接獲取,但是該屬性默認是隱藏的,需要在LabVIEW.ini配置文件中加上:SuperSecretPrivateSpecialStuff=True,重啟LabVIEW即可;

b02941dc-593d-11ed-a3b6-dac502259ad0.png

有了上述兩個API其實就已經可以把第三方exe嵌入到VI中了,但是窗體沒有重繪,效果可能是窗體已經嵌入但是是空白的(如下圖所示),需要自己拖動一下窗口或調整其大小才能恢復,另外嵌入時沒有辦法去控制嵌入的位置和窗體大小,顯然這并不夠完美,那么還需借助幾個API來達到理想的效果。

b0394a14-593d-11ed-a3b6-dac502259ad0.png

3. 獲取窗體的邊界尺寸,使用WinAPI:

BOOL GetWindowRect(

[in] HWND hWnd,

[out] LPRECT lpRect

);

參數詳細描述如下圖所示:

b04fbd8a-593d-11ed-a3b6-dac502259ad0.png

參數也比較簡單,只是第二個參數是一個結構體指針,這里需要用一個空類型指針來接收,傳入適配類型簇(包含四個Int32數值元素),封裝如下圖所示:

b0635ebc-593d-11ed-a3b6-dac502259ad0.png

b0748d5e-593d-11ed-a3b6-dac502259ad0.png

b086cf32-593d-11ed-a3b6-dac502259ad0.png

4. 移到窗體位置并設置大小,使用WinAPI:

BOOL MoveWindow(

[in] HWND hWnd,

[in] int X,

[in] int Y,

[in] int nWidth,

[in] int nHeight,

[in] BOOL bRepaint

);

參數詳細描述如下圖所示:

b09d9dfc-593d-11ed-a3b6-dac502259ad0.png

封裝如下圖所示:

b0b1cd90-593d-11ed-a3b6-dac502259ad0.png

b0c926de-593d-11ed-a3b6-dac502259ad0.png5.? ?

5.更改指定窗口的屬性,使用WinAPI:

LONG SetWindowLongA(

[in] HWND hWnd,

[in] int nIndex,

[in] LONG dwNewLong

);

詳細參數描述如下圖所示:

b0e2ad84-593d-11ed-a3b6-dac502259ad0.png

關于窗口樣式有很多種,這里不便展出,詳細請參考官方描述,鏈接如下:

https://learn.microsoft.com/zh-cn/windows/win32/winmsg/window-styles

封裝如下圖所示:

b1017160-593d-11ed-a3b6-dac502259ad0.png

b113e41c-593d-11ed-a3b6-dac502259ad0.png

6. 指定窗體的顯示狀態,使用WinAPI:

BOOL ShowWindow(

[in] HWND hWnd,

[in] int nCmdShow

);

詳細參數描述如下圖所示:

b124f126-593d-11ed-a3b6-dac502259ad0.png

封裝如下圖所示:

b13a382e-593d-11ed-a3b6-dac502259ad0.png

b1533e0a-593d-11ed-a3b6-dac502259ad0.png

7.發送指定消息到窗口,使用WinAPI:

LRESULT SendMessageA(

[in] HWND hWnd,

[in] UINT Msg,

[in] WPARAM wParam,

[in] LPARAM lParam

);

詳細參數如下圖所示:

b1622da2-593d-11ed-a3b6-dac502259ad0.png

官方文檔中提到更改窗口的父級時,應同步這兩個窗口的 UISTATE。有關詳細信息,請參閱WM_CHANGEUISTATE和WM_UPDATEUISTATE。封裝如下:

b172af56-593d-11ed-a3b6-dac502259ad0.png

b18cf686-593d-11ed-a3b6-dac502259ad0.png

嵌入一個LabVIEW開發的可執行程序如下圖所示:

b1a29c84-593d-11ed-a3b6-dac502259ad0.png

b1c5a878-593d-11ed-a3b6-dac502259ad0.png

嵌入Excel應用程序如下圖所示:

b1dae3dc-593d-11ed-a3b6-dac502259ad0.png

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • LabVIEW
    +關注

    關注

    1964

    文章

    3652

    瀏覽量

    322537
  • API
    API
    +關注

    關注

    2

    文章

    1487

    瀏覽量

    61829
  • 應用程序
    +關注

    關注

    37

    文章

    3245

    瀏覽量

    57614

原文標題:如何嵌入第三方可執行程序

文章出處:【微信號:LabVIEW QT 修煉之路,微信公眾號:LabVIEW QT 修煉之路】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Labview如何內嵌操作第三方EXE程序

    自己在網上搜了下相關資料,能把第三方EXE內嵌進入容器里,但是有個問題,這個第三方軟件必須手動拖到容器正中間,手動最大化。請問有什么方法可以自動實現嗎? 下圖是我內嵌的POLL 軟件。如圖!
    發表于 04-18 14:26

    如何打開第三方軟件

    請問大神們 誰知道如何在Labview中 打開第三方軟件,我現在想打開工程后 自動打開USB視頻采集卡,然后就直接顯示出采集卡采集到的圖像了請問如何打開在這先謝過了
    發表于 09-11 16:26

    如何把第三方庫加到PROTEUS中?

    新手求教,弱弱的問下,下了一個第三方庫,說是要先安裝,再添加路徑,可是我下來的第三方庫沒有看到安裝文件啊。還望指教如何添加!
    發表于 06-15 22:32

    如何在LabVIEW中嵌入第三方軟件界面

    如何把第三方軟件的界面嵌入到labview中,并且能夠在LabVIEW的前面板中對第三方軟件進行操作。LabVIEW中有Active用于IE回調的例子,可以在LabVIEW前面板中操作IE。想把IE換成
    發表于 04-27 23:06

    第三方dll調用問題!!!

    第三方dll,沒有.h,labview怎么實現調用,dll可以用VS打開,類庫說明也有
    發表于 05-11 09:14

    LabVIEW與第三方軟件交互問題

    現在做一個軟件,就是通過LabVIEW去與第三方軟件進行交互操作!已經通過百度找到了利用user32.dll調用FindWindowA與PostMessage去實現對計算器,找了多方資料也沒有找到解決辦法。想做一個軟件就是對圖片2中第三方軟件中控件進行控制的方法謝謝各位幫
    發表于 12-26 17:13

    下載python第三方

    python第三方庫的下載
    發表于 07-02 13:12

    國內知名第三方檢測認證機構排名

    的某個客體,我們把它叫作第三方第三方可以是和兩個主體有聯系,也可以是獨立于兩個主體之外,是由處于買賣利益之外的第三方(如專職監督檢驗機構),以公正、權威的非當事人身份,根據有關法律、標準或合同所進行
    發表于 07-19 16:57

    關于LabVIEW調用第三方exe,如何去控制第三方exe按鈕的問題

    我想調用第三方的exe,但并沒有給出任何接口,就單單一個exe程序,通過查資料得出可以用window自帶的user32.dll可以控制第三方的軟件,通過FindWindowA函數找到該軟件句柄,通過
    發表于 08-12 16:37

    頭文件中包含第三方文件

    macrocmake如果源文件(例如 CPP)中包含第三方頭文件,但是頭文件(例如 hpp)中不包含該第三方文件頭,采用 PRIVATE。如果源文件和頭文件中都包含該第三方文件頭,采用 PUBLIC
    發表于 08-18 08:10

    銀行和第三方支付:戀愛進行時

    銀行和第三方支付:戀愛進行時   北京2010年1月8日電  -- 從第三方支付誕生之時起,銀行與第三方支付之間的競合關系
    發表于 01-09 08:08 ?656次閱讀

    基于第三方信號無源探測系統研究

    文中主要討論了基于第三方信號檢測隱形目標的無源探測系統,并對偵察第三方信號作用距離和基于第三方信號無源探測系統的作用距離進行仿真,證明基于第三方信號無源探測系統在檢測
    發表于 03-01 15:35 ?29次下載
    基于<b class='flag-5'>第三方</b>信號無源探測系統研究

    第三方實例:iView開發介紹 (1)

    第三方實例介紹 - iView (1)
    的頭像 發表于 08-22 01:42 ?4351次閱讀

    C++串口程序第三方類代碼免費下載

    本文檔的主要內容詳細介紹的是C++串口程序第三方類代碼免費下載。
    發表于 09-11 08:00 ?7次下載
    C++串口<b class='flag-5'>程序</b><b class='flag-5'>第三方</b>類代碼免費下載

    第三方腳本成為網絡攻擊“重災區”,多管齊下防范第三方腳本安全隱患

      第三方腳本攻擊利用的是第一網站對第三方腳本的控制力不足和難以實現的全面監測,造成較為嚴重的攻擊后果。除此之外,第三方腳本還會帶來一些其他的潛在隱患。綜合來看,
    的頭像 發表于 09-04 14:51 ?3557次閱讀