筆記 注入DLL建立視窗閃退的問題

2021-10-02 06:22:20 字數 3879 閱讀 6800

最近無聊在寫乙個dll的時候想實現注入dll出現視窗

無奈本人技術太菜,被迷惑了幾天,後來翻閱資料才找到

希望給剛剛學win32程式設計的朋友提示下,順便給我自己寫個筆記方便以後遇到了能馬上查詢到

建立乙個非模態對話方塊

hwnd createdialogparam(hinstance hlnstancem,lpctstr iptemplatename,hwnd hwndparent,dlgprocipdialogfunc, lparam dwlniparam)

引數一:例項控制代碼,可以用getmodulehandle(null);獲取,也可以在dll入口函式的引數hmodule傳入進去

引數二:資源模板,可以用makeintresource巨集包含你建立的rc資源

引數三:

指定擁有對話方塊的視窗

引數四:

指向對話方塊過程的

指標,bool callback (*dlgproc)(hwnd hdlg, uint message, wparam wparam, lparam lparam)

引數五:

指定傳遞到wm_initdialog訊息的iparam引數中的對話方塊過程的值。

返回值視窗控制代碼

在建立非模態對話方塊的時候需要使用多執行緒建立,不然注入的主程式會卡死,因為他會建立成功後直接返回,導致資源被釋放,所以視窗會直接閃退。

解決方案看**:

[c] 純文字檢視

複製** ?

12

3

hwndhwnd = createdialogparam(h_module, makeintresource(idd_dialog1), null, dlgproc,null);

showwindow(hwnd, sw_show);

messagebox(hwnd, _t("停住了"), _t("停住了"), mb_ok);

這段**最主要的是訊息框這個**,他也建立了乙個非模態的對話方塊,所以在執行這一句的時候他是不會立即返回,所以我們的視窗不會直接閃退,直到你關閉訊息框

這麼做肯定有人覺得很麻煩所以還有以下**

[c] 純文字檢視

複製** ?

0102

03

04

05

06

07

08

09

10

11

hwndhwnd = createdialogparam(h_module, makeintresource(idd_dialog1), null, dlgproc,null);

showwindow(hwnd, sw_show);

msg msg;

while(getmessage(&msg, null, null, null))

}

進入乙個迴圈一直獲取訊息

再呼叫函式:

isdialogmessage

該函式決定乙個訊息是否指定給指定的對話方塊,如果是,則處理訊息給函式指標

dlgproc處理

如果不是就呼叫translatemessage和dispatchmessage把訊息給系統處理

這樣的話就可以防止dll注入到某個程式的時候,視窗一閃而過

dlgproc函式:

[asm] 純文字檢視

複製** ?

0102

03

04

05

06

07

08

09

10

bool callback dlgproc(hwnd hdlg, uint message, wparam wparam, lparam lparam)

return false;

}

自己在這個函式新增

我給乙個完整的**

[asm] 純文字檢視

複製** ?

0102

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

hmodule h_module;

bool callback dlgproc(hwnd hdlg, uint message, wparam wparam, lparam lparam)

return false;

}

void __cdecl mythread(void * a)

}

}

bool apientry dllmain( hmodule hmodule,

dwordul_reason_for_call,

lpvoid lpreserved

)

return true;

}

各位看官,快給我熱心cb,給我動力,大腿們快出來讓我抱住

如果有什麼不對的,請給與指正,我一定虛心學習

unity3d 嵌入 移動MM SDK 閃退的問題

昨天一同事嵌移動sdk時,出現閃退進不了遊戲 這事在我前不久剛好遇到過,在這記錄一下 當時嵌入sdk後出現同樣的問題,閃退,連遊戲都進不了 沒有加sdk就一切正常 懷疑是sdk的問題,按著步驟做了個demo,執行正常 sdk沒問題 那是什麼導致的?adb除錯logcat 進入遊戲時捕捉到異常,是空引...

DLL的建立使用以及注入

dll的入口函式 bool winapi dllmain hinstance hinstance,dword reason,lpvoid lpvreserved hinstance 該引數是當前dll模組的控制代碼,即本動態連線庫模組的例項控制代碼。reason 該引數表示dllmain 函式被呼叫...

qt建立帶視窗的dll庫,並測試效果

dll開發環境 qt5.5.1,編譯環境 msvc2010 32bit dll測試環境 qt5.5.1 另外注意,如果增加了資源檔案,需要qmake一下,否則可能會構建失敗 1 dll庫的建立 1.1 建立dll工程 選擇載入的元件,因為有視窗介面,所以勾選qtgui,qtwidgets 1.2 為...