Как смоделировать Ctrl A + Ctrl C, используя keybd_event

Как смоделировать Ctrl-A + Ctrl-C, используя keybd_event?

Потому что я имитирую ctrl a + ctrl c в форме веб-браузера, чтобы скопировать все содержимое в буфер обмена. Я использовал SendKeys.SendWait, но он не копирует все содержимое!

3 ответа

Это должно работать

[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag
public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag
public const int VK_LCONTROL = 0xA2; //Left Control key code
public const int A = 0x41; //A key code
public const int C = 0x43; //C key code

public static void PressKeys()
{
    // Hold Control down and press A
    keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(A, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(A, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);

    // Hold Control down and press C
    keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(C, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(C, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);
}

Вы можете запустить событие Cntrl-A + Cntrl-C, я прав? Но по какой-то причине вы не копируете весь текст веб-страницы в буфер обмена?

Я не знаю много о проведении события Cntrl-A + Cntrl-C, и я также не совсем понимаю, что вы пытаетесь сделать, но я сделал это наилучшим образом и придумал что-то, что захватывает весь текст с веб-страницы и копирует его в буфер обмена после события нажатия кнопки...(теперь, очевидно, вы захотите использовать ur Cntrl-A + Cntrl-C). Также в целях отладки я поместил текст буфера обмена в файл.txt, чтобы вы могли дважды проверить.

Я также использую пакет Agility для HTML. Вы можете получить это от http://htmlagilitypack.codeplex.com/

КОД

    private void btnClip_Click(object sender, EventArgs e)
    {
        string address = "http://animalrights.about.com/";
        string text = "";

        // Retrieve resource as a stream
        Stream data = client.OpenRead(new Uri(address)); //client here is a WebClient

        //create document
        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        document.Load(data);

        //receive all the text fields
        foreach (HtmlNode node in document.DocumentNode.SelectNodes("//child::p"))
        {
            text += node.InnerText + "\n\n";
        }

        Clipboard.SetText(text);
        string path = @"C:\Users\David\Documents\Visual Studio 2012\Projects\CopyToClipBoard\CopyToClipBoard\bin\MyTest.txt";

        // Delete the file if it exists.
        if (File.Exists(path))
        {
            File.Delete(path);
        }

        // Create the file.
        using (FileStream fs = File.Create(path, 1024))
        {
            Byte[] info = new UTF8Encoding(true).GetBytes(text);

            // Add some information to the file.
            fs.Write(info, 0, info.Length);
        }

        //destroy data object
        data.Close();
        data.Dispose();
    }

Откройте блокнот, чтобы проверить файл

Windows Input Simulator делает это очень просто.

Windows Input Simulator предоставляет простой интерфейс.NET (C#) для имитации ввода с клавиатуры или мыши с помощью метода Win32 SendInput. Все Interop сделано для вас, и есть простая модель программирования для отправки нескольких нажатий клавиш.

Пакет Nuget -> Install-Package InputSimulator

https://inputsimulator.codeplex.com/

Другие вопросы по тегам