博文
快速导出数据为EXCEL文档(2006-11-19 20:31:00)
摘要:在网上的导出为 EXCEL文档的方法大概是这样的 Dim i As Integer, j As Integer Dim myexcel As New Excel.Application Dim mybook As New Excel.Workbook Dim mysheet As New Excel.Worksheet Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK Set mysheet = mybook.Worksheets.Add '添加一个新的SHEET ' For i = 1 To myres.RecordCount ' For j = 1 To myres.Fields.Count ' mysheet.Cells(i, j) = myres.Fields.Item(j - 1).Value ' If (i * j) Mod 500 = 0 Then ' DoEvents ' End If ' Next j ' myres.MoveNext ' Next i myexcel.Visible = True mybook.SaveAs (m_ExcelName) '保存文件
这中方法没什么错误,但是如果数据量很大的话,麻烦就来了,出现程序长时间不响应 关键是循环,下给出我的代码 假设定义的记录名为myres Dim myexcel As New Excel.Application Dim mybook As New Excel.Workbook Dim mysheet As New Excel.Worksheet Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK Set mysheet = mybook.Worksheets.Add '添加一个新的SHEET myexcel.visible=true mysheet.Cells.CopyFromRecordset myres mybook.SaveAs (m_ExcelName) '保存文件
利用这个代码可以大大的缩短导出时间,8000多个纪录用第一种方法大概需要2分多 而用第二种方法只大概要4秒,可以亲......
用mscomm控件检测modem是否与计算机联接正确?(2006-11-14 12:18:00)
摘要:1、怎么用mscomm控件检测modem是否与计算机联接正确?2、如何用mscomm挂断modem与别的电话机间的连接?(已接通)
我用mscomm写了一个拨号程序,有二个问题想请教:
1、怎么用mscomm控件检测modem是否与计算机联接正确?
2、如何用mscomm挂断modem与别的电话机间的连接?(已接通)
连接
我记得MODEN连接好了可以接受串口的信号,比如,你发送AT,应该返回OK,有的时候则返回AT,说明是连上了的
Function ModenSeach(com As Integer, Default As String) As String
Dim a As String
On Error GoTo aa:
MSComm.CommPort = com
MSComm.InputMode = comInputModeBinary
MSComm.Settings = "9600,n,8,1"
If MSComm.PortOpen = True Then
MSComm.PortOpen = False
End If
MSComm.DTREnable = True
MSComm.EOFEnable = True
MSComm.RTSEnable = True
MSComm.PortOpen = True
MSComm.Output = "at"
a = EcrReadOne(2): a = LCase(a)
If InStr(a, "at") <> 0 Or InStr(a, "ok") <> 0 Then
ModenSeach = "Moden"
Else
ModenSeach = Default
End If
Exit Function
aa:
ModenSeach = Default
'EndTransmit
End Function
Function EcrReadOne(number As Integer) As String
Dim out() As Byte, i As Integer, data As String
data = "": i = 1
Do
DoE......
仿qq用DELPHI实现透明以及半透明窗体(2006-09-10 22:33:00)
摘要:在QQ中,我可以调节面板的透明度。如果我们自己编程,应该如何实现呢?
(一)半透明窗体
在windows2000以及后续产品中下增加了一些API,可以轻易的实现半透明的窗体,源程序如下:
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
const//定义常量
WS_EX_LAYERED = $80000;
AC_SRC_OVER = $0;
AC_SRC_ALPHA = $1;
AC_SRC_NO_PREMULT_ALPHA = $1;
AC_SRC_NO_ALPHA = $2;
AC_DST_NO_PREMULT_ALPHA = $10;
AC_DST_NO_ALPHA = $20;
LWA_COLORKEY = $1;
LWA_ALPHA = $2;
ULW_COLORKEY = $1
ULW_ALPHA = $2
ULW_OPAQUE = $4
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函数声明
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormC......
网吧电信网通转换代码(2006-09-10 22:20:00)
摘要:
网吧电信网通转换代码
切换到电信Sub Setip(strgw,strgwMetric,strdns) Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") For Each objNetAdapter in colNetAdapters errGateways = objNetAdapter.SetGateways(strgw, strgwmetric) errSetDNS = objNetAdapter.SetDNSServerSearchOrder(strdns) If errGateways = 0 Then Else WScript.Echo "更改失败,"& errGateways End If NextEnd Sub
gw="192.168.0.1" '网关fdns="219.146.0.130" '主dnssdns="202.102.128.68" '备dns
sgw = Array(gw)sgwMetric = Array(1)stdns=Array(fdns,sdns)
myvar=MsgBox("请先确认不在游戏中,否则会造成你的游戏中断!"&vbCrLf&"按确定进行切换,按取消退出", 65, "警告")if myvar=vbok thenSetip sg......
QBASIC中的活动图像(2006-09-07 16:41:00)
摘要:翻译:ShiningRay Wiki地址QBASIC中的活动图像
Mallard著
[ 注 - 这个指导主要针对EGA图形]
[ 需要VGA图形的信息, 给Mallard发电子邮件: mallard@gcomm.com]
这个指导预期是给精通标准QBasic命令的中级的程序员看的。
从http://www.wp.com/80948/qb取得这篇文章
--------------
[内容目录]
(1) QBasic能做什么?
(2) 利用DATA来建立图形
(2) GET和PUT图形
(4) 这是怎样工作的?
--------------
[QBasic能做什么?]
QBasic不意味着一个好的环境可以适应图形的运用。相反,它意味着初学者
的语言应该是有条理的编程,使用基本的编程手法就够了。无论如何,只要使用
其中一些函数,当我们充分运用它的能力时,就可以达到比较理想的图形品质。
在这里,最好的屏幕模式是SCREEN 7,320 X 200 16色的屏幕模式。也许这看
上去很简单,但这个模式很快而且有多个复合的“页面”可以用来来消除闪烁。
VGA 图形也能完成,但如果计算机不是很快,就会发生很多闪烁。
当然,即使没有这篇指导,你也可以用 LINE,CIRCLE和PSET,但这个方法更
快、更好、更专业的。在这篇文章讲的所有方法都是我自创的 ,我一个人研究了
很多年了。
--------------
[使用DATA来建立图形]
这个方法中使用的图形是我事先用自己写的图形编辑器专门为这篇指导制作
的,但最后还是转变为用DATA语句来读取颜色值。我将开始解释如何使用DATA语
句制作图形。
首先,你得决定你的图形将有多大。例如,你选择了10x10像素大小的图片。
要做一个图像,先象这样做一个表格:
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00......
浅谈用VB6.0编写“特洛伊木马”程序(2006-05-29 12:44:00)
摘要:木马,也称特伊洛木马,名称源于古希腊的特伊洛马神话,是一种远程控制软件。现在网络上流行的木马软件基本都是客户机/服务器模式也就是所谓的C/S结构,目前也有一些开始向B/S结构转变,在这里暂且不对B/S结构进行详谈,本文主要介绍C/S结构其原理就是在本机直接启动运行的程序拥有与使用者相同的权限。因此如果能够启动服务器端(即被攻击的计算机)的服务器程序,就可以使用相应的客户端工具客户程序直接控制它了。下面来谈谈如何用VB来实现它。
首先使用VB建立两个程序,一个为客户端程序Client,一个为服务器端程序systry。 在Client工程中建立一个窗体,加载WinSock控件,称为tcpClient,协议选择TCP,再加入两个文本框,用以输入服务器的IP地址或服务器名,然后建立一个按钮,按下之后就可以对连接进行初始化了,代码如下:
Private Sub cmdConnect_Click() If Len(Text1.Text) = 0 And Len(Text2.Text) = 0 Then MsgBox ("请输入主机名或主机IP地址。") Exit Sub Else If Len(Text1.Text) > 0 Then tcpClient.RemoteHost = Text1.Text Else tcpClient.RemoteHost = Text2.Text End If End If tcpClient.Connect Timer1.Enabled = True End Sub
连接建立之后就可以使用DataArrival事件处理所收到的数据了。 在服务器端systry工程也建立一个窗体,加载WinSock控件,称为tcpServer,协议选择TCP,在Form_Load事件中加入如下代码:
Private Sub Form_Load() tcpServer.LocalPort = 1999 tcpServer.ListenEnd Sub
准备应答客户端程序的请求连接,使用ConnectionRequest事件来应答户端程序的请求,代码如下:
Private Sub tcpServer_ConnectionRequest(ByVal requestID As Lon......
用VB创建Windows快捷方式(无需DLL)(2006-05-29 12:37:00)
摘要:创建开始菜单快捷方式
Option ExplicitPrivate Sub Command1_Click()CreateProgManGroup Me, "测试", "test.grp"CreateProgManItem Me, "d:\ghost.exe", "Ghost"CreateProgManItem Me, "d:\setupQQ.exe", "QQ"End SubSub CreateProgManGroup(X As Form, GroupName$, GroupPath$)Dim i As IntegerX.Label1.LinkTopic = "ProgMan|Progman"X.Label1.LinkMode = 2Rem 空循环使DDE有时间执行For i = 1 To 10DoEventsNextX.Label1.LinkTimeout = 100Rem LinkExecute 是在DDE通道中传送这样的命令'──建立一个名为GroupName $的程序组。X.Label1.LinkExecute "[ CreateGroup (" + GroupName$ + Chr$(44) + GroupPath$ + ") ]"X.Label1.LinkTimeout = 50 '恢复Label1 的属性值X.Label1.LinkMode = 0End SubSub CreateProgManItem(X As Form, CmdLine$, IconTitle$)Dim i As IntegerX.Label1.LinkTopic = "ProgMan|Progman"X.Label1.LinkMode = 2For i = 1 To 10DoEventsNextX.Label1.LinkTimeout = 100X.Label1.LinkExecute "[AddItem(" + CmdLine$ + Chr$(44) + IconTitle$ + Chr$(44) + ", ,) ]"X.Label1.LinkTimeout = 50 '恢复Label1 的属性值X.Label1.LinkMode = 0Screen.MousePointer = 0End Sub 将程序建立成“启动”文件夹的捷径
Text1.LinkTopic = "P......
巧用Win32 API函数增强VB位操作功能(相关代码)(2006-05-23 22:50:00)
摘要:------------------------------------------------------------
本文相关代码:
-----------------------BitEx.Bas----------------------------
Option Explicit
'说明----------------------------------------
'这是一个增强 vb 的位操作功能的模块,主要包含
'有左右移位,取字节,字节连接等通用例程
'兼容性:VB5.0 ,6.0
'--------------------------------------------
'作者:刘琦 ,2005-1-11
'个人主页:http://LQweb.crcoo.com
'e-Mail:liuqi5521@hotmail.com
'api函数 拷贝内存
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
'-----------------------下面这些例程实现整型变量的拆分,合并操作-------------
Public Function Con(ByVal HiByte As Byte, ByVal LoByte As Byte) As Integer
'把两个字节 (Byte) 连成一个字 (word)
'INPUT--------------------------------------------------------------------
'HiByte 参与连结的高字节
'LoByte 参与连结的低字节
'OUTPUT-------------------------------------------------------------------
'返回值 连结的结果
'Last updated by Liu Qi 2004-3-20.
Dim iRet As Integer
'用到......
巧用Win32 API函数增强VB位操作功能(2)(2006-05-23 22:49:00)
摘要:2.移位运算的设计实现 在很多VB的资料和代码中都用乘以2的方法实现左移,除以2的方法实现右移。这是可行的,也是有理论依据的。下图是一个BYTE类型的权值表:
位序号
7
6
5
4
3
2
1
0
权值
27
26
25
24
23
22
21
20 可以看出每一位的权值都是比它低一位的那一位的权值的2倍,对一个BYTE变量左移一位相当于每一个二进制位都向高位移动,则每一位的权值变为原来的两倍(最高位除外),由于BYTE变量的十进制值等于它的每个二进制位的值和该位权值的乘积的总和,所以把一个BYTE变量左移和把它的十进制值乘以2是等效的,唯一的区别就是如果BYTE变量的最高位为 1,乘以2会溢出,我们要使用一个小技巧防止溢出:先把最高位屏蔽为0,再乘以2就不会溢出了。据此我们可以写出把BYTE类型变量左移1位的函数:
Private Function ShLB_By1Bit(ByVal Byt As Byte) As Byte‘把BYTE类型变量左移1位的函数,参数Byt是待移位的字节,函数返回移位结果‘(Byt And &H7F)的作用是屏蔽最高位。 *2:左移一位ShLB_By1Bit = (Byt And &H7F) * 2End Function 类似的把BYTE类型变量右移1位时采用除以2的方法 ,这时要注意舍去小数位,以免VB按照四舍五入的方法处理小数位而引起结果不正确。据此我们可以写出把BYTE类型变量右移1位的函数:
Private Function ShRB_By1Bit(ByVal Byt As Byte) As Byte‘把BYTE类型变量右移1位的函数,参数Byt是待移位的字节,函数返回移位结果‘/2:右移一位ShRB_By1Bit = Fix(Byt / 2)End Function
有了移一位的函数,那么移任意位数的函数就不难写出了:只要反复的调用ShLB_By1Bit()或ShRB_By1Bit()就可以了,参见代码中的函数ShLB() 和 ShRB()。
至此字节变量的移位问题已经得到解决,现在再来看单字和双字的移位,它们分别对应VB中的Integer和Long类型。用乘以2和除以2的......
巧用Win32 API函数增强VB位操作功能(1)(2006-05-23 22:47:00)
摘要:摘要:Visual Basic 的位操作功能较弱,甚至连最常用的移位运算都不支持,因此在使用VB开发诸如数据加密、压缩、通信之类的程序时往往困难重重。针对这一问题,本文详细地阐释了位操作的本质,并利用Win32 API函数实现了整型变量的拆分、合并、移位等VB不支持的位操作功能。一 引言 笔者在编程实践中发现,VB对位操作的支持仅限于AND、OR、XOR几种位运算,远远不如其他的开发工具那样全面(如Visual C++、C++Builder、Delphi等开发工具都提供了整形变量的移位、拆分、合并的运算),因此在使用VB编写诸如加密之类的通用数据处理程序时往往困难重重。为了使以后的开发工作不再陷入僵局,我开始寻求增强VB位操作功能的通用方法,以达到一劳永逸的效果。 VB的数据类型不够丰富,整形数只包括Byte、Integer、Long三种类型,分别对应C++中的 unsigned char、short 和 long 类型,而我们常用的二字节无符号整形unsigned short(也叫“字”、Word)、四字节无符号整形unsigned long(也叫“双字”、DWord)在VB中却没有被支持。 但好在无符号数和有符号数在二进制的层次上没有任何差别,不同之处仅在于编译器对变量的理解。在进行位操作时我们只关心变量的二进制位,因此VB中的Integer类型可以当作Word类型使用,Long类型则对应DWord。(此后文中提及的Integer类型均指VB Integer类型,Long类型均指VB Long类型,Word 、DWord类型则是不依赖于特定编译器的对二字节、四字节整形值的通用称呼)再来看位运算方面,可以看出VB不支持整型变量的左移、右移、拆分、合并等操作。 经过上述的分析之后,已经确定了工作的可行性和工作目标,于是笔者决定开发一个通用模块来增强VB的位操作功能,这个模块是可重用的,只要把这个模块加入工程中,就可以象使用VB的内置函数一样透明的使用模块中的函数,非常方便。如果使用大量的可重用模块来开发程序,则开发周期短,代码可读性好,易于维护,不容易出错。
二设计思路1. 实现整形变量的拆分、合并 整型变量的拆分、合并是经常要用到的操作,比如IP地址就是一个四字节的双字,有时候为了以点分十进制的方式显示IP地址,就需要单独取出每个字节的值,而有时候为了把......
