Как вставить текст из буфера обмена? - PullRequest
1 голос
/ 20 февраля 2012

У меня есть код;

HWND MShwnd = FindWindowA("MapleStoryClass", NULL);
        PostMessage(MShwnd, WM_KEYDOWN, 0x09, MapVirtualKeyA(0x09, 0) << 16);

, который работает просто отлично. Перед рукой я скопировал в буфер обмена текст.

Я хочу знать, как я могу использовать postmessage и вставить текст.

Я искал везде и не понимаю.

Спасибо.

1 Ответ

1 голос
/ 20 февраля 2012

Это код на C #, конвертируйте его или создайте c # dll с моим кодом: (Вам необходимо добавить ссылку Microsoft.VisualBasic)

public string GetClipboardText()
{
    Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();
    return c.Clipboard.GetText();
}

public void SetClipboardText(string stext)
{
    Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();
    c.Clipboard.SetText(stext);
}

Обновление кода C ++:

System::String^ GetClipboardText()
{
    Microsoft::VisualBasic::Devices::Computer^ c = gcnew Microsoft::VisualBasic::Devices::Computer();
    return c->Clipboard->GetText();
}

void SetClipboardText(System::String^ stext)
{
    Microsoft::VisualBasic::Devices::Computer^ c = gcnew Microsoft::VisualBasic::Devices::Computer();
    c->Clipboard->SetText(stext);
}

Обновление 2

Полагаю, вам нужен нативный код, поэтому вы не использовали мой код там, где не требовался дескриптор, плюс если вы получаете HWND MShwnd = FindWindowA("MapleStoryClass", NULL);, значит, у вас есть дескриптор ... В любом случае, я предлагаю последний Метод заключается в следующем:

keybd_event(0x11, 0, 0, 0); // press ctrl
keybd_event(0x56, 0, 0, 0); // press v
keybd_event(0x56, 0, 2, 0); // release v
keybd_event(0x11, 0, 2, 0); // release ctrl
...