SendMessage,向时间窗口发送具体时间失败?

waterhill 2013-03-11 12:48:41
针对第三方的窗口,已抓到其句柄,并抓到其字窗口的句柄,命名为hwndTime,该子窗口里面显示的是时间,格式为hh:mm:ss。现在想向该窗口写入具体的时间,相关代码如下:

using namespace std;
std::ostringstream timeContent;
timeContent<<"9:35:00";
long resultFocus;
long resultSet ;

resultFocus = ::SendMessage(hwndTime, WM_SETFOCUS, 0, (LPARAM) _T(timeContent.str().c_str()));
resultSet = ::SendMessage(hwndTime, WM_SETTEXT, 0, (LPARAM) _T(timeContent.str().c_str()));


结果resultFocus 和resultSet 都返回0,说明聚焦及赋值都失败了啊,对winApi不太熟悉,请高手指点下啊~
所有分都奉上了,谢谢先~~~
...全文
304 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterhill 2013-03-13
  • 打赏
  • 举报
回复
引用 11 楼 waterhill 的回复:
引用 10 楼 zhao4zhong1 的回复:引用 8 楼 waterhill 的回复:引用 3 楼 zhao4zhong1 的回复:仅供参考: 读取其他应用程序中ListView中的内容 http://www.ccrun.com/article.asp?i=583&amp;amp;amp;d=eahk4z 看了下,这个是读取其他窗口的内容吧,我想要的……
读功能已经实现,方法如下: ::SendMessage(hwndTime, WM_GETTEXT, 256, (LPARAM)timeContent); 那么写怎么实现呢,容易么?
waterhill 2013-03-13
  • 打赏
  • 举报
回复
引用 11 楼 waterhill 的回复:
引用 10 楼 zhao4zhong1 的回复:引用 8 楼 waterhill 的回复:引用 3 楼 zhao4zhong1 的回复:仅供参考: 读取其他应用程序中ListView中的内容 http://www.ccrun.com/article.asp?i=583&amp;amp;amp;d=eahk4z 看了下,这个是读取其他窗口的内容吧,我想要的……
另,欲操作的时间窗口class属性为SysDateTimePick32,可以读写么?
waterhill 2013-03-13
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
引用 8 楼 waterhill 的回复:引用 3 楼 zhao4zhong1 的回复:仅供参考: 读取其他应用程序中ListView中的内容 http://www.ccrun.com/article.asp?i=583&amp;amp;d=eahk4z 看了下,这个是读取其他窗口的内容吧,我想要的是向其他窗口填写内容 如果你的代码能读取,我估计十有八……
如果想填写的话,对窗口的类型有要求么,如必须是可编辑的TEdit类型? 此外,时间窗口里面的格式为:hh:mm:ss,其中的“:”无法点击到,只能分别点击“hh”、“mm”“ss”,而整个窗口只有一个句柄,那么如何对hh mm ss 分别操作呢? 先实现读吧,能给些建议么? 谢谢先~
waterhill 2013-03-13
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
WM_SETTEXT ?
嗯,可以的,我之前代码里面出现了笔误,如下即可 result = ::SendMessage(hwndEdit, WM_SETTEXT, 0, LPARAM("5"));
赵4老师 2013-03-13
  • 打赏
  • 举报
回复
WM_SETTEXT ?
waterhill 2013-03-12
  • 打赏
  • 举报
回复
对了,不能对窗口发送消息,是不是因为该窗口class类别是Edit,而非TEdit? 对于后者的窗口,我以前发送成功过
waterhill 2013-03-12
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
仅供参考: 读取其他应用程序中ListView中的内容 http://www.ccrun.com/article.asp?i=583&d=eahk4z
看了下,这个是读取其他窗口的内容吧,我想要的是向其他窗口填写内容
赵4老师 2013-03-12
  • 打赏
  • 举报
回复
引用 8 楼 waterhill 的回复:
引用 3 楼 zhao4zhong1 的回复:仅供参考: 读取其他应用程序中ListView中的内容 http://www.ccrun.com/article.asp?i=583&amp;d=eahk4z 看了下,这个是读取其他窗口的内容吧,我想要的是向其他窗口填写内容
如果你的代码能读取,我估计十有八九也能填写。
waterhill 2013-03-11
  • 打赏
  • 举报
回复
引用 2 楼 xiezhongweiwei 的回复:
小弟认为可能有以下几个问题: 1.hwndtime是否获取正确 2.Sendmessage如果指定的窗口是由正在调用的线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止 帮楼主顶下。。 楼主可以断点试下~ ……
1、句柄hwndtime获取正确,和spy++看到的一致; 2、调用的窗口有不同进程创建的,应该也是不同线程 谢谢~
  • 打赏
  • 举报
回复
小弟认为可能有以下几个问题: 1.hwndtime是否获取正确 2.Sendmessage如果指定的窗口是由正在调用的线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止 帮楼主顶下。。 楼主可以断点试下~
漫步者、 2013-03-11
  • 打赏
  • 举报
回复
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 返回值:返回值指定消息处理的结果,依赖于所发送的消息。 你的返回值类型不对
mujiok2003 2013-03-11
  • 打赏
  • 举报
回复
引用 5 楼 healer_kx 的回复:
问题很简单。 SendMessage无法给其他进程发送字符串。因为这个字符串是在你的进程地址空间下才有效的字符串地址。 而另外一个进程无法处理这个指针。 当然了,进程通信是可以用SendMessage发送字符串的,那是因为用了WM_COPYDATA消息。 但是WM_SETTEXT是不行的。 如果你想做到,首先要在第三方的进程上,进行一下CreateR……
That makes sence.
healer_kx 2013-03-11
  • 打赏
  • 举报
回复
问题很简单。 SendMessage无法给其他进程发送字符串。因为这个字符串是在你的进程地址空间下才有效的字符串地址。 而另外一个进程无法处理这个指针。 当然了,进程通信是可以用SendMessage发送字符串的,那是因为用了WM_COPYDATA消息。 但是WM_SETTEXT是不行的。 如果你想做到,首先要在第三方的进程上,进行一下CreateRemoteThread。 然后这个线程接收字符串。然后SendMessage这个线程上面的一个有效地址。 不过不确定XP XP3之后的Windows OK不、
  • 打赏
  • 举报
回复
光发了消息,并没有处理消息啊? 难道消息是由子线程处理的?
赵4老师 2013-03-11
  • 打赏
  • 举报
回复
仅供参考: 读取其他应用程序中ListView中的内容 http://www.ccrun.com/article.asp?i=583&d=eahk4z

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧