【发布时间】:2014-06-18 15:23:04
【问题描述】:
我需要从一个应用程序复制信息并将其粘贴到另一个应用程序..
或以某种方式从剪贴板获取信息。我知道如何将 ctrl-r 发送到该应用程序并运行它。
我也想发送ctrl-c,但它什么也没做。我在剪贴板中有一些信息(程序完成后它仍然存在),我尝试将数据粘贴到记事本。它也不运行。我在网上找到了一些想法,但我不知道如何运行它。 ctrl-v 仅将 v 写入记事本。
这是我的代码:
{
INPUT Refrk1;
INPUT Refrk2;
INPUT Refrk3;
INPUT Refrk4;
INPUT Inputs[2];
Refrk1.type = 1;
Refrk1.ki.wVk = 0x11;
Refrk1.ki.wScan = 0;
Refrk1.ki.dwFlags = 0;
Refrk1.ki.dwExtraInfo = 0;
Refrk1.ki.time = 1;
Refrk2.type = 1;
Refrk2.ki.wVk =0x43;
Refrk2.ki.wScan = 0;
Refrk2.ki.dwFlags = 0;
Refrk2.ki.dwExtraInfo = 0;
Refrk2.ki.time = 0;
Refrk3.type = 1;
Refrk3.ki.wVk =0x56;
Refrk3.ki.wScan = 0;
Refrk3.ki.dwFlags = 0;
Refrk3.ki.dwExtraInfo = 0;
Refrk3.ki.time = 0;
Refrk4.type = 1;
Refrk4.ki.wVk =0x0D;
Refrk4.ki.wScan = 0;
Refrk4.ki.dwFlags = 0;
Refrk4.ki.dwExtraInfo = 0;
Refrk4.ki.time = 0;
ShowWindow(hAMIDST, SW_SHOWNORMAL);
SetForegroundWindow(hAMIDST);
SendInput(2, Inputs,sizeof(Inputs[2]));
Refrk1.ki.dwFlags = KEYEVENTF_KEYUP;
Refrk2.ki.dwFlags = KEYEVENTF_KEYUP;
Inputs[0] = Refrk1;
Inputs[1] = Refrk2;
SendInput(2, Inputs,sizeof(Inputs[2]));
ShowWindow(hNOTE, SW_SHOWNORMAL);
SetForegroundWindow(hNOTE);
Inputs[0] = Refrk1;
Inputs[1] = Refrk3;
SendInput(2, Inputs,sizeof(Inputs[2]));
Sleep(10);
Refrk1.ki.dwFlags = KEYEVENTF_KEYUP;
Refrk3.ki.dwFlags = KEYEVENTF_KEYUP;
Inputs[1] = Refrk1;
Inputs[0] = Refrk3;
SendInput(2, Inputs,sizeof(Inputs[2]));
SendInput(1, &Refrk4,sizeof(INPUT));
Refrk4.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &Refrk4,sizeof(INPUT));
ShowWindow(hAMIDST, SW_SHOWNORMAL);
SetForegroundWindow(hAMIDST);
}
ctrl-r 和 ctrl-c 是该程序中的热键。但是ctrl-c 没有运行。
我发现我需要以某种方式控制剪贴板,但我不知道如何。
它没有运行。 OpenClipboard 等,我需要通过发送 ctrl-c 来完成,而这是该应用程序中的热键并且文本不在窗口中,但它将所需的信息复制到剪贴板。
【问题讨论】:
-
我不认为按键生成是一个好主意。您有窗口句柄,因此您可以更好地将registered 消息发送到您要从中复制信息和粘贴信息的窗口。您需要将这些消息的处理程序包含到相应的消息映射中。您还应该阅读 Windows 剪贴板 here,它提供了一个 API。