- UID
- 5502
- 精华
- 积分
- 76
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
发表于 2025-5-28 08:59:58
|
显示全部楼层
本帖最后由 逍遥爱迪生 于 2025-5-28 15:04 编辑
用汇编创建一个MESSAGETIMEOUT对话框,晚个几百毫秒再退出这样其他进程都退成功了,再自动关闭这个对话框, VB6 IDE 进程就不会崩了
Unloadexe
- Public Sub UnloadDll()
-
- Dim asm As New clsASM, t As Long
-
- With asm
- .Push 1
- .Push StrPtr("提示")
- .Push StrPtr("你确定要卸载模块?")
- .Push 0
- .Mov_EAX GetProcAddress(动态链接库的模块句柄("User32.dll"), "MessageBoxW")
- .Call_EAX
- .Cmp_EAX 2
- .JE "1E"
- .Push 0
- .Mov_EAX 过程内存地址(AddressOf 落叶的忧伤)
- .Call_EAX
- .Cmp_EAX 0
- .JE "0E"
- .Push_EAX
- .Mov_EAX GetProcAddress(动态链接库的模块句柄("kernel32"), "FreeLibrary")
- .Call_EAX
- .Cmp_EAX 0
- .JE "1D"
- .Ret
- .Push 0
- .Push StrPtr("提示")
- .Push StrPtr("获取DLL句柄失败,DLL卸载失败!")
- .Push 0
- .Mov_EAX GetProcAddress(动态链接库的模块句柄("User32.dll"), "MessageBoxW")
- .Call_EAX
- .Ret
- .Push 0
- .Push StrPtr("提示")
- .Push StrPtr("DLL卸载失败!")
- .Push 0
- .Mov_EAX GetProcAddress(动态链接库的模块句柄("User32.dll"), "MessageBoxW")
- .Call_EAX
- .Ret
- End With
-
- t = asm.Run_ASM
-
- CreateRemoteThread -1, 0, 0, t, 0, 0, 0 '远程创建线程
-
- End Sub
- Public Function 落叶的忧伤(ByVal 参数 As Long) As Long
-
- Select Case 参数
-
- Case 0 '关闭窗口 返回自身DLL句柄
-
-
- If 落叶的忧伤 = 0 Then 落叶的忧伤 = App.hInstance
-
- If 落叶的忧伤 = 0 Then MessageBox 0, "DLL为0", "卸载", 0
-
-
-
- Case 2
-
- MessageBox 0, "模块卸载失败!", "卸载", 0
-
- Case Else
-
-
- 参数 = 参数
-
- End Select
-
- End Function
复制代码 |
|