今天要讨论的是检测本地网络连接的状态改变,例如禁用/启用网络连接,拔出/插入网线等.我最初的想法是这些都属于硬件信息的改动,操作系统应该会有消息发送给应用程序,就跟插入u盘一样样的.但后来的实践发现这个行不通,我们的程序只能收到最最概括的一个硬件信息改动消息.虽然没有事件通知,不过对于网络断开还是很好检测到的,因为此时操作系统会关闭所有的tcp连接,只要你的程序有tcp连接,那你就能在socket的On Close函数里面处理断开事件.而网络的恢复就没那么容易了,幸好这时候还有 IsNetworkAlive 函数能帮我们了.当网络连接断开时,我们启动一个定时器,不断调用该函数,如果检测到本地网络由断开到恢复时,就可以立即重新连接了.
另外,据说我们还能通过注册wmi事件的方式来捕捉这些改动,因为之前没用过,还没试过,下次有空试试.
-------------------我是一条分割线,割割更健康---------------------
记一笔如何让一个窗口永远停在屏幕最上方,且一直拥有输入焦点.停在最前方,只要Z_Order是topmost就行,而要拥有输入焦点,则要在wm_active的消息处理中做点手脚.不过不能立即在里面直接设置自己的窗口为活动窗口,因为操作系统会在你处理完你自己的wm_active消息后,会再将下一个窗口设置为活动窗口,他可不会理会你自封的活动窗口.这时候你需要先冷静一会,不要和操作系统抢,等几个毫秒,再设置自己的就可以了.