如何在powershell中检测剪贴板图像的变化

问题描述 投票:0回答:1

我想创建一个用于浏览剪贴板图像的可视化界面。

因此,我会有一个监听剪贴板内容的进程。

我的问题是:

Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase
$previousImageHash = $null

while ($true) {
    $image = [System.Windows.Clipboard]::GetImage()
    if ($image) {
        $currentImageHash = $image.GetHashCode()

        if ($currentImageHash -ne $previousImageHash) {
            Write-Host $currentImageHash
            $previousImageHash = $currentImageHash
        }
    }

    Start-Sleep -Seconds 1
}

运行上面的代码后,当我将图像复制到剪贴板时,它将继续连续打印。

我不明白的是,如果我不将新图像复制到剪贴板,它应该只打印一次。

或者是每次调用

GetImage
时,它不仅检索图像信息,而且还将一些附加信息(例如时间)写入剪贴板?

如果我不想更改剪贴板,有什么方法可以检测图像更改吗?

powershell image clipboard
1个回答
0
投票

尝试使用剪贴板序列号

看到这个答案

Add-Type -NameSpace WinApi -Name ClipboardSeq -MemberDefinition '[DllImport("user32.dll")] public static extern uint GetClipboardSequenceNumber();'
Add-Type -NameSpace WinApi -Name CountClipboardFmt -MemberDefinition '[DllImport("user32.dll")] public static extern int CountClipboardFormats();'

$lastSequenceNumber = [WinApi.ClipboardSeq]::GetClipboardSequenceNumber()

while($true) {
   $newSequenceNumber = [WinApi.ClipboardSeq]::GetClipboardSequenceNumber()
   if( $lastSequenceNumber -ne $newSequenceNumber ) {
       $lastSequenceNumber = $newSequenceNumber
       "Clipboard has changed. New sequence number is: $newSequenceNumber"

       $numFormats = [WinApi.CountClipboardFmt]::CountClipboardFormats()
       "Number of formats in clipboard: $numFormats"
   }
   Start-Sleep 1
}
© www.soinside.com 2019 - 2024. All rights reserved.