季世平和各位好手,帮忙看看吧!!!

xcityman 2003-09-15 11:04:17
各位好手,下面是我的代码,现有个问题:
为什么在程序在运行时,按住Ctrl,消息发送就会被中断。
如果按住Shift就送出其他字符,就不是自定义的自符串了。
以上这两个问题,不论焦点是否在窗体上,都会出现!
请问是什么原因,如何解决???谢谢!!!
void __fastcall TForm1::Button5Click(TObject *Sender)
{
String st1="75413",st2="119.90";int c=0,d=0;
for(int i=1;i<=st1.Length();i++)
{
c=st1[i];
PostMessage(Memo1->Handle,WM_KEYDOWN,c,0);
DWORD dwStart = GetTickCount();
while(GetTickCount()-dwStart<500){
Application->ProcessMessages();}
}
PostMessage(Memo1->Handle,WM_KEYDOWN,VK_RETURN,0);
for(int j=1;j<=st2.Length();j++)
{
d=st2[j];
if(d==46) d=110;
PostMessage(Memo1->Handle,WM_KEYDOWN,d,0);
DWORD dwStart = GetTickCount();
while(GetTickCount()-dwStart<500){
Application->ProcessMessages();}
}
}
...全文
33 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xcityman 2003-09-17
  • 打赏
  • 举报
回复
季老大,感谢万分
结贴了
jishiping 2003-09-17
  • 打赏
  • 举报
回复
退一步说,实在不行的话,遇到回车用SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
不是回车就用 SendMessage(hWnd, WM_CHAR, VK_RETURN, 0); 这是没有办法的办法。
jishiping 2003-09-17
  • 打赏
  • 举报
回复
“Telnet那个程序”是指哪个程序?Windows自带的程序(程序名?),还是其它的Telnet
程序?
xcityman 2003-09-16
  • 打赏
  • 举报
回复
季老大,不好意思,这个小程序在使用时发现一个问题.
如下;
我的目的是用这样一个程序,通过一个类似于Telnet的程序,控制字符消息的发送.
我上面的代码,如果是Memo1->Handle的话,
SendMessage(Memo1->Handle,WM_CHAR,VK_RETURN,0),发送回车消息是可以生效的.
但在控制Telnet那个程序时,回车消息用SendMessage(Memo1->Handle,WM_CHAR,VK_RETURN,0)这个就不行了.
如果换成SendMessage(Memo1->Handle,WM_KEYDOWN,VK_RETURN,0),却又可以了,但如果换成这样的话,按住Ctrl和Shift却又会出现上面的那个情况了.

老大,我已经试了,很多方法了,实在不行,还只有请老大再帮忙看看吧,谢谢了.
sooven 2003-09-15
  • 打赏
  • 举报
回复
学习
xcityman 2003-09-15
  • 打赏
  • 举报
回复
to:yesry(噎死你)
如果用Sleep(500)
程序就没有响应了,
我觉得还是这个好:
while(GetTickCount()-dwStart<500){
Application->ProcessMessages();}
freeia 2003-09-15
  • 打赏
  • 举报
回复
up, 看看我的问题.
xcityman 2003-09-15
  • 打赏
  • 举报
回复
谢谢了,问题已经解决
季老大,能不能解释一下是什么原因造成的吗?
为何用PostMessage会出现中断的情况,而SendMessage却又不会呢?

raulfan 2003-09-15
  • 打赏
  • 举报
回复
JSP看来是这一带的偶像:)都哭着喊着点名让他解答
yesry 2003-09-15
  • 打赏
  • 举报
回复
啊!!!
我明明第一个回答的啊,为什么出来的时候JSP在我的前头?不公平!我为了试验花了时间,结果排第二!!!
yesry 2003-09-15
  • 打赏
  • 举报
回复
String st1="75413",st2="119.90";int c=0,d=0;
for(int i=1;i<=st1.Length();i++)
{
c=st1[i];
SendMessage(Memo1->Handle,WM_KEYDOWN,c,0);
SendMessage(Memo1->Handle,WM_CHAR,c,0);//没有这句Shift生效
SendMessage(Memo1->Handle,WM_KEYUP,c,0);
Sleep(500);
/*
DWORD dwStart = GetTickCount();
while(GetTickCount()-dwStart<500){
Application->ProcessMessages();}//你知道这一句话让Ctrl键停下来的
*/
}
PostMessage(Memo1->Handle,WM_KEYDOWN,VK_RETURN,0);
for(int j=1;j<=st2.Length();j++)
{
d=st2[j];
if(d==46) d=110;
SendMessage(Memo1->Handle,WM_KEYDOWN,d,0);
SendMessage(Memo1->Handle,WM_CHAR,d,0);//lParam 不对,我懒得查了
SendMessage(Memo1->Handle,WM_KEYUP,d,0);
Sleep(500);
/*
DWORD dwStart = GetTickCount();
while(GetTickCount()-dwStart<500){
Application->ProcessMessages();}//你知道这一句话让Ctrl键停下来的
*/
}
jishiping 2003-09-15
  • 打赏
  • 举报
回复
将PostMessage改为SendMessage,将WM_KEYDOWN改为WM_CHAR就可以了。
asimpleman 2003-09-15
  • 打赏
  • 举报
回复
gz
xiaozerong 2003-09-15
  • 打赏
  • 举报
回复
学习
jishiping 2003-09-15
  • 打赏
  • 举报
回复
PostMessage 是将消息放到消息队列后,函数马上返回,就是说这个函数执行完之后,但是
消息还没有被处理。等到程序空闲时,消息才会被处理,同时使用PostMessage可能会有消息
丢失的问题。但是SendMessage就不一样了,这个函数必须等到消息处理完之后才返回,就是
说使用SendMessage,消息是立刻处理的,所以也不会存在消息丢失的问题。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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