时间:2010-03-26 07:53:50

标签: vb.net winforms

我正在监控记事本活动。我希望在按backspacedelete时删除该字符。

此外,我不想修改现有的剪贴板内容。

2 个答案:

答案 0 :(得分:0)

我能想到可能做这样的事情的唯一方法就是在记事本中注入一个DLL,让你自动化它,但我不确定它是否可以接受这个。
有关如何执行此操作的文章可在以下位置找到:
http://www.codeproject.com/KB/COM/automatingwindowsapps.aspx

但是,我认为编写自己的记事本替代品实际上可能更容易为您做到这一点。可能你只需下载NotePad ++或类似的源代码并修改它。

答案 1 :(得分:0)

这可能不是最好的解决方案,但你可以用一点点创造力和AutoHotKey做几乎所有这样的事情。

这是我写的AHK脚本示例。只要用户在记事本窗口中按backspacedelete,它就会执行自定义代码。按Ctrl+Shift+z将显示一个包含删除历史记录的消息框。它确实使用了剪贴板,但它将其恢复为原始值。

这是一个5分钟的黑客攻击,所以我确信它有问题。使用风险自负:)

#NoEnv
#SingleInstance
SendMode Input

_removalHistory =
_backupClipboard =

#IfWinActive, ahk_classNotepad
{
    Backspace::Delete("left")
    Delete::Delete("right")
    ^+z::MsgBox %_removalHistory%
}

Delete(direction) {
    global

    BackupAndClearClipboard()               

    length := GetSelectedLength()
    if length = 0 SelectOneCharacter(direction)

    Copy()   
    _removalHistory = %_removalHistory%%clipboard%
    Send {Delete}

    RestoreClipboard() 
}

GetSelectedLength() {
    local length = 0
    Copy()
    StringLen, length, clipboard    
    return length
}

SelectOneCharacter(direction) {   
    if (direction = "left") {
       Send +{Left}
    }
    else if (direction = "right") {
       Send +{Right}
    }
}

Copy() {
    Send ^c
    ClipWait 0.01
}

BackupAndClearClipboard() {
    global
    _backupClipboard := ClipboardAll      
    clipboard =   
}

RestoreClipboard() {
    global
    clipboard := _backupClipboard
    _backupClipboard =              ;free memory
}