關於在DLL中獲取主呼叫視窗的控制代碼

2021-04-17 12:02:54 字數 1009 閱讀 7656

通過程序id獲得該程序主視窗的控制代碼

乙個程序可以擁有很多主視窗,也可以不擁有主視窗,所以這樣的函式是不存在的,所幸的是,相反的函式是有的。所以我們可以呼叫enumwindows來判斷所有的視窗是否屬於這個程序。

typedef 

struct

tagwndinfo

bool callback yourenumproc(hwnd hwnd,lparam lparam)

hwnd getproces**ainwnd(dword dwprocessid)

如果這個程序沒有視窗,函式返回null

經試驗,在宿主視窗中呼叫getproces**ainwnd( getcurrentprocessid() )後得到的視窗控制代碼有時確實是該視窗的控制代碼,但有時得到的卻是dll的視窗的控制代碼,而在dll的視窗過程中呼叫getproces**ainwnd( getcurrentprocessid() )只得到dll視窗的控制代碼,並不能得到宿主視窗的控制代碼。【將dll直接注入執行注入**的exe中進行測試】

將該**做如下修改後,能得到正確的宿主視窗控制代碼:

typedef 

struct

tagwndinfo

bool callback yourenumproc(hwnd hwnd, lparam lparam)

hwnd getproces**ainwnd(dword dwprocessid, hwnd dll_hwnd)

//將dll視窗的控制代碼傳入,以便識別找到的控制代碼不是dll視窗的控制代碼

...return

re_hwnd;

}在dll的視窗過程中呼叫getproces**ainwnd( getcurrentprocessid(), this->m_hwnd )即可獲得宿主視窗的控制代碼。

【備註】如果宿主程序已經呼叫了其它dll並且該dll也建立有視窗,那麼,我想這個**並不能保證得到的控制代碼不是其它dll的視窗控制代碼,要做進一步的識別,我想,靠這個方法還是難以實現的了,或許可以考慮在注入dll時(或注入之後?)傳遞該宿主視窗的控制代碼給dll。

在lua中呼叫DLL

整整的花了乙個下午的時候,才在lua中呼叫了動態鏈結庫。比起其他指令碼語言,lua的呼叫方式算是比較繁瑣的,但是lua的程式設計思想非常的統一,即lua和c之間的傳值都是通過棧進行的,目前為止我還沒有深入的去了解這個 棧 但是這並不妨礙去使用 棧 當我們在乙個空的工程中寫下幾個c c 的函式,然後把...

在ASP檔案中呼叫DLL

動態聯接庫 dll 是加快應用程式關鍵部分的執行速度的重要方法,但有一點恐怕大部分人都不知道,那就是在asp檔案也能通過呼叫dll來加快伺服器的執行速度,下面我簡單的介紹一下在asp檔案呼叫dll的步驟。首先,必須得有dll檔案,本例是通過vb5.0建立activex dll檔案,這個檔案模擬了乙個...

在ASP檔案中呼叫DLL

動態聯接庫 dll 是加快應用程式關鍵部分的執行速度的重要方法,但有一點恐怕大部分人都不知道,那就是在asp檔案也能通過呼叫dll來加快伺服器的執行速度,下面我簡單的介紹一下在asp檔案呼叫dll的步驟。首先,必須得有dll檔案,本例是通過vb5.0建立activex dll檔案,這個檔案模擬了乙個...