导航:首页 > 程序命令 > 分流器命令

分流器命令

发布时间:2022-11-03 01:45:13

❶ 如何把流量分流!!

不是软件问题 是你设置问题 你用的是路由器吧 在上面可以设置的路由器配置指南

对路由器进行基本配置,使电脑通过路由器实现共享上网,过程相对来说比较容易实现;这篇文档下面的内容,主要讲述如下几部分:
1, 收集并判断信息,为配置路由器做准备;
2, 进入路由器管理界面,对路由器进行配置;
3, 配置过程简单的故障定位排除;
让我们快快开始,进入正题!

1, 置路由器前的准备工作(如果你对你自己的连接方式清楚,可以直接跳到第2点)
第一个需要确认的就是您的“宽带接入方式”是怎样的?
当然,最简捷的办法就是给您的ISP(互联网服务提供商)打个电话咨询一下;也可以通过您购买路由器以前的网络连接方式进行快速判断。
常见的硬件连接方式有下面几种:
1, 电话线 —> ADSL MODEM —> 电脑
2,双绞线(以太网线)—> 电脑
3,有线电视(同轴电缆)—> Cable MODEM —> 电脑
4,光纤 —> 光电转换器 —> 代理服务器 —> PC

ADSL / VDSL PPPoE :电脑上运行第三方拨号软件如Enternet300或WinXP 系统自带的拨号程序,填入ISP提供的账号和密码,每次上网前先要拨号;
或者您的ADSL MODEM 已启用路由功能,填入了ISP提供的账号和密码,拨号的动作交给 MODEM 去做;(这种宽带接入方式典型的比如南方电信提供的“ 网络快车 ”)
静态IP :ISP提供给您固定的IP地址、子网掩码、默认网关、DNS ;
动态IP :电脑的TCP/IP属性设置为“自动获取IP地址”,每次启动电脑即可上网;(这种宽带接入方式典型的比如深圳“天威视讯”)
802.1X+静态IP :ISP提供固定的IP地址,专用拨号软件,账号和密码 ;
802.1X+动态IP :ISP提供专用拨号软件,账号和密码 ;
WEB认证 :每次上网之前,打开IE浏览器,先去ISP指定的主页,填入ISP提供的用户名密码,通过认证以后才可以进行其他得上网操作;
(上面的黑体字就是您的宽带接入方式,接入方式和硬件连接方式并不是固定搭配的)

上面提到的这些连接认证方式只是普及率比较高的一些宽带接入方式,当然还会有其他的拓扑连接以及认证方式的存在;所以,当您不能肯定自己的宽带方式的时候,最好向ISP咨询:自己装的宽带接入,IP地址是静态的还是动态的?认证使用的协议是PPPoE、802.1X还是WEB认证?当上面的两个问题有了答案,就可以对路由器进行配置了;

2, 怎样进入路由器管理界面?
先参照《用户手册》上面的图示,将ADSL MODEM、路由器、电脑连结起来;
TL-R4XX系列路由器的管理地址出厂默认:IP地址:192. 168. 1. 1 ,子网掩码:255. 255. 255. 0 (TL-R400 和TL-R400+ 两款的管理地址默认为:192. 168. 123. 254 ,子网掩码:255. 255. 255. 0)用网线将路由器LAN口和电脑网卡连接好,因为路由器上的以太网口具有极性自动翻转功能,所以无论您的网线采用直连线或交叉线都可以,需要保证的是网线水晶头的制作牢靠稳固,水晶头铜片没有生锈等。

电脑桌面上右键点击“网上邻居”,选择“属性”,在弹出的窗口中双击打开“本地连接”,在弹出的窗口中点击“属性”,然后找寻“Internet协议(TCP/IP)”,双击弹出“Internet协议(TCP/IP)属性”窗口;
在这个窗口中选择“使用下面的IP地址”,然后在对应的位置填入:
IP地址 :192. 168. 1. X(X范围2-254)、
子网掩码:255. 255. 255. 0 、
默认网关:192. 168. 1. 1 ,填完以后“确定”两次即可;
“Internet协议(TCP/IP)属性”窗口如下:

3,检查电脑和路由器能不能通讯?
可采用如下办法查看,打开电脑的DOS界面:
“开始”—>“程序”,点击“MS-DOS” (Win98操作系统)
“开始”—>“程序”—“附件”,点击“命令提示符” (Win2000/XP操作系统)

一是检查上面的IP地址配置是否生效?
在DOS窗口输入:ipconfig/all 并回车,当看到类似如下信息,表示配置生效 ,
IP Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . : 192. 168. 1. 10
Subnet Mast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .: 255. 255. 255. 0
Default Gateway. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . : 192. 168. 1. 1

二是从电脑往路由器LAN口发送数据包,看数据包能不能返回?在DOS窗口运行:
ping 192. 168. 1. 1 –t 并回车,如果出现如下类似信息,
Reply from 192. 168. 1. 1 : bytes=32 time<10ms TTL=128 Reply from 192. 168. 1. 1 : bytes=32 time<10ms TTL=128 Reply from 192. 168. 1. 1 : bytes=32 time<10ms TTL=128 如果回车后没有出现上面的信息,确提示输入的命令“不是内部命令或外部命令,也不是可运行的程序或批处理程序”,则说明命令输入有误,请检查空格之类的输入是否被忽略; 4,进入路由器管理界面;出现上图的信息,表示电脑可以和路由器通讯了,打开IE浏览器,在地址栏输入 192. 168. 1. 1 并回车,正常情况下会出现要求输入用户名和密码的对话框。当然,也有例外情况: 如果打开IE浏览器地址栏输入地址回车,弹出“脱机工作”的对话框,点即“连接”后出现拨号的小窗口,请点击IE浏览器菜单栏的“工具”—“Internet选项”,在弹出的对话框内点击“连接”属性页,界面如下图: 进行了上面的操作,应该说进入路由器管理界面应该没有什么障碍了; 5,开始配置路由器;有了刚开始时对宽带接入方式的信息准备,配置起来方便多了;刚进入路由器管理界面,会弹出一个类似下图“设置向导”界面,可以取消不理它; 进入路由器管理界面,在左列菜单栏中点击“网络参数”—>“WAN口设置”,就在这里配置路由器面向Internet方向的WAN口的工作模式,这是最关键的一步;
假设您的宽带接入方式为 ADSL PPPoE ,那就选择“WAN口连接类型”为“PPPoE”,填入“上网账号” 、“上网口令”,如果您是包月用户,再选择连接模式为:“自动连接”,点击“保存”即完成配置;保存完后“上网口令”框内填入的密码会多出几位,这是路由器为了安全起见专门做的;
然后您点击管理界面左列的“运行状态”,在运行状态页面“WAN口属性”,刚开始看不到对应的IP地址子网掩码默认网关DNS服务器等地址,就好像下面的这幅图,那说明路由器正在拨号过程中,等到这些地址都出现了相应的信息后,将其中的DNS服务器地址填入电脑“Internet协议(TCP/IP)”页面对应位置确定后,基本的设置就完成了,没有大碍的话可以冲浪了!

正常情况下一两分钟内,上图椭圆形部分会出现一系列地址,表明拨号成功;

6,故障情况列举;
如果上图椭圆形区域一直都没有变,看不到任何地址,有下面几种原因导致,请逐一排除:

1) ADSL MODEM上一般都会有一个ADSL灯,正常情况下MODEM加电并接好电话线后,这个灯会大致规律性地快慢闪烁,闪烁最终停止变为长亮;如果这个灯无休止的闪啊闪就是不长亮,请联系并告知ISP您的ADSL MODEM同局端的交换机不能同步,这个ADSL/DSL灯长亮的条件,是必须的;

2) 在配置过程中填入“上网口令”的时候不小心输错,不妨重新输入一遍;

3) ADSL MODEM 启用了“路由模式”, 需要将ADSL MDOEM复位成“桥接模式”;怎么复位到桥接模式可以和MODEM厂家联系取得操作方法;也可以这样判断:电脑接MODEM,并且在电脑上拨号,拨号成功以后可以上网,如果是这种情况的话,则说明MODEM的工作方式是桥接模式,可以排除这一可能性;

4) ISP将电脑网卡的MAC地址帮定到了ADSL线路上;解决的办法就是使用路由器的“MAC地址克隆”功能,将网卡的MAC地址复制到路由器的WAN口;

如果上面的可能性都排除了,ADSL PPPoE拨号一般就没什么问题了,下面列举的是另2个值得关注的故障原因;

5) 您的宽带接入方式是那种以太网线直接引入,不是ADSL但同样需要拨号,拨号的软件不局限于一种,认证使用的协议也是PPPoE,但就是拨号成功不了;如果ISP承诺带宽是10Mbps ,建议:找个10/100M自适应的集线器,将宽带进线接在集线器上,然后再连结集线器到路由器WAN口;经过这样一个速率适配的过程,拨号应该没有问题的;

6) 购买路由器前,您也是通过电脑运行拨号软件,填入用户名口令拨号。但拨号软件是ISP提供的专用软件,别的软件拨号是成功不了的;如果是这种情况,请联系ISP咨询一下:您的宽带接入,认证使用的协议是802. 1X 吗?如果是的,有种可能是认证系统在开发过程中加入私有信息,导致路由器拨号失败;

7,其他配置

1) 安全设置
当可以正常上网了,可能出于不同的原因,您想要对内部局域网的电脑上网操作,开放不同的权限,比如只允许登录某些网站、只能收发E-mail、一部分有限制、一部分不限制;用户在这方面需求差异较大,有些通过路由器可以实现,有些用路由器是没办法完全实现的,比如“IP地址和网卡地址绑定”这个功能,路由器不能完全做到;
我们上网的操作,其实质是电脑不断发送请求数据包,这些请求数据包必然包含一些参数比如:源IP、目的IP、源端口、目的端口等等;路由器正是通过对这些参数的限制,来达到控制内部局域网的电脑不同上网权限的目的;
下面我们会列举具有代表性的配置举例,来说明路由器“防火墙设置”、“IP地址过滤”这些功能是怎样使用的?列举的事例以及上面红字部分的解释,都是为了帮助您尽可能理解各个功能参数的含义,只有理解了参数的含义,您才可以随心所欲的配置过滤规则,迅速实现您预期的目的,而不会因为配置错误导致不能使用这些功能,也不会因为由于得不到及时的技术支持而耽误您的应用;

上图是“防火墙设置”页面,可以看到这是一个总开关的设置页面,凡是没有使用的功能,就请不要在它前面打钩选中;
除了总开关,再有就是两个过滤功能“缺省过滤规则”的确定,何谓缺省过滤规则?我们在具体规则设置页面里,定义一些特定的规则,对符合条件的数据包进行控制处理,而这儿的“缺省规则”顾名思义,限定的是我们定制的规则中没有涉及到不符合的数据包该怎么办?这个应该不难理解吧;
一个数据包,要吗符合我们设定的规则,要吗不符合我们设定的规则但同时必定符合缺省规则;

上图就是“IP地址过滤”页面,我们可以看到缺省的过滤规则,可以填加新条目;

上图就是详细具体的规则设置页面,各项参数如上;
我们配置一条规则:限制内部局域网的一台电脑,IP地址192. 168. 1. 10,只让它登录www.tp-link.com.cn这个网站,别的任何操作都不行;
上面这条规则可以解读为:内网电脑往公网发送数据包,数据包的源IP地址是要限制的这台电脑的IP地址192. 168. 1. 10,数据包目的IP地址202. 96. 137. 26 ,也就是www.tp-link.com.cn这个域名对应的公网IP地址,广域网请求因为是针对网站的限制,所以端口号是80 ;规则设置好界面如下图:

可以在配置好的规则页面清晰看到,规则生效时间是24小时,控制的对象是IP地址为
192. 168. 1. 10这台主机,局域网后面的端口默认不要填,广域网IP地址栏填入的是www.tp-link.com.cn对应的公网IP地址,端口号因为是网站所以填80,协议一般默认选择ALL就行了;是否允许通过呢?因为缺省规则是禁止不符合设定规则的数据包通过路由器,所以符合设定规则的数据包允许通过,规则状态为生效的;

上面这幅图片新加了第二条规则,请问第二条规则设定的是什么数据包?

如果您的规则中涉及对网站进行限制,也就是目的请求端口是80的,则应该考虑对应的将53这个端口对应数据包也允许通过,因为53对应的是去往“域名解析服务器”的数据包,用于将域名(如www.tp-link.com.cn)和IP地址(如202. 96. 137. 26)对应的,所以必须开!

配置“IP地址过滤规则”这个功能用来实现您的一些目的,最主要的是分析都要做那些控制,然后选择怎样的缺省规则?配置怎样的过滤规则?如果您决心了解这个功能的真正作用,通过仔细参考资料和在路由器上反复的实验,您一定可以完全掌握的!

❷ 两条宽带怎么分流给不同的用户

你这个可以直接通过策略路由来实现,直接在AR1上配置ACL,行为,策略,应用到接口
acl name dianxinyi 3000
rule 5 permit ip destination 192.168.1.0 0.0.0.255 //内网1网段走电信
acl name dianxiner 3001
rule 30 permit ip destination 192.168.2.0 0.0.0.255 //内网2网段走电信
traffic classifier dianxinyi
if-match acl dianxinyi
traffic classifier dianxiner
if-match acl dianxiner
traffic behavior dianxinyi
redirect ip-nexthop 61.139.2.69 //AR2的接口e0/0/0地址 ,匹配对应流量后直接修改下一跳地址
traffic behavior dianxiner
redirect ip-nexthop 10.172.216.10 //AR3的接口e0/0/0地址 ,匹配对应流量后直接修改下一跳地址
traffic policy dianxinfenliu //配置策略,匹配流量,然后进行的动作
classifier dianxinyi behavior dianxinyi
classifier dianxiner behavior dianxiner
最后将策略应用到接口,这里我建议你在路由器上做,华为的ENSP模拟器交换机没法做策略路由实验,有BUG,路由器上可以实现
路由器AR1
inter g 0/0/1
traffic-policy dianxinfenliu inbound //应用策略到接口,对应方向

❸ 小区宽带怎么再分流,具体方法怎么设置。

从你的第一条信息可以看出是那种粗的灰黑色的网线,而不是白色的细细的电话线,自然不需要“猫”/解调器,当然,adsl还是要开机后拨号上网。(这个用路由器可以解决)

你就是想要把进入你家的这根网线分开,提供给两台电脑上网。这样,你直接买一个无线路由器搞定,价格100元左右,好些的300左右足矣。

把internet总线(即进入你家的那根线)插在路由器的总线端口,在花几块钱买两根足够长的网线(两口都是接口网线),分别各自连接路由器的分输出线端口和机箱后面板,每个路由器最多支持4+个机器上网,如果你有更多的机器,还可以用这个分流。

路由器设置很简单,网上包括说明书上面都有(看不懂可以hi我),设置完成,可谓一劳永逸,让后电脑开机后就自动连接不需要拨号。

具体型号没啥要求,TP-link和D-link这两个牌子的不错。

根据你的补充提问:
不需要在网络邻居-属性中进行任何设置
买来无线路由器后只需对路由器进行简单设置(就是把账号密码输入进去,让后路由器长久储存,每次开机后自动拨号,同时也能提供无线信号,提供笔记本等上网)

❹ vc/mfc 进程消息队列,线程消息队列,和系统消息队列,该如何处理

队列消息和非队列消息

从消息的发送途径来看,消息可以分成2种:队列消息和非队列消息。消息队列由可以分成系统消息队列和线程消息队列。系统消息队列由Windows维护,线程消息队列则由每个GUI线程自己进行维护,为避免给non-GUI现成创建消息队列,所有线程产生时并没有消息队列,仅当线程第一次调用GDI函数数系统给线程创建一个消息队列。队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给目的窗口过程。

对于队列消息,最常见的是鼠标和键盘触发的消息,例如WM_MOUSERMOVE,WM_CHAR等消息,还有一些其它的消息,例如:WM_PAINT、WM_TIMER和WM_QUIT。当鼠标、键盘事件被触发后,相应的鼠标或键盘驱动程序就会把这些事件转换成相应的消息,然后输送到系统消息队列,由Windows系统去进行处理。Windows系统则在适当的时机,从系统消息队列中取出一个消息,根据前面我们所说的MSG消息结构确定消息是要被送往那个窗口,然后把取出的消息送往创建窗口的线程的相应队列,下面的事情就该由线程消息队列操心了,Windows开始忙自己的事情去了。线程看到自己的消息队列中有消息,就从队列中取出来,通过操作系统发送到合适的窗口过程去处理。

一般来讲,系统总是将消息Post在消息队列的末尾。这样保证窗口以先进先出的顺序接受消息。然而,WM_PAINT是一个例外,同一个窗口的多个 WM_PAINT被合并成一个 WM_PAINT 消息, 合并所有的无效区域到一个无效区域。合并WM_PAIN的目的是为了减少刷新窗口的次数。

非队列消息将会绕过系统队列和消息队列,直接将消息发送到窗口过程,。系统发送非队列消息通知窗口,系统发送消息通知窗口。 例如,当用户激活一个窗口系统发送WM_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR。这些消息通知窗口它被激活了。非队列消息也可以由当应用程序调用系统函数产生。例如,当程序调用SetWindowPos系统发送WM_WINDOWPOSCHANGED消息。一些函数也发送非队列消息,例如下面我们要谈到的函数。

消息的发送

了解了上面的这些基础理论之后,我们就可以进行一下简单的消息发送与接收。

把一个消息发送到窗口有3种方式:发送、寄送和广播。

发送消息的函数有SendMessage、SendMessageCallback、SendNotifyMessage、SendMessageTimeout;寄送消息的函数主要有PostMessage、PostThreadMessage、PostQuitMessage;广播消息的函数我知道的只有BroadcastSystemMessage、BroadcastSystemMessageEx。

SendMessage的原型如下:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam),这个函数主要是向一个或多个窗口发送一条消息,一直等到消息被处理之后才会返回。不过需要注意的是,如果接收消息的窗口是同一个应用程序的一部分,那么这个窗口的窗口函数就被作为一个子程序马上被调用;如果接收消息的窗口是被另外的线程所创建的,那么窗口系统就切换到相应的线程并且调用相应的窗口函数,这条消息不会被放进目标应用程序队列中。函数的返回值是由接收消息的窗口的窗口函数返回,返回的值取决于被发送的消息。

PostMessage的原型如下:BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam),该函数把一条消息放置到创建hWnd窗口的线程的消息队列中,该函数不等消息被处理就马上将控制返回。需要注意的是,如果hWnd参数为HWND_BROADCAST,那么,消息将被寄送给系统中的所有的重叠窗口和弹出窗口,但是子窗口不会收到该消息;如果hWnd参数为NULL,则该函数类似于将dwThreadID参数设置成当前线程的标志来调用PostThreadMEssage函数。

从上面的这2个具有代表性的函数,我们可以看出消息的发送方式和寄送方式的区别所在:被发送的消息是否会被立即处理,函数是否立即返回。被发送的消息会被立即处理,处理完毕后函数才会返回;被寄送的消息不会被立即处理,他被放到一个先进先出的队列中,一直等到应用程序空线的时候才会被处理,不过函数放置消息后立即返回。

实际上,发送消息到一个窗口处理过程和直接调用窗口处理过程之间并没有太大的区别,他们直接的唯一区别就在于你可以要求操作系统截获所有被发送的消息,但是不能够截获对窗口处理过程的直接调用。

以寄送方式发送的消息通常是与用户输入事件相对应的,因为这些事件不是十分紧迫,可以进行缓慢的缓冲处理,例如鼠标、键盘消息会被寄送,而按钮等消息则会被发送。

广播消息用得比较少,BroadcastSystemMessage函数原型如下:

long BroadcastSystemMessage(DWORD dwFlags,LPDWORD lpdwRecipients,UINT uiMessage,WPARAM wParam,LPARAM lParam);

该函数可以向指定的接收者发送一条消息,这些接收者可以是应用程序、可安装的驱动程序、网络驱动程序、系统级别的设备驱动消息和他们的任意组合。需要注意的是,如果dwFlags参数是BSF_QUERY并且至少一个接收者返回了BROADCAST_QUERY_DENY,则返回值为0,如果没有指定BSF_QUERY,则函数将消息发送给所有接收者,并且忽略其返回值。

窗口过程

窗口过程是一个用于处理所有发送到这个窗口的消息的函数。任何一个窗口类都有一个窗口过程。同一个类的窗口使用同样的窗口过程来响应消息。 系统发送消息给窗口过程将消息数据作为参数传递给他,消息到来之后,按照消息类型排序进行处理,其中的参数则用来区分不同的消息,窗口过程使用参数产生合适行为。

一个窗口过程不经常忽略消息,如果他不处理,它会将消息传回到执行默认的处理。窗口过程通过调用DefWindowProc来做这个处理。窗口过程必须return一个值作为它的消息处理结果。大多数窗口只处理小部分消息和将其他的通过DefWindowProc传递给系统做默认的处理。窗口过程被所有属于同一个类的窗口共享,能为不同的窗口处理消息。下面我们来看一下具体的实例:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

消息分流器

通常的窗口过程是通过一个switch语句来实现的,这个事情很烦,有没有更简便的方法呢?有,那就是消息分流器,利用消息分流器,我们可以把switch语句分成更小的函数,每一个消息都对应一个小函数,这样做的好处就是对消息更容易管理。

之所以被称为消息分流器,就是因为它可以对任何消息进行分流。下面我们做一个函数就很清楚了:

void MsgCracker(HWND hWnd,int id,HWND hWndCtl,UINT codeNotify)
{
switch(id)
{
case ID_A:
if(codeNotify==EN_CHANGE)...
break;
case ID_B:
if(codeNotify==BN_CLICKED)...
break;
....
}
}

然后我们修改一下窗口过程:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
HANDLE_MSG(hWnd,WM_COMMAND,MsgCracker);
HANDLE_MSG(hWnd,WM_DESTROY,MsgCracker);
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

在WindowsX.h中定义了如下的HANDLE_MSG宏:

#define HANDLE_MSG(hwnd,msg,fn) \
switch(msg): return HANDLE_##msg((hwnd),(wParam),(lParam),(fn));

实际上,HANDLE_WM_XXXX都是宏,例如:HANDLE_MSG(hWnd,WM_COMMAND,MsgCracker);将被转换成如下定义:

#define HANDLE_WM_COMMAND(hwnd,wParam,lParam,fn)\
((fn)((hwnd),(int)(LOWORD(wParam)),(HWND)(lParam),(UINT)HIWORD(wParam)),0L);

好了,事情到了这一步,应该一切都明朗了。

不过,我们发现在windowsx.h里面还有一个宏:FORWARD_WM_XXXX,我们还是那WM_COMMAND为例,进行分析:

#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
(void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl))

所以实际上,FORWARD_WM_XXXX将消息参数进行了重新构造,生成了wParam && lParam,然后调用了我们定义的函数。

MFC消息的处理实现方式

初看MFC中的各种消息,以及在头脑中根深蒂固的C++的影响,我们可能很自然的就会想到利用C++的三大特性之一:虚拟机制来实现消息的传递,但是经过分析,我们看到事情并不是想我们想象的那样,在MFC中消息是通过一种所谓的消息映射机制来处理的。

为什么呢?在潘爱民老师翻译的《Visual C++技术内幕》(第4版)中给出了详细的原因说明,我再简要的说一遍。在CWnd类中大约有110个消息,还有其它的MFC的类呢,算起来消息太多了,在C++中对程序中用到的每一个派生类都要有一个vtable,每一个虚函数在vtable中都要占用一个4字节大小的入口地址,这样一来,对于每个特定类型的窗口或控件,应用程序都需要一个440KB大小的表来支持虚拟消息控件函数。

如果说上面的窗口或控件可以勉强实现的话,那么对于菜单命令消息及按钮命令消息呢?因为不同的应用程序有不同的菜单和按钮,我们怎么处理呢?在MFC库的这种消息映射系统就避免了使用大的vtable,并且能够在处理常规Windows消息的同时处理各种各样的应用程序的命令消息。

说白了,MFC中的消息机制其实质是一张巨大的消息及其处理函数的一一对应表,然后加上分析处理这张表的应用框架内部的一些程序代码.这样就可以避免在SDK编程中用到的繁琐的CASE语句。

MFC的消息映射的基类CCmdTarget

如果你想让你的控件能够进行消息映射,就必须从CCmdTarget类中派生。CCmdTarget类是MFC处理命令消息的基础、核心。MFC为该类设计了许多成员函数和一些成员数据,基本上是为了解决消息映射问题的,所有响应消息或事件的类都从它派生,例如:应用程序类、框架类、文档类、视图类和各种各样的控件类等等,还有很多。

不过这个类里面有2个函数对消息映射非常重要,一个是静态成员函数DispatchCmdMsg,另一个是虚函数OnCmdMsg。

DispatchCmdMsg专门供MFC内部使用,用来分发Windows消息。OnCmdMsg用来传递和发送消息、更新用户界面对象的状态。

CCmdTarget对OnCmdMsg的默认实现:在当前命令目标(this所指)的类和基类的消息映射数组里搜索指定命令消息的消息处理函数。

这里使用虚拟函数GetMessageMap得到命令目标类的消息映射入口数组_messageEntries,然后在数组里匹配命令消息ID相同、控制通知代码也相同的消息映射条目。其中GetMessageMap是虚拟函数,所以可以确认当前命令目标的确切类。

如果找到了一个匹配的消息映射条目,则使用DispachCmdMsg调用这个处理函数;

如果没有找到,则使用_GetBaseMessageMap得到基类的消息映射数组,查找,直到找到或搜寻了所有的基类(到CCmdTarget)为止;

如果最后没有找到,则返回FASLE。

每个从CCmdTarget派生的命令目标类都可以覆盖OnCmdMsg,利用它来确定是否可以处理某条命令,如果不能,就通过调用下一命令目标的OnCmdMsg,把该命令送给下一个命令目标处理。通常,派生类覆盖OnCmdMsg时 ,要调用基类的被覆盖的OnCmdMsg。

在MFC框架中,一些MFC命令目标类覆盖了OnCmdMsg,如框架窗口类覆盖了该函数,实现了MFC的标准命令消息发送路径。必要的话,应用程序也可以覆盖OnCmdMsg,改变一个或多个类中的发送规定,实现与标准框架发送规定不同的发送路径。例如,在以下情况可以作这样的处理:在要打断发送顺序的类中把命令传给一个非MFC默认对象;在新的非默认对象中或在可能要传出命令的命令目标中。

消息映射的内容

通过ClassWizard为我们生成的代码,我们可以看到,消息映射基本上分为2大部分:

在头文件(.h)中有一个宏DECLARE_MESSAGE_MAP(),他被放在了类的末尾,是一个public属性的;与之对应的是在实现部分(.cpp)增加了一章消息映射表,内容如下:

BEGIN_MESSAGE_MAP(当前类, 当前类的基类)
file://{{AFX_MSG_MAP(CMainFrame)

消息的入口项

file://}}AFX_MSG_MAP
END_MESSAGE_MAP()

但是仅是这两项还远不足以完成一条消息,要是一个消息工作,必须有以下3个部分去协作:
1.在类的定义中加入相应的函数声明;

2.在类的消息映射表中加入相应的消息映射入口项;

3.在类的实现中加入相应的函数体;

消息的添加

有了上面的这些只是作为基础,我们接下来就做我们最熟悉、最常用的工作:添加消息。MFC消息的添加主要有2种方法:自动/手动,我们就以这2种方法为例,说一下如何添加消息。

1、利用Class Wizard实现自动添加

在菜单中选择View-->Class Wizard,也可以用单击鼠标右键,选择Class Wizard,同样可以激活Class Wizard。选择Message Map标签,从Class name组合框中选取我们想要添加消息的类。在Object IDs列表框中,选取类的名称。此时, Messages列表框显示该类的大多数(若不是全部的话)可重载成员函数和窗口消息。类重载显示在列表的上部,以实际虚构成员函数的大小写字母来表示。其他为窗口消息,以大写字母出现,描述了实际窗口所能响应的消息ID。选中我们向添加的消息,单击Add Function按钮,Class Wizard自动将该消息添加进来。

有时候,我们想要添加的消息本应该出现在Message列表中,可是就是找不到,怎么办?不要着急,我们可以利用Class Wizard上Class Info标签以扩展消息列表。在该页中,找到Message Filter组合框,通过它可以改变首页中Messages列表框中的选项。这里,我们选择Window,从而显示所有的窗口消息,一把情况下,你想要添加的消息就可以在Message列表框中出现了,如果还没有,那就接着往下看:)

2、手动地添加消息处理函数

如果在Messages列表框中仍然看不到我们想要的消息,那么该消息可能是被系统忽略掉或者是你自己创建的,在这种情况下,就必须自己手工添加。根据我们前面所说的消息工作的3个部件,我们一一进行处理:

1) 在类的. h文件中添加处理函数的声明,紧接在//}}AFX_MSG行之后加入声明,注意:一定要以afx_msg开头。

通常,添加处理函数声明的最好的地方是源代码中Class Wizard维护的表下面,但是在它标记其领域的{{}}括号外面。这些括号中的任何东西都将会被Class Wizard销毁。

2) 接着,在用户类的.cpp文件中找到//}}AFX_MSG_MAP行,紧接在它之后加入消息入口项。同样,也是放在{ {} }的外面

3) 最后,在该文件中添加消息处理函数的实体。

❺ 换了网络分流器用不了怎么办

首先,楼主一个概念上的错误。在网络设备中没有分流器这一种说法,听你的描述应该是交换机(SWITCH)或者是集线器(HUB)。
把你所谓的分流器更换成路由器,按说明书做好路由的设置工作,把你的台式机和笔记本分别按说明书设好IP地址和DNS等一类的地址就可以上网了。如果你不知道怎么做,建议你在DOS下使用IPCONFIG /ALL命令查看后截图到这里来。

❻ 一个手机上三个微信怎么上

1、手机打开应用商店,搜索下载一个微信多开。

❼ 联想小新笔记本为什么插上分流器就没有无线网

如今,笔记本电脑体积越来越小,便携性越来越好,功能也越来越强大,渐渐代替台式电脑成为人们心目中的理想上网设备。无论是在家中还是在公司使用,只要有无线网的地方都可以使用,无需连接网线。我们都知道,无线网是通过无线路由器建立的,在使用之前要先设置好无线路由器。但是很多朋友在无线路由器设置好了之后还是会搜不到无线网络,不明白这是什么原因。今天小编就为大家分享一下笔记本搜不到无线网的原因及解决办法。

在找到原因之前,大家先要检查一下自己的笔记本以及对无线路由器的设置是否正确,这些做好之后就可以开始找原因了。

1、大部分的笔记本电脑都是内置的无线网卡,因此如果搜不到无线网的话,要先看看自己的笔记本的无线 开关 是不是已经打开。如果没有打开请先打开再搜一下试试。

注意:关于笔记本的无线网卡问题,小编要在这里说一下。有些笔记本虽然是内置的无线网卡,但是在笔记本上往往还有一个无线开关。如果无线网卡设置正常仍然搜不到无线网,很可能是这个开关没开。这个时候大家需要通过笔记本的说明书来确认一下,或者网络查找一下也可以。

2、无线网卡想要运行是需要驱动的,因此大家可以在设备管理器当中查看一下无线网卡驱动是否成功安装,没有安装请先安装。然后再看一下无线网卡有没有启动。

3、看一看你的笔记本的无线服务是不是开启了,没有开启的话要先开启。开启方法小编来介绍一下,以XP系统为例吧。

右键点击“我的电脑”,选择“管理”,再选择“服务和应用程序”,然后在“服务”里查看“Wiressless Zero Configuration ”的状态,如果显示开启,那么双击它将它启动,把启动类型设置为“自动启动”。

4、如果这些都检查设置好了,那么就检查一下无线路由器的无线功能是不是开启而且允许SSID广播。检查方法可以用其他的无线设备来搜索一下,如智能手机。如果没有开启或者没有允许SSID广播的话,那么将它设置好。

5、还有一个原因就是有可能是无线路由器的信号不良,这时候可以将笔记本离得无线路由器近一些搜索一下,看看能不能搜到。如果还是不行,那就将无线路由器再重新设置一下,或者检查一下无线路由器是不是坏了之类的,再不行就换个无线路由器试试。

以上就是小编分享给大家的几种笔记本搜不到无线网的原因以及解决办法。这些都是众多网友在实践当中总结出来的经验,一般情况下都可以连接成功。如果实在不行的话,那么可以把无线路由器重启一下,或者恢复出厂设置。若再不行,那么大家就联系网通公司吧,让他们派专业的维修技术人员来帮你解决问题,这是最有效的办法,就是麻烦一点

❽ 魔兽世界各种宏命令对应的中文解释!

1、由于CastSpellByName()和TargetUnit()在2.0被禁用,所以2.0之前的大部分宏将无法使用。现在,宏写法也有了很大的变化。没有宏可以检查Buff,Debuff,冷却,血量,魔法,怒气,能量。但是,大家也不用太惋惜,现在的宏可以实现许多新的功能,并且非常强大。
2、在使用一些宏之前请先检查你的按键设置。系统默认Ctrl+1到10是使用宠物技能栏,而Shift+1到6是选定动作条。有些宏在使用时由于自己的设置有可能和这些默认的按键冲突,解决办法为改宏或者改掉系统默认的按键设置。

3、把这篇文章一字不漏的看完,那么95%的宏你都可以自己写了。

身上各个部位编号:
1:头
2:颈
3:肩
4:衬衣
5:胸
6:腰带
7:腿
8:脚
9:手腕
10:手套
11:手指1
12:手指2
13:饰品1
14:饰品2
15:背
16:主手
17:副手
18:远程武器

动作条编号:
主动作条1为 1--12
主动作条2为13--24
主动作条3(右1)为25--36
主动作条4(右2)为37--48
主动作条5(右下)为49--60
主动作条6(左下)为61--72

背包及包裹格子编号:
背包从右到左的编号分别是:4、3、2、1、0~
包裹格子的编号是从左至右排列,一个包的第一行分别是:1、2、3、4~
然后是包裹第2行:5、6、7、8~下面几行依次类推。

宏命令讲解:
/cast
简单的说就是/施放,并且使用这个命令的宏只有一个法术会被施放。现在的这个命令可以加入条件来判定法术是否被施放。比如“/cast [help,combat] 快速治疗”,这个宏的意思是当目标为友善,并且在战斗中,那么施放快速治疗。

可用的条件:
help-判断目标是否为友善;
harm-判断目标是否为敌对;
combat-判断你是否在战斗中;
stance或stance:#-判断你是否在姿态中或是否在指定姿态中;
stealth-判断你是否在潜行;
modifier或modifier:x(x可为shift、ctrl、alt 或者是它们的组合)判断某个或某几个按键是否被按下。
equipped:<item>-判断某件物品是否在装备中。<item>可以是装备栏编号、装备分类(武器、副手。。。)、装备子类(双手剑、法仗等等。。。)
target=<unit>-可以把技能目标指定为任何有效的目标,并且可以另你不丢失当前目标!<unit>还可以为“none”,用来指定没有目标的时候。“self”,用来指定只对自己施放。比如“/use [target=self] 厚符文布绷带”,无论任何时候都只对自己使用绷带。

actionbar:<number>-判断当前动作条是否被列出。<number>可为1、2、3、4、5、6~
pet:<pet type 或 pet name>-pet type为宠物类型;pet name为宠物名字。如果不填写宠物类型或名字则判断宠物是否存在。
mounted-判断是否在坐骑上。
swimming-判断是否在游泳。
flying-判断是否在飞行中。
outdoors-判断你是否在室外。
indoors-判断你是否在室内。
button:<#>判断某个特定按钮是否被用来触发技能。<#>可为1(鼠标左键)、2(鼠标右键)、3(鼠标按键3,也就是鼠标滚轮向下按,不是向上滚也不是向下滚)、4(鼠标按键4,多键鼠标专用)、5(鼠标按键5,多键鼠标专用)。默认为1。
channeling-判断你是否在引导法术。
channeling:法术名称-判断你是否在引导特定的法术。
exists-判断特定目标是否存在。
dead-判断目标是否死亡。
stance:<#>-判断是否在姿态中,默认为1(只写stance不写编号为默认)。牧师的暗影形态,盗贼的潜行都为1。
战士:1战斗、2防御、3狂暴
德鲁伊:1熊、2海豹?、3猫、4旅行、5枭兽/树
equipped:装备名称/类型/子类型-判断某件装备是否在装备中。比如“/cast [equipped:魔杖] 射击”,这个宏的意思是如果装备魔杖就使用射击。

/castsequence

连续点击可以按顺序施放指定法术。一个法术施放失败,后面的法术就不会被施放。

常使用的条件选相:

reset=<#>或target或combat或它们的组合,其他同“/cast”。

简单介绍一下<#>/target/combat的作用。
<#>-代表数字,一般都是1到1800,单位为秒。/castsequence reset=120 部落徽记,亡灵意志,这个宏的功能是先使用部落徽记,然后使用亡灵意志。如果120秒后亡灵意志依然没有被施放那么还是使用部落徽记。但是, reset=<#>永远都是在你施放最后一个法术的时候开始记时。
target-切换目标时重至宏。
combat-战斗开始时重至宏。

所有条件都可以在前面加“no”来达到相反的效果!比如“nocombat”,判断你是否不在战斗。
“,”相当于以前的and。比如“/cast [help,combat]快速治疗”,这句的意思就是目标为友方并且在战斗中时使用快速治疗。
“/”相当于以前的or。

/castrandom
随机施放法术,比如“/castrandom 变形术:猪,变形术:羊,变形术:龟”。(我变~我变~我变变变!)

/use
使用物品或装备,不再需要指定编号。比如“/use 厚符文布绷带”。

/userandom
随即使用指定的几件物品。

目标选定:
/targetenemy
选定一个敌对目标。

/targetfriend
选定一个友善目标。

/targetparty
选定一个小队队友为目标。

/targetraid
选定一个团队队友为目标。

/targetlasttarget
选定上个目标。

/targetlastenemy
选定上个敌对目标。

/assist
协助~同“/协助”。

宠物类:

/petattack
宠物攻击。

/petstay
宠物停止。

/petfollow
宠物跟随。

/petpassive
宠物被动形态。

/petdefensive
宠物防御形态。

/petaggressive
宠物攻击形态。

/petautocaston 法术名称
宠物法术自动施放开启。

/petautocastoff 法术名称
宠物法术自动施放关闭。

/focus
一直锁定一个目标~比如把这个命令和宠物攻击结合做一个宏。再比如你当前的宠物是MM,并且用这个宏让MM去攻击一个战士,然后你切换了目标,并让MM施放诱惑,这时MM诱惑的目标不会是你当前的目标,而是刚才的那个战士。

# show <法术名称/物品名称>
这个命令可以让你的宏显示指定法术或物品的图标。

/cancelaura
取消BUFF~比如“/cancelaura 奥术智慧”。

/stopmacro [option]
停止宏,可加条件判定。这里有一个特殊的例子:
/cast [harm] 变形术
/stopmacro [noharm]
/p 正在把%t变羊!别去碰它!
如果变形术施放失败,那么就不会在小队内说话。

/click
点击?貌似是的。和“/cast”一样何以加事件判断。
实例:/click [pet:虚空行者]PetActionButton1
还要说的一个重点内容:“PetActionButton1”,1可以改为1-10任何一个数,意思就是宠物技能栏的1-10。

最后,送大家两个宏:
/console SET targetNearestDistance "50"
将“TAB”能选定目标的最远距离改为50码。
/console SET targetNearestDistanceRadius "50"
将“TAB”能选定身后目标的最远距离设为50码,不过并不推荐这么做,20就够了。

学习实践这个帖子的小经验和小问题
学习实践这个帖子的小经验和小问题,终于可以用简体字了,我真不易..
因为在tf玩,所以下面有繁体字,技能名有出入...

先谈经验:
1.不要直接 别人的代码到以下文件中:
"盘符:\Program Files\World of Warcraft\WTF\Account\帐号名\服务器名\人物名\macros-cache.txt"
容易出问题,我就遇到过2行代码,死活不灵,在游戏里重新输入一遍,就好了 =..=

2.在宏里加一个"#showtooltip",看技能效果很方便,特别是"3吸取"那种宏,开始不熟悉快捷键可以看看.

3.不要乱添分号 ";":
但凡与写代码沾一点边的人,一行字结尾不加个";"就全身不舒服.....以懒人练级宏为例:
#showtooltip
/castsequence [nomodifier] reset=combat/target 生命虹吸,痛苦诅咒,腐蚀术,献祭,吸取生命,吸取生命;
/cast [modifier:alt]吸取灵魂;[modifier:ctrl]吸取法力;[modifier:shift]吸取生命;

这是一个错误的示范,加了";",后面的3吸取就没有效果了,要去掉....

4.宏的图标选择,请多试试图标选择面板里的第一个"问号图标".
以亡灵意志宏为例,图标选择"?",如果看看macros-cache.txt,图标名就是"INV_Misc_QuestionMark"

#showtooltip
/stopcasting
/cast [nomodifier]防护暗影结界;[modifier:alt]亡灵意志

这个宏在我的技能栏1的第5格上,按5就是暗防,按alt+5就是反恐.
当选择问号图标并拖到技能栏以后,问号图标就显示"防护暗影结界"的图标了,会显示该技能cd,当你按下"alt"(注意还不是"alt+5"),该图标自己变化为"亡灵意志",并且显示的是"亡灵意志"的cd.
上面经验3里那个宏我就用的问号图标,特方便看现在该施放哪一个技能了.懒要懒出境界,好比ui区的一个版主..

再来谈谈问题:

问题1:
在上面经验4的宏,按下ctrl或者shift时候,图标仍然是"防护暗影结界",但下面这个宏:

#showtooltip
/cast [nomodifier]生命分流;[modifier:alt]魔甲术;

如果按下ctrl或者shift时候,图标却变化为"?",当然手指抬起后,会正常不影响使用,不知是我个体的原因,还是什么,还请大家帮忙看看.

问题2:
在放火雨,或者搓暗蛋的时候,我想打断咒语吟唱,一般是后退2步,有没有宏可以直接打断?
/stopcasting 可以打断炉石,但是不能打断火雨什么的.
如果没有这种宏,能让我后退一步的宏也可以 =..=

问题3:
在wow2里我想在施放一个技能时候随机说一句话的宏如何写,前面那个绑定石头的好像不合适,以前那个跑龙套的喊话宏好像也不好用.
比如:
#showtooltip
/stopcasting
/cast 恐惧术

----------------------------------------------------------------

实用的自己搞定吧 喜欢什么做什么 别人的肯定不大适应

❾ 华为三层交换机多端口聚集镜像的命令

先指定一个本地镜像口observe-port 1 interface XXXX
然后在你需要镜像的端口下用port-mirroring to observe-port 1 后面跟inbound、outbound或者both就可以了

❿ LAN和WLAN双网卡分流

需要合理配置路由
举例而言,公司存在tplink无线网络,为192.168.1.*网段,网关为192.168.1.1;有线网络为10.99.31.*网段,网关为10.99.31.2;要实现访问外网时使用无线,内网使用有线,则配置方法为:
1:运行CMD

2:route delete 0.0.0.0 mask 0.0.0.0 10.99.31.2
删除所有网络连接都从网关10.99.31.2走这条路径;

3:route add 10.0.0.0 mask 255.0.0.0 10.99.31.2 metric 1
增加内网连接走内网网关路径;如果在该命令后加 -p参数将重新启动后命令有效,无需每次写这条命令了,只需要运行2就可以了。
可以将以上命令整合为一个bat文件,保存到所有程序项里面。在双网络都连接成功后,运行该bat文件就可以了。
关于Metric:
metric是路由算法用以确定到达目的地的最佳路径的计量标准,常用的metric值有:路径长度,可靠性,延迟,带宽,负载,通信代价等..
metric值的作用很大,我们常用它来计算路由的优先级,如两条到达相同网络的静态路由,metric小的优先级高;
因此,我们可以通过合理设置metric值来达到三个及三个以上多网络存在时的路由配置。

解释:
默认网关为无线环境tplink的192.168.1.1,所有的网络数据请求都将通过这个网关出去,也就是说所有的网络请求都从无线出去。
persistent routes列表代表所有10网段的都从有线的网关10.99.31.2出去,也就是说所有属于10网段的请求都从有线出去。通过这个路由来控制内网连接,也就是无线路由配置中所有网络请求走无线环境的例外!
另外,如果网络环境中配置有自动配置脚本,那么,配置脚本的优先级最高。网络的数据请求将按照配置脚本的配置实现。在此例中,如果有自动配置脚本proxy.pac,那么优先级别为proxy.pac>192.168.1.1>10.99.31.2;

阅读全文

与分流器命令相关的资料

热点内容
阿里云服务器远程链接不成功 浏览:482
文件系统pdf 浏览:762
原神安卓区服什么意思 浏览:34
贝壳app怎么线上发布 浏览:157
如何挑选安卓系统机顶盒 浏览:53
安卓快充使用有什么注意事项 浏览:909
黑马程序员的云计算网课 浏览:946
endnotestyle文件夹怎么导入 浏览:460
讲解少儿编程演讲会开头 浏览:424
思科交换机基础命令 浏览:497
便签可以设置加密吗 浏览:339
免费漫画app怎么看书 浏览:27
华为笔记本电脑怎么安装抖音app 浏览:412
阿里云国际版试用的服务器怎么搞 浏览:895
java正则表达式工具 浏览:160
oa服务器怎么设置ftp 浏览:10
安卓如何安装obb 浏览:442
QQ聊天记录journal文件夹 浏览:118
苹果公司云服务器地址 浏览:85
加密记事本手机 浏览:437