Qt| 如何将QString字符串输出到外部程序的文本框?

在写一个类似于剪切板的程序,想要将QString字符串直接输出到外部程序的文本框,是外部程序!比如word文档、浏览器地址栏。
不要使用QCilpboard
不要使用QCilpboard

img

然后现在有两个问题,
一个是点击程序时,鼠标焦点会转移到程序身上,如何保证鼠标焦点不转移?(设置焦点策略没有用)

另一个是QString字符串如何输出到外部程序的文本框?

查询了很多资料无果,渴望有朋友能解答,感谢!

QT中取得HWND可以通过 xxx.winId() 获取
通过 Windows API 设置窗口不占用焦点

SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_NOACTIVATE);

往其他程序输入文字,就通过SendInput发送一个或多个按键事件
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendinput
基于Windows API开发的完整Demo:

/*屏幕键盘原理Demo
窗口置顶、不占用焦点
点击此窗口,往当前焦点程序的文本框中输入内容
*/
#include <windows.h>

//生成键盘输入文字事件
VOID SendInputText(LPCTSTR str){
    int len = lstrlen(str);
    INPUT* inputs = (INPUT*)LocalAlloc(LMEM_FIXED|LMEM_ZEROINIT, len*sizeof(INPUT));   
    for (int i = 0; i < len; i++){        
        inputs[i].type = INPUT_KEYBOARD;
        inputs[i].ki.dwFlags = KEYEVENTF_UNICODE;
        inputs[i].ki.wScan = str[i];
    }
    SendInput(len, inputs, sizeof(INPUT));    
    LocalFree(inputs);
}

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
    switch (message){
        case WM_LBUTTONUP: 
            SendInputText(TEXT("Hello World")); //产生键盘输入 Hello World 事件
            return 1;
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 1;
}

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmdLine,int nCmdShow){
    WNDCLASS wc = {0};
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpfnWndProc = MainWndProc;
    wc.hInstance = hInst;     
    wc.lpszClassName = TEXT("MainWindowClass");
    RegisterClass(&wc);    
    HWND hwnd = CreateWindow(TEXT("MainWindowClass"), TEXT("Virtual Keyboard Demo"),
        (WS_OVERLAPPED|WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU),       
        CW_USEDEFAULT,CW_USEDEFAULT,350,200,NULL,NULL,hInst,NULL);

    //设置窗口置顶
    SetWindowPos(hwnd, HWND_TOPMOST, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);

    //设置窗口不会取得焦点
    SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_NOACTIVATE);

    ShowWindow(hwnd, SW_SHOWNOACTIVATE);
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}


Windows下,可以用api复制粘贴
https://learn.microsoft.com/en-us/windows/win32/dataxchg/using-the-clipboard

试试
https://learn.microsoft.com/en-us/windows/win32/dataxchg/using-the-clipboard

这个看看
https://b23.tv/0aN7aSt

参考链接

Qt中的QString字符串如何输出_林小李的博客-CSDN博客_qt输出字符串 QString str1="You are good";QByteArray ba=dataVector[i][j].toLocal8Bit();//toLocal8Bit()返回一个QByteArray类型  cout https://blog.csdn.net/ikisstherain/article/details/59479883?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166729394616800184122503%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166729394616800184122503&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-59479883-null-null.nonecase&utm_term=Qt%7C%20%E5%A6%82%E4%BD%95%E5%B0%86QString%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BE%93%E5%87%BA%E5%88%B0%E5%A4%96%E9%83%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%96%87%E6%9C%AC%E6%A1%86%EF%BC%9F&spm=1018.2226.3001.4450