VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 609|回复: 3

[求助] 线程和findwindow

[复制链接]
06_avatar_middle
online_vip 发表于 2016-5-23 20:39:40 | 显示全部楼层 |阅读模式
功能:要求利用一个窗口句柄HWND来找到一个窗口对象中的内容
现在我有两个线程
HWND _t_hwnd = NULL;
main(){
        //主线程
       hwnd = FindWindow();
        //获取窗口中的内容
        char buf[3048] = { 0 };
        ::SendMessage(
                                planHwnd,
                                WM_GETTEXT, //获取文本内容
                                (WPARAM)3048,
                                (LPARAM)buf
        );

        //buf有值 成功!
       //把句柄保存下来
      _t_hwnd = hwnd
      //子线程
      ::CreateThread(NULL, 0, funproc, NULL, 0, NULL);;  // 建立线程,线程调用fun函数
}


DWORD WINAPI funproc(LPVOID lpparentet)
{

        char buf[3048] = { 0 };
        ::SendMessage(
                                _t_hwnd ,
                                WM_GETTEXT,
                                (WPARAM)3048,
                                (LPARAM)buf
        );
//buf 为空没东西
        return 0;
}


我写的是伪代码,意思大概是这样,程序没有报错或者警告,我怀疑是子线程中sendMessage无法正常使用,具体不知道怎么解决,求解




上一篇:完全平方数的C语言源代码 问题
下一篇:exe怎么加按钮并弹窗
51_avatar_middle
online_admins 发表于 2016-5-23 23:48:11 | 显示全部楼层
没看出什么问题,代码几乎都是一样的。。。
06_avatar_middle
ico_lz  楼主| 发表于 2016-5-24 11:12:01 | 显示全部楼层
Syc 发表于 2016-5-23 23:48
没看出什么问题,代码几乎都是一样的。。。

找了一天找到的问题在哪里但是不知道原因
错误代码
       char buf[3048] = { 0 };
        if (planHwnd) //如果子窗口存在
        {
               
                ::SendMessage(
                        planHwnd,
                        WM_GETTEXT, //(这里可以改成别的)
                        (WPARAM)3048, //(获取100个字符)
                        (LPARAM)buf
                        );
                MessageBox(mainDlgHwnd, (LPCTSTR)buf, _T("消息框标题"), MB_OK);

        }
        return buf;
把buf定义在if外面 buf是空的,但是

        if (planHwnd) //如果子窗口存在
        {
                char buf[3048] = { 0 };
                ::SendMessage(
                        planHwnd,
                        WM_GETTEXT, //(这里可以改成别的)
                        (WPARAM)3048, //(获取100个字符)
                        (LPARAM)buf
                        );
                MessageBox(mainDlgHwnd, (LPCTSTR)buf, _T("消息框标题"), MB_OK);

        }
放在if里面就有了,这是为什么
51_avatar_middle
online_admins 发表于 2016-5-24 22:58:28 | 显示全部楼层
yjjdick 发表于 2016-5-24 11:12
找了一天找到的问题在哪里但是不知道原因
错误代码
       char buf[3048] = { 0 };

从表面情况来看 buf 定义在哪里应该没有关系,不过看到了一点疑问,本身 bug 是局部变量的话,楼主再 return 会不会就导致结果不正确了呀
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-25 13:09

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表