第一个问题很简单,可以定义一个全局变量来解决,假设定义一个变量为blnTemp,表示是否正在进行询问密码处理,初始为False。第一次进入密码输入前将其设为TRUE,输入完后将其设置为FALSE,每次进入密码输入前先判断该变量是否为TRUE,如果是则不进行密码输入。
第二个问题试试在ChkPwd = VerifyScreenSavePwd(Me.hwnd)语句后加一句DoEvents

解决方案 »

  1.   

    1.修改代码如下:定义全局变量InCheck,初始为False;
    Public Declare Function VerifyScreenSavePwd Lib "password.cpl" (ByVal hwnd&) As BooleanPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
        Static XLast, YLast As Single
        Dim XNow, YNow As Single
        XNow = x
        YNow = y
        If XLast = 0 And YLast = 0 Then
                XLast = XNow
                YLast = YNow
                Exit Sub
        End If
        If Abs(XNow - XLast) > 5 Or Abs(YNow - YLast) > 5 Then
                InCheck = True
                Unload Me
        End If
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If InCheck = False Then Exit Sub
    ChkPwd = VerifyScreenSavePwd(Me.hwnd)
    If ChkPwd Then
            ……
            ……
            End
    Else
        Cancel = True
    End If
    InCheck = False
    End Sub在密码框中按下取消按钮后,密码框仍不消失,仍是不断重复询问密码。
    建议各位将以上代码粘贴到一个窗体中帮忙调试一下,谢谢!2.这个方法无效!
      

  2.   

    还是我自己来搞定:
    1.只需在修改后的Form_MouseMove中的Unload Me之前添加xLast=0:yLast=0即可解决。
    2.已经验证,使用多线程能解决!