gpt4 book ai didi

C剪贴板更新很慢

转载 作者:可可西里 更新时间:2023-11-01 13:15:05 24 4
gpt4 key购买 nike

我想监控提供给另一个应用程序的关键事件,每当按下 ctrl+d 时,发送 ctrl+c,获取(新的)剪贴板内容并根据它执行其他操作。

我的代码:

void PressKeyboardKey(char key){
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wVk = key;
ip.ki.wScan = 0;
ip.ki.dwFlags = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
}

LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ){
char pressedKey;
// Declare a pointer to the KBDLLHOOKSTRUCTdsad
KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
switch( wParam )
{
case WM_KEYUP:
{
pressedKey = (char)pKeyBoard->vkCode; //get the key code
if ((pressedKey == -94) || (pressedKey == -93)){ //Ctrl
CtrlPressed = FALSE;
}else if (pressedKey == 68){ //d
if (CtrlPressed && IsTargetApplicationActive()){
PressKeyboardKey(67); //c
//Read from Clipboard
Sleep(CLIPBOARD_SLEEP_TIME);
HANDLE h;
if (!OpenClipboard(NULL)){
break; //abort
}
h = GetClipboardData(CF_TEXT);
const char* output = evaluateItem((char*)h); // For now prints the content of the clipboard
Sleep(ADDITIONAL_SLEEP_TIME); //Ususally not there, added just for testing
CloseClipboard();
.....
}

如果 CLIPPBOARD_SLEEP_TIME >= 350(最小值),一切都会按预期进行,但对于良好的工作流程来说时间太长了。否则,我只会得到旧的剪贴板内容。

我的第一个猜测是,目标应用程序填充剪贴板的速度非常慢,但是以下 ahk 脚本:

^d::
Send, ^c
MsgBox, %clipboard%

工作看似瞬间。因此必须有一种更快的方法来获取剪贴板内容。

任何人都知道如何在 C 中做到这一点 - 我做错了什么?

最佳答案

必须使用SetClipboardViewer(),不要使用Sleep()

关于C剪贴板更新很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com