C# winform アプリで。テキストをログファイルに記録するクリップボードログマネージャーを作成しています(Ctrl + c / xが押されるたびに、コピー/カットされたテキストがファイルに追加されます)画像に対しても同じことを行いました。 「prtScreen」を押すと、撮ったスクリーンショットもフォルダに移動します。
私はタイマーを使用してそれを行います。内部には、次のような「外観」があります。
if (Clipboard.ContainsImage())
{
if (IsClipboardUpdated())
{
LogData();
UpdateLastClipboardData();
}
}
残りのメソッドは次のようになります。
public void UpdateLastClipboardData()
{
// ... other updates
LastClipboardImage = Clipboard.GetImage();
}
// This is how I determine if there's a new image in the clipboard...
public bool IsClipboardUpdated()
{
return (LastClipboardImage != Clipboard.GetImage());
}
public void LogData()
{
Clipboard.GetImage().Save(ImagesLogFolder + "\\Image" + now_hours + "_" + now_mins + "_" + now_secs + ".jpg");
}
問題は、更新メソッド内で、「LastClipboardImage != Clipboard.GetImage()」が常に true を返すことです!
update メソッド内で次のことも行いました。
Image img1 = Clipboard.GetImage();
Image img2 = Clipboard.GetImage();
Image img3 = img2;
bool b1 = img1 == img2; // this returned false. WHY??
bool b2 = img3 == img2; // this returned true. Makes sense.
助けてください、比較が機能していません...なぜですか?