89 lines
3.1 KiB
C#
89 lines
3.1 KiB
C#
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}");
|
|
}
|
|
}
|
|
}
|
|
} |