Powershell 监视剪贴板更改

Powershell 监视剪贴板更改

我正在尝试通过 powershell 监视剪贴板的变化,并且不考虑使用比较(Get-Clipboard)来比较变化前后的情况,因为它无法区分“两个副本相同”和“尚未进行新的复制操作”。

于是我尝试覆盖由 winAPI SetClipboardViewer 添加到剪贴板查看器链中的虚拟控件的 WndProc。但结果似乎与预期不同。

#Include script containing winAPI
.".\Set-ClipboardViewer.ps1" 


class MsgOnlyWin : System.Windows.Forms.Control{



    [void] NotificationFunction()
    {
    Write-Host "Clipboard changed"
    }

    [void] WndProc($m)
    {
        $WM_DRAWCLIPBOARD = 0x308
        if($m.Msg -eq $WM_DRAWCLIPBOARD){
            NotificationFunction
            break
        }
    }



}


$Con = [MsgOnlyWin]::new()
Set-ClipboardViewer ($Con.Handle)

怎么修?

答案1

您必须使用 C/C++/C# 执行此操作,并在 PowerShell 中使用该代码(如果您选择这样做的话),因为您已经走上了这条道路。您搜索了什么?

有很多示例可用于此类用例。

C# 技巧:在 C# 中监视剪贴板活动

使用 AddClipboradFormatListener 监视剪贴板更改

剪贴板通知.cs

无论出于何种目的,您的问题几乎与该 Stackoverflow 线程重复。

如何在 C# 中监视剪贴板内容的变化?[重复]

相关内容