GTPCorrgir/KeyboardHelper.cs

89 lines
3.1 KiB
C#
Raw Normal View History

using System;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace GTPCorrgir
{
public class KeyboardHelper
{
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
private const int KEYEVENTF_EXTENDEDKEY = 0x0001;
private const int KEYEVENTF_KEYUP = 0x0002;
private const int VK_CONTROL = 0x11;
private const int VK_A = 0x41;
private const int VK_C = 0x43;
private const int VK_V = 0x56;
private IntPtr previousWindow;
public void SaveCurrentWindow()
{
previousWindow = GetForegroundWindow();
}
public async Task AutoCopyFromActiveWindow()
{
try
{
// Asegurarse de que la ventana anterior tenga el foco
SetForegroundWindow(previousWindow);
// Pequeña pausa para asegurar que la ventana tiene el foco
await Task.Delay(100);
// Simular Ctrl+A
keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);
keybd_event(VK_A, 0, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);
keybd_event(VK_A, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);
// Pequeña pausa entre comandos
await Task.Delay(50);
// Simular Ctrl+C
keybd_event(VK_C, 0, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);
keybd_event(VK_C, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);
keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);
// Dar tiempo para que se complete la operación de copiado
await Task.Delay(100);
}
catch (Exception ex)
{
Console.WriteLine($"Error en AutoCopyFromActiveWindow: {ex.Message}");
}
}
public async Task RestoreAndSimulatePaste()
{
try
{
// Asegurarse de que la ventana anterior tenga el foco
SetForegroundWindow(previousWindow);
// Pequeña pausa para asegurar que la ventana tiene el foco
await Task.Delay(100);
// Simular Ctrl+V
keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);
keybd_event(VK_V, 0, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);
keybd_event(VK_V, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);
keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);
// Dar tiempo para que se complete la operación de pegado
await Task.Delay(100);
}
catch (Exception ex)
{
Console.WriteLine($"Error en RestoreAndSimulatePaste: {ex.Message}");
}
}
}
}