主题:气死看星星这一类软件。
看“星星”的软件大家都知道,就是先获取窗口句柄,再用GetWindowText或者SendMessage之类的东东得到里面的实际内容。
实际上如果不用键盘钩子,那么通过检测程序窗口是否存在,再枚举程序窗口中的子窗口(控件),得到其实际内容,也能截取到密码。我以前写的一个试验性的截取传奇密码和所选择的服务器的程序就是这样做的。
可我不想让这样的问题发生在我的程序身上。好像很久以前曾看见有人直接这样写代码:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Static Pws As String
Pws = Pws & Chr(KeyAscii)
KeyAscii = Asc("*")
End Sub
'Pws就是实际输入的内容。
我晕死,除非输入密码的人只会从头到尾的输,不修改,不删除,否则就是错误。
于是我写了下面一段,好像是长了点点。不过你在输入密码的时候无论怎样编辑,PwS这个变量里的字符串都不会出错。另外,如果中输入中文,我用"※"来代替"*"
'本示例需要一个名为TexPW的TextBox控件。 _
以下代码直接复制到窗体里面。
Dim PwS As String
Private Sub TexPW_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 46
If TexPW.SelLength > 0 Then
PwS = Left(PwS, TexPW.SelStart) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
Else
PwS = Left(PwS, TexPW.SelStart) & Mid(PwS, TexPW.SelStart + 2)
End If
End Select
End Sub
Private Sub TexPW_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Is < 0
PwS = Left(PwS, TexPW.SelStart) & Chr(KeyAscii) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
KeyAscii = -24071
Case 8
If TexPW.SelLength > 0 Then
PwS = Left(PwS, TexPW.SelStart) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
ElseIf TexPW.SelStart <> 0 Then
PwS = Left(PwS, TexPW.SelStart - 1) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
End If
Case 13
Case Else
PwS = Left(PwS, TexPW.SelStart) & Chr(KeyAscii) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
KeyAscii = 42
End Select
End Sub
实际上如果不用键盘钩子,那么通过检测程序窗口是否存在,再枚举程序窗口中的子窗口(控件),得到其实际内容,也能截取到密码。我以前写的一个试验性的截取传奇密码和所选择的服务器的程序就是这样做的。
可我不想让这样的问题发生在我的程序身上。好像很久以前曾看见有人直接这样写代码:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Static Pws As String
Pws = Pws & Chr(KeyAscii)
KeyAscii = Asc("*")
End Sub
'Pws就是实际输入的内容。
我晕死,除非输入密码的人只会从头到尾的输,不修改,不删除,否则就是错误。
于是我写了下面一段,好像是长了点点。不过你在输入密码的时候无论怎样编辑,PwS这个变量里的字符串都不会出错。另外,如果中输入中文,我用"※"来代替"*"
'本示例需要一个名为TexPW的TextBox控件。 _
以下代码直接复制到窗体里面。
Dim PwS As String
Private Sub TexPW_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 46
If TexPW.SelLength > 0 Then
PwS = Left(PwS, TexPW.SelStart) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
Else
PwS = Left(PwS, TexPW.SelStart) & Mid(PwS, TexPW.SelStart + 2)
End If
End Select
End Sub
Private Sub TexPW_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Is < 0
PwS = Left(PwS, TexPW.SelStart) & Chr(KeyAscii) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
KeyAscii = -24071
Case 8
If TexPW.SelLength > 0 Then
PwS = Left(PwS, TexPW.SelStart) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
ElseIf TexPW.SelStart <> 0 Then
PwS = Left(PwS, TexPW.SelStart - 1) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
End If
Case 13
Case Else
PwS = Left(PwS, TexPW.SelStart) & Chr(KeyAscii) & Mid(PwS, TexPW.SelStart + TexPW.SelLength + 1)
KeyAscii = 42
End Select
End Sub