Thread结束后立刻用ExitThread返回,并CloasHandle并且在Thread中不要用DoEvents

解决方案 »

  1.   

    有人说我在送分!    
      
        好吧!你说送就送了    现在我还可以讲给大家更多的送分秘密的。
      
        应该怎样才不叫送分!    要我搞平均主义?    不是说大家不好,但实际上很多人是说不出什么有实际意义的东西的    也要给他们给分吗?    谁的态度正确,谁的回答正确    我就给谁,这样不对吗?    我还可以真实的讲给大家    他们说的他是我们公司的总工程师    他很少玩CSDN的    只是老跑他办公室不方便    才要求他登记个帐户的    另外,我是存有一定的私心的    但我也认为他回答的就是比别人好,这是可以查证的    这种事我可能还要继续下去的    这种情况CSDN不允许吗?    办个CSDN的目的和意义是什么?    你来CSDN的目的和意义又是什么?    不知大家看了我在CSDN上的问题的交流又有何说    但我自己可以坦然说,我不是那种无聊之徒    时间有限,不多说了    还请各位多多指正!http://www.csdn.net/expert/topic/870/870135.xml?temp=.4205438
      

  2.   

    还是自己做一个窗体吧,在VB6中不能用CreateThread来创建线程,VB6不支持自由线程
      

  3.   

    改天再看。最近没时间了。TO:Itpao
      我记得好象可以呀,微软还提供了一个例子,我运行过的。
      

  4.   

    vb6不支持多Thread,编译后就会出错
      

  5.   

    你的程序我看起来很乱,我给你提点建议,你试试:
     h = FindWindow("#32770", g_strTitle)
     hText = GetDlgItem(h, &H1324)
    这两个语句把它放在主程序里面
    把h和hText设定为全局变量试一下,建议你以后的程序抽象后贴出来,ok?
      

  6.   


    请看看,他的问题跟你差不多。不过你的中间过程复杂多了,这个我试过的:
    http://www.csdn.net/expert/topic/879/879758.xml?temp=.7444879
      

  7.   

    1.thread没有返回!
    2.DoEvents不要再THREAD中用
      

  8.   

    把原来的
    Public Sub HookInputBoxThread()
    这个函数头
    替换成
    Public function HookInputBoxThread(ByVal param As Long) as long
    就可以了
      

  9.   

    大家可以看一下MSDN,其中的线程函数是要这样申明的。
    DWORD WINAPI ThreadProc(
      LPVOID lpParameter   // thread data
    );-----------------------------
    换成VB就是应该:Public function ThreadProc(ByVal lpParameter As Long) as long
      

  10.   

    天同,你好!你说的方法仍是不行的,你试过没有呢?不过我在想,问题也许不是这个函数的问题因为我在执行的过程中INPUTBOX窗已经弹出,输入时的效果也是对的只是在ENTER或中按了确定之后系统提示内存不可读之类的然后就终断了程序的执行在我的那个函数里是一个        Do Until g_bDone        loop在输入之前 g_bDone=true在什么位置使 g_bDone=false 呢我想这样应该不会再读不到那个窗体的句柄而使内存不可读了,你看对不?
      

  11.   

    怎么样才能知道我是按了确定还是按了取消(在inputBox中)
      

  12.   

    我告诉你,再线程里面调用任何API函数,就不行,,你可以
    先创建一个空的线程,编译运行没有任何问题,如果加上调用API函数马上Game Over,要先解决这个问题,才能继续探讨
      

  13.   

    创建安全线程需要注意的地方。
    1。最好使用VB5来编译,它比VB6要稳定
    2。编译出来之后必须为P-CODE,否则会出现GPE错误
    3。如果编译出来不是P-CODE,则在代码里不能使用API函数,也不能使用部分的VB函数,包括,left,mid等函数(有参数的函数),但可以使用自己编的函数,可以使用全局变量等。
    4。不能直接在VB IDE下直接调试及运行。
      

  14.   

    如果把他编译成P-CODE就可以调用API的话Boible () "下面的问题就解决了"(凉风有序,秋月无边,开个玩笑),就是兼容性能稍差。
      

  15.   

    '把以下代码放在模块文件里
    Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)Public Const EM_SETPASSWORDCHAR = &HCCPublic g_bDone As Boolean
    Public g_strTitle As StringPublic Function HookInputBoxThread(ByVal param As Long) As Long
    Dim h As Long, hText As Long
    Do Until g_bDone
        h = FindWindow("#32770", g_strTitle)
        If h <> 0 Then
            hText = GetDlgItem(h, &H1324)
             If hText <> 0 Then
               SendMessage hText, EM_SETPASSWORDCHAR, Asc("*"), ByVal 0
                g_bDone = True
            End If
        End If
    Loop
    HookInputBoxThread = 0
    End Function'----------------测试---------------------
    Private Sub Command1_Click()
    Dim hThread  As Long
    g_bDone = False
    Dim S As String
    g_strTitle = "ABC"
    hThread = CreateThread(ByVal 0&, ByVal 0&, AddressOf HookInputBoxThread, ByVal 0&, 0, lpThreadID)
    If hThread <> 0 Then
        CloseHandle hThread
    End If
    S = InputBox("请输入密码", g_strTitle)
    MsgBox S
    End Sub’-------------------以上代码测试通过-------------------------------
    需要注意的地方
    1。必须编译为p-code
    2。必须编译出来之后执行,不能在VBIDE下执行