liu496324 发表于 2024-6-1 16:01:42

会崩溃

0xAA55 发表于 2024-6-3 09:41:52

liu496324 发表于 2024-6-1 16:01
会崩溃

具体说说,怎样使用会崩溃

jinlong0186 发表于 2024-9-12 10:08:45

很好的资料,好好学习

逍遥爱迪生 发表于 2025-5-28 08:50:25

用汇编创建一个MESSAGETIMEOUT对话框,晚个几百毫秒再退出这样其他进程都退成功了,再自动关闭这个对话框, VB6 进程就不会崩了

逍遥爱迪生 发表于 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
页: 1 [2]
查看完整版本: 【VB6】最简多线程(线程函数内可使用API、Form、控件、MsgBox