在VC中用PostMessage()发送消息,为啥会发送失败?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VC中用PostMessage()发送消息,为啥会发送失败?相关的知识,希望对你有一定的参考价值。

1》发邮件出现系统退信的大致原因
如果邮件传输过程中,收到系统退信,请您检查退信的内容,并和下面的几种情况进行比对,查找原因,一般出现退信的大致原因如下:
1、没有找到收件人的地址
退信包含:invalid address (#5.5.0)/User unknown/user is not found/doesn't have this account
出错原因:对方地址不存在或者电子邮件地址输入错误。
解决方法:请您核实一下对方的地址是否正确再次发送。
2、接收方邮箱已经没有足够的空间来接收新邮件
退信包含:mailbox is full/Quota exceed the hard limit for user/mail box space not enough
出错原因:接收方的邮箱已满,没有足够的空间来接收新的邮件。
解决方法:用其它方式通过对方及时的清理出足够的空间来接收这封邮件。
3、超过了对方邮件服务商规定的一封邮件大小的限制
退信包含:552 Message size exceeds fixed limit
出错原因:这封邮件太大了,超过了对方的邮件服务商针对一封邮件大小的限制。
解决方法:将附件拆分成多个部分发送或者让对方换一个较大邮箱来接收这封信件。
4、被对方服务器拒收:
退信包含:Recipient address rejected/552 Error: content rejected/553 Mail data refused
出错原因:被对方邮件服务器拒绝接收
解决方法:告知用户具体原因,需让接收方向网管说明情况,将百度的地址从黑名单中撤消就可以正常发送信件了。
5、服务器不能建立链接:
退信包含:Sorry, I wasn't able to establish an SMTP connection. (#4.4.1)/550 System is busy
出错原因:对方某一台收件服务器当时正处在繁忙之中或者咱们的服务器和对方链接并不是很顺畅
解决方法:有可能是暂时的情况,测试一下,发送一封信件到目的地址,看看是否有退信。 如果用户反映近一段时间不稳定,一会正常一会有退信,则需请记录投诉信息、退信原件,立即和我们联系进行解决。
6、没有目的邮件主机:
退信包含:Sorry, I couldn't find any host named kail.com.cn. (#5.1.2)
出错原因:一般是对方邮件地址@后面部分输入错误或者服务器解析有问题。
解决方法:请用户核实一下对方的地址是否正确再次发送。另外,您可以使用其他网站的邮箱发送给对方进行测试,看是否出现退信,如果没有,请立即和我们联系。
7、单封信件的收件人过多:
退信包含:Remote host said: 553 Too many recipients in the mail, should less than 20
出错原因:对方对于一封信件的收件人有限制,这封信件的收件人太多了,所以被对方退回。
解决方法:可以单独给这个地址发送一封邮件,或者减少这封信件收件人的商量
8、找不到对方的邮件服务器或者ip地址
退信包含:Sorry, I couldn"t find a mail exchanger or IP address
出错原因:一般情况下是对方的邮件服务器配置有修改,修改后需要一到两天才对在网络上同步成功。
解决方法:请您稍后一段时间再次发送,看看能够正常。如要是反映这种状况持续的时间比较长,而且用其它邮箱发送就没有问题,需要立即和我们联系来解决问题。
2》您好,请问您无法发送邮件时,系统有什么报错信息吗?或者,是收到退信了呢?如果有退信,请将退信按附件方式转发到以下邮箱里webcn@staff.sina.com.cn
,并注明查询退信原因,百度收到您的邮件后,会立刻给您回信的。另外,请注意一下您填写的收件人地址是否正确,您可以试试,自己给自己发送邮件,看看是否可以发送成功。
另外,如果是通过客户端软件收发邮件的,您可以将您在客户端中设置的服务器地址改成服务器的IP地址,其中免费邮箱POP3服务器IP地址是:202.106.182.168,SMTP服务器IP地址是:202.106.187.158。任你邮 pop3服务器IP地址是:202.108.35.190 smtp服务器IP地址是:202.108.35.196 然后看一下我的服务器需要身份验证是否打勾,如果没有请打上勾。换成IP地址后您可以省略DNS解析的步骤。如果仍不可以正常速度收发邮件,建议您可以做如下测试:
请使用ping的网络命令检查与百度网邮箱服务器的联接情况,具体方法如下:
如果您的电脑操作系统为:win2000、XP
点击左下角的开始,在弹出的菜单中选择“运行”。在出现的对话框中输入“cmd”。此时会弹出一个黑色的DOS状态下的对话框。在提示符后输入ping空格 pop3..sina.com.cn(收件服务器)或者smtp.sina.com.cn(发件服务器)。如果是任你邮邮箱,就输入ping空格 pop3.vip.sina.com(收件服务器)或者smtp.vip.sina.com(发件服务器)。请提供下面出现的检测结果,请确认问题,谢谢!
如果您的电脑操作系统为:win98、winme
点击左下角的开始,在弹出的菜单中选择程序,这时会出现新的对话框,在其中的附一栏菜单中点选“MS-DOS 方式”。此时会弹出一个黑色的DOS状态下的对话框。在提示符后输入ping空格pop3.sina.com.cn(收件服务器)或者smtp.sina.com.cn(发件服务器)。如果是任你邮邮箱,就输入ping空格 pop3.vip.sina.com(收件服务器)或者smtp.vip.sina.com(发件服务器)。请提供下面出现的检测结果,请确认问题,谢谢!
在出现的结果中,如果time此项数值小于100,则为链接速度正常,如果大于150则您的网速较慢,请联络您的网络提供商。
如有更多问题, 请咨询百度客服中心。
全国统一客服热线:95105670 咨询邮箱:webcn@staff.sina.com.cn
3》发不出邮件:
原因很多:
1、对方拒绝接收你的邮件。即你的邮箱地址被对方屏蔽了;和你朋友联系一下,是不是在设置区设置了拒收;
2、你写的邮箱地址不对,没写清楚,或没写全,无法发送到对方邮箱;
3、对方的邮箱已满,也无法发送到;
4、网络或系统有故障;你可以先退出邮箱,再重新登录试一下;
5、你发送的邮件和附件太大等。
退信是会说明原因的,你可以查看一下是什么原因呀。
另外你可咨询一下百度客服中心。
全国统一客服热线:95105670 咨询邮箱:webcn@staff.sina.com.cn
希望对你有所帮助

为什么收不到朋友的邮件
1》
您好,如果出现无法接收发送邮件的情况,您可以将您在客户端中设置的服务器地址改成服务器的IP地址,其中免费邮箱POP3服务器IP地址是:202.106.182.168,SMTP服务器IP地址是:202.106.187.158。然后看一下我的服务器需要身份验证是否打勾,如果没有请打上勾。换成IP地址后您可以省略DNS解析的步骤。如果仍不可以正常速度收发邮件,建议您可以做如下测试:
请使用ping的网络命令检查与百度网邮箱服务器的联接情况,具体方法如下:
如果您的电脑操作系统为:win2000、XP
点击左下角的开始,在弹出的菜单中选择“运行”。在出现的对话框中输入“cmd”。此时会弹出一个黑色的DOS状态下的对话框。在提示符后输入ping空格 pop3..sina.com.cn(收件服务器)或者smtp.sina.com.cn(发件服务器)。请提供下面出现的检测结果,请确认问题,谢谢!
如果您的电脑操作系统为:win98、winme
点击左下角的开始,在弹出的菜单中选择程序,这时会出现新的对话框,在其中的附一栏菜单中点选“MS-DOS 方式”。此时会弹出一个黑色的DOS状态下的对话框。在提示符后输入ping空格pop3.sina.com.cn(收件服务器)或者smtp.sina.com.cn(发件服务器)。请提供下面出现的检测结果,请确认问题,谢谢!
在出现的结果中,如果time此项数值小于100,则为链接速度正常,如果大于150则您的网速较慢,请联络您的网络提供商。
如有更多问题, 请咨询百度客服中心。
全国统一客服热线:95105670 咨询邮箱:webcn@staff.sina.com.cn
为什么免费信箱收不到朋友的来信?
2》
如果您没有收到朋友的信件,请先检查您自己的免费信箱是否有问题?最简单的测试办法是自己给自己发一封邮件,如果发的出去收得到的话,就说明您的免费邮箱一切正常,没有问题。另外您还要检查是否您垃圾邮件过滤设置不当造成的,请您登陆邮箱内的设置区进行调整。另外,您可以让对方测试给其他网站邮箱发邮件是否正常,如果不正常,就是对方邮箱服务器的问题。
如果以上三点都没有问题的话,有可能是对方曾经给百度发垃圾邮件被百度屏蔽,请您给我们发邮件,主题为:“我收不到对方的邮件”,然后正文里面写明对方的邮件地址是什么和大致情况,我们会通过邮件和对方联系,让对方发一封测试邮件给我们,然后从中查找原因来解决问题。
我们的联系邮箱为:webcn@staff.sina.com.cn,另外也欢迎您通过电话和我们联系,我们的客服电话为:95105670(全国统一免长途费热线)
3》为什么收费邮箱(任你邮)收不到朋友的来信?
如果您没有收到朋友的信件,请先检查您自己的收费邮箱(任你邮)是否有问题?最简单的测试办法是自己给自己发一封邮件,如果发的出去收得到的话,就说明您的收费邮箱一切正常,没有问题.另外您还要检查下面是否您垃圾邮件过滤设置不当造成的。如果以上两点都没有问题的话,很有可能就是中间线路,或者对方邮件服务器有问题造成的,email的接收影响因素很多,一个因素是百度的邮件服务器,一个因素是中间线路,一个因素是对方服务器,如果中间任何一个环节出现问题的话,都有可能出现收不到邮件的情况,具体是那一个环节出现问题,要根据对方的退信来判断,您可以和对方联系一下看看是否有退信产生,一般出现退信的原因请详细参阅这里。另外,这里要建议您的是,如果您的收费邮箱曾经导入过免费邮箱,那么我们建议您最好让对方直接给您的收费邮箱地址发邮件,这样可以保证速度最快。
4》百度邮件如何在outlook express进行设置?
http://tech.sina.com.cn/sinahelp/2002-06-14/120714.shtml
如果您按照上面面的outlook express设置方法设置完毕后,仍然不能正常使用,那么您就要看看outlook具体的出错信息里面的错误号是多少?根据错误号和下表进行比对,一般来说,大多数的问题都可以解决。
OUTLOOK EXPRESS出错信息代码表
http://tech.sina.com.cn/sinahelp/2002-12-13/113/186.html
百度收费邮件
外发服务器:smtp.vip.sina.com
收件服务器:pop3.vip.sina.com
百度免费邮件
外发服务器:smtp.sina.com.cn
收件服务器:pop3.sina.com.cn
参考技术A 可能是窗口的消息队列满了。

如何在VB中用PostMessage向指定窗口发送带有修饰键的组合键?

向任意应用程序(包括后台的)发送任意按键消息(包括普通字符键、功能键、Shift/Control/Alt加任意按键的组合键),以实现自动执行特定功能,是一个用途很广、很有实用价值的功能,很多人都受困于此,不得其解,本人也遇到这种需求并受阻。刚开始查了很多资料和网上网友的解决方案,有些能起到一定作用,但也有许多方案经试验证实不可行。尤其是关于发送 Shift/Control/Alt 加任意按键的组合键这个问题,没有发现一个可行的方案,例如以下代码并不能向指定Window(hwnd)发送 Ctrl+C:
PostMessage hwnd,WM_KEYDOWN,VK_CONTROL,&H001D0001 \'按下Ctrl键
PostMessage hwnd,WM_KEYDOWN,VK_C,&H002E0001 \'按下C键
PostMessage hwnd,WM_KEYUP,VK_C,&HC02E0001 \'释放C键
PostMessage hwnd,WM_KEYUP,VK_CONTROL,&HC01D0001 \'释放Ctrl键
上例只能发送一个小写字母c。
以下代码虽可以模拟 Ctrl+C 按键,但却不能向指定的后台窗口发送:
keybd_event VK_Ctrl, 0, 0, 0 \'按下Ctrl键
keybd_event VK_C, 0, 0, 0 \'按下C键
keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0 \'释放C键
keybd_event VK_Ctrl, 0, KEYEVENTF_KEYUP, 0 \'释放Ctrl键
难道真的没有解决这个问题的办法吗?我想这个应该是可以做到的呀,后来经过反复的研究Windows的消息机制和键盘输入系统调用的资料,终于找到了解决方案,并经试验成功证实。自己也是曾经受困于此,终得其解,不敢独享,现拿出来献给广大同需此求的朋友,也让这个问题不再是少数“高手”们独享的秘籍。
要实现向任意应用程序窗口发送模拟的按键,在不需激活该应用程序使其获得输入焦点的情况下,首先必须取得要接收按键的窗口句柄,这要用到Windows API FindWindow 及 FindWindowEx,首先用 FindWindow 取得应用程序顶层(Top Level)窗口的句柄,然后再用 FindWindowEx 取得要接收按键的子窗口或控件的句柄,因为应用程序顶层窗口不一定就是接受按键的窗口(如“NotePad.exe”记事本程序,实际接受按键的窗口是Notepad主窗口下的Edit控件),可以通过ClassID或Caption来查找。假设目标窗口的句柄已取得(hwnd),然后要用PostMessage向该窗口发送按键消息,对于普通字符键,直接用WM_CHAR消息最简单,如下:
PostMessage hwnd, WM_CHAR, Asc("A"), 0 \' 发送一个 A 字符
对于非普通字符按键,如功能键、方向键等,要用 WM_KEYDOWN、WM_KEYUP 消息,如下:
PostMessage hWndMsg, WM_KEYDOWN, VK_ESCAPE, &H00010001 \' 模拟按下 Esc 键
PostMessage hWndMsg, WM_KEYUP, VK_ESCAPE, &HC0010001 \' 模拟抬起 Esc 键
以上最后一个参数(lParam)低16位(0001)表示按键一次,高8位00表示按下,C0表示抬起,次高8位(01)表示该键的扫描码,可用 API MapVirtualKey(VirtualKey, 0)取得(注意:扫描码在各系统可能会不同,在此以具体数值示例,实际应用MapVirtualKey取得)。
下面要讲Shift/Control/Alt修饰键与其它按键的组合怎样发送,对于Shift和Control用以下方式(用到 API keybd_event):
keybd_event VK_SHIFT, &H2A, 0, 0 \' 模拟按下SHIFT键,&H2A是VK_SHIFT的扫描码
PostMessage hWndMsg, WM_KEYDOWN, VK_A, &H001E0001 \' 模拟按下 A 键,SHIFT+A产生一个大写A字符
PostMessage hWndMsg, WM_KEYUP, VK_A, &HC01E0001 \' 模拟抬起 A 键
keybd_event VK_SHIFT, &H2A, KEYEVENTF_KEYUP, 0 \' 模拟抬起 SHIFT 键
以上VK_SHIFT(扫描码2A)换成VK_CONTROL(扫描码1D)就可以实现Ctrl组合键,VK_A(扫描码1E)也可以换成任意功能键,如VK_F4(扫描码3E)。
对于Alt修饰键比较特别,它属于系统按键,要用 WM_SYSKEYDOWN/WM_SYSKEYUP 消息,如下:
PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H003E0001 Or &H20000000 \' 模拟按下 Alt+F4
PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or &H20000000 \' 模拟抬起 Alt+F4
\' &H20000000 为 context code 位,置 1 表示 Alt 键被按下

至此,大功告成,祝各位心情愉快。
参考技术A 向任意应用程序(包括后台的)发送任意按键消息(包括普通字符键、功能键、Shift/Control/Alt加任意按键的组合键),以实现自动执行特定功能,是一个用途很广、很有实用价值的功能,很多人都受困于此,不得其解,本人也遇到这种需求并受阻。刚开始查了很多资料和网上网友的解决方案,有些能起到一定作用,但也有许多方案经试验证实不可行。尤其是关于发送 Shift/Control/Alt 加任意按键的组合键这个问题,没有发现一个可行的方案,例如以下代码并不能向指定Window(hwnd)发送 Ctrl+C:
PostMessage hwnd,WM_KEYDOWN,VK_CONTROL,&H001D0001 '按下Ctrl键
PostMessage hwnd,WM_KEYDOWN,VK_C,&H002E0001 '按下C键
PostMessage hwnd,WM_KEYUP,VK_C,&HC02E0001 '释放C键
PostMessage hwnd,WM_KEYUP,VK_CONTROL,&HC01D0001 '释放Ctrl键
上例只能发送一个小写字母c。
以下代码虽可以模拟 Ctrl+C 按键,但却不能向指定的后台窗口发送:
keybd_event VK_Ctrl, 0, 0, 0 '按下Ctrl键
keybd_event VK_C, 0, 0, 0 '按下C键
keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0 '释放C键
keybd_event VK_Ctrl, 0, KEYEVENTF_KEYUP, 0 '释放Ctrl键
难道真的没有解决这个问题的办法吗?我想这个应该是可以做到的呀!后来经过反复的研究Windows的消息机制和键盘输入系统调用的资料,终于找到了解决方案,并经试验成功证实。自己也是曾经受困于此,终得其解,不敢独享,现拿出来献给广大同需此求的朋友,也让这个问题不再是少数“高手”们独享的秘籍。
要实现向任意应用程序窗口发送模拟的按键,在不需激活该应用程序使其获得输入焦点的情况下,首先必须取得要接收按键的窗口句柄,这要用到Windows API FindWindow 及 FindWindowEx,首先用 FindWindow 取得应用程序顶层(Top Level)窗口的句柄,然后再用 FindWindowEx 取得要接收按键的子窗口或控件的句柄,因为应用程序顶层窗口不一定就是接受按键的窗口(如“NotePad.exe”记事本程序,实际接受按键的窗口是Notepad主窗口下的Edit控件),可以通过ClassID或Caption来查找。假设目标窗口的句柄已取得(hwnd),然后要用PostMessage向该窗口发送按键消息,对于普通字符键,直接用WM_CHAR消息最简单,如下:
PostMessage hwnd, WM_CHAR, Asc("A"), 0 ' 发送一个 A 字符
对于非普通字符按键,如功能键、方向键等,要用 WM_KEYDOWN、WM_KEYUP 消息,如下:
PostMessage hWndMsg, WM_KEYDOWN, VK_ESCAPE, &H00010001 ' 模拟按下 Esc 键
PostMessage hWndMsg, WM_KEYUP, VK_ESCAPE, &HC0010001 ' 模拟抬起 Esc 键
以上最后一个参数(lParam)低16位(0001)表示按键一次,高8位00表示按下,C0表示抬起,次高8位(01)表示该键的扫描码,可用 API MapVirtualKey(VirtualKey, 0)取得(注意:扫描码在各系统可能会不同,在此以具体数值示例,实际应用MapVirtualKey取得)。
下面要讲Shift/Control/Alt修饰键与其它按键的组合怎样发送,对于Shift和Control用以下方式(用到 API keybd_event):
keybd_event VK_SHIFT, &H2A, 0, 0 ' 模拟按下SHIFT键,&H2A是VK_SHIFT的扫描码
PostMessage hWndMsg, WM_KEYDOWN, VK_A, &H001E0001 ' 模拟按下 A 键,SHIFT+A产生一个大写A字符
PostMessage hWndMsg, WM_KEYUP, VK_A, &HC01E0001 ' 模拟抬起 A 键
keybd_event VK_SHIFT, &H2A, KEYEVENTF_KEYUP, 0 ' 模拟抬起 SHIFT 键
以上VK_SHIFT(扫描码2A)换成VK_CONTROL(扫描码1D)就可以实现Ctrl组合键,VK_A(扫描码1E)也可以换成任意功能键,如VK_F4(扫描码3E)。
对于Alt修饰键比较特别,它属于系统按键,要用 WM_SYSKEYDOWN/WM_SYSKEYUP 消息,如下:
PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H003E0001 Or &H20000000 ' 模拟按下 Alt+F4
PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or &H20000000 ' 模拟抬起 Alt+F4
' &H20000000 为 context code 位,置 1 表示 Alt 键被按下

至此,大功告成!祝各位心情愉快!本回答被提问者采纳

以上是关于在VC中用PostMessage()发送消息,为啥会发送失败?的主要内容,如果未能解决你的问题,请参考以下文章

VC++/MFC中用PostMessage发送鼠标点击事件

VC6.0我用PostMessage向某窗口发送按键消息循环 但每次按键的时候都有咚咚的声音怎么能去掉呢

如何在VB中用PostMessage向指定窗口发送带有修饰键的组合键?

VC中怎么用PostMessage传送一个按钮被按下的消息?怎样用PreTranslateMessage来屏蔽F1消息却不出现帮助框

PostMessage 不会触发消息处理程序

MFC发送自定义消息-PostMessage和SendMessage