我正在尝试通过 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 中使用该代码(如果您选择这样做的话),因为您已经走上了这条道路。您搜索了什么?
无论出于何种目的,您的问题几乎与该 Stackoverflow 线程重复。