c++ 实现不在同一程序内,在光标处(当前有焦点的窗体输入框)输入字符

简介: c++ 实现不在同一程序内,在光标处(当前有焦点的窗体输入框)输入字符

主要思路是 拿到顶层窗口句柄 ,向顶层窗口(键盘焦点所在处)传递消息

//拿到鼠标所在窗口句柄 基本所有窗口句柄可以
POINT point; 
GetCursorPos(&point);
HWND hdl_other = WindowFromPoint(point);
//拿到顶层窗口句柄  部分窗口句柄拿不到 qq chrome等
//HWND hwnd = GetForegroundWindow();
//GUITHREADINFO pg;
//pg.cbSize = 48;
//GetGUIThreadInfo(NULL, &pg);
//hwnd = pg.hwndCaret;
for (size_t i = 2; i < len+2; i++)
{   
    int result = ::SendMessageA(hdl_other, WM_CHAR, (WPARAM)tmp[i], 0);
  //int result = ::SendMessageA(hwnd, WM_CHAR, (WPARAM)tmp[i], 0);
  //int result = ::SendMessage(hwnd, WM_CHAR, (WPARAM)tmp[i], 0);
  if (result)
  {
    printf("successed\n");
  }
}

遇到过几个问题

1.看网上SendMessage形参中 wParam 是无用的,lParam是有用的,于是一直把字符放到lParam中,一直失败,放在wParam成功了

查阅网上的

用的是WM_SETTEXT 不知道怎么做到输出字符串成功的 我不知道原因

2.包含中文字符串 出现乱码问题 各种尝试 最后用SendMessageA解决了
我项目环境是unicode,默认SendMessage 是走SendMessageW 不走SendMessageA 
         查资料得到      SendMessgaW是对unicode编码字符的传递
                 SendMessageA是对ACII编码的字符的传递
       前提:tmp是用gb2312字节编码的 我不知道有没有影响
3.部分窗口例如 qq,chrome等程序句柄 无法通过GetForegroundWindown拿不到?
解决办法:使用鼠标拿到鼠标坐标当前所在窗口的句柄
        POINT point; 
      GetCursorPos(&point);
    HWND hdl_other = WindowFromPoint(point);
        int result = ::SendMessageA(hdl_other, WM_CHAR, (WPARAM)tmp[i], 0);
相关文章
|
3月前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
44 0
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
101 21
|
2月前
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
45 2
|
3月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
63 0
|
3月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
42 0
|
3月前
|
C++
c++学习笔记03 程序流程结构
C++学习笔记,主要介绍了程序流程结构,包括顺序结构、选择结构和循环结构。选择结构中详细解释了if语句、三目运算符和switch语句的用法和注意事项。循环结构部分则涵盖了while循环、do-while循环和for循环的语法和使用技巧。此外,还介绍了跳转语句,包括break、continue和goto语句的用途和用法。
35 0
|
5月前
|
存储 算法 编译器
程序与技术分享:C++模板元编程简介
程序与技术分享:C++模板元编程简介
44 0
|
5月前
|
存储 JavaScript 前端开发
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
|
5月前
|
自然语言处理 C语言 C++
程序与技术分享:C++写一个简单的解析器(分析C语言)
程序与技术分享:C++写一个简单的解析器(分析C语言)