bokee.net

软件工程师博客

正文 更多文章

编程技巧

  1,Q:用 DEBUG 读取硬盘的主引导记录:
      A: C:\>DEBUG
          -a100
         mov ax,0201 ;02 代表“读”
         mov bx,200  ;运行结果放在内存地址 0200 处
         mov cx,1   ;
         mov dx,80    ;80 代表第一硬盘
         int 13        ;调用磁盘中断
         int 20        ;结束程序
          -g=100        ;从 100 处开始运行程序
          -d200         ;显示主引导记录
          -q  
     2,Q:用批处理给一系列文件循环改名:
      A:假设有三个文件,名为F3.EXE,F2.EXE,F1.EXE,则以下批处理可以给他们循环改名:
      AUTO.BAT:
      ren F3.EXE X
      ren F2.EXE F3.EXE
      ren F1.exe F2.exe
      ren X F1.EXE 
     3,Q:那些 Web server 支持 ASP?
      A:一般情况下,只有 Windows 下的 Web server 支持 ASP, 如高版本的 IIS、PWS4.0 等。Windows98 和 Windows98se 上随盘附带的 PWS 可以支持 ASP。 WindowsNT4.0 安装 SP4 和 OP4 后,也可以支持 ASP。Windows2000 直接支持 ASP。一些在 UNIX 下运行的 Web Server,安装特定软件后,也可以支持 ASP。  
     4,Q:为何我将这句话(“Let’s go now!”)插入到数据库中的时候会发生错误?
      A:因为大多数的数据库(Access,MS SQL Server) 都把单引号当作分割符号使用的,所以不可以直接将单引号插入到数据库中,你必须在执行SQL语句之前, 分别将每一个单引号替换成两个单引号:
      MyData=Replace(MyData," ’ "," ’’ ",1)
然后,再保存到数据库中就行了。  
     5,Q:在 ASP 中使用 ADO 的 AddNew 方法和直接使用“Insert into...”语句有何不同?那种方式更好?
      A: ADO 的 AddNew 方法只是将“Insert into ”语句封装了起来, 所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的 “翻译”时间。虽然SQL语句不如 AddNew 等语句容易接受,但是学习一些常用的 SQL 语句在进行数据库编程中是非常重要的。  
     6,Q:经常看到联接数据库有两种方式 DSN 以及 DSN-LESS,两者是什么意思? 有什么不同吗?
      A:DSN 是英文“Data Source Name”(数据源名)的缩写,DSN方式也就是采用数据源的联接方式,这个数据源可以在“控制面板”里面的“ODBC Data Sources”中进行设置,然后就这样使用: Conn.Open "DSN=Test;UID=Admin;PWD=;"其中的“Test”就是你自己设定的数据源的名称。注意,要同时使用 UID 以及 PWD,否则会出错。
      同样的,DSN-LESS 就是非数据源方式的联接方法,使用方法是:
      Conn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=\somepath\mydb.mdb;Uid=Admin;Pwd=;"
      在相同的硬件环境下,DSN-LESS 方式要比 DSN 方式的性能要高,但是一旦 ASP 源代码因为某些安全问题而被别人看到,将会泄漏数据库的账号以及密码,所以这两种方式是各有利弊的。  
     7,Q:为什么我使用“Window.open()”方法打开的新窗口的 ASP 页面中经常会出现 Session 丢失的现象?
      A:微软的 IE4.x 会经常出现这种情况,但 IE5.x 中已经纠正了这个错误。 所以,为了兼容所有的浏览器,你可以使用诸如“test.asp?name=xxx”的方式来在窗口之间传递参数,这样的效果更好, 只是要注意,如果传递的参数很重要,请不要使用明文方式进行传递,否则很容易导致安全问题。  
     8,Q:好像 Redirect 方法只可以重新定向到同一帧里面,可不可以定向到其他帧呢?
      A:可以,要加上这个:〈BASE Target="FrameName"〉。 然后,当你再使用 Redirect 方法的时候,就会重新定向到名字叫做 FrameName 的帧里面了。  
     9,Q:为什么我使用 Response.Redirect 的时候出现错误?    
      A:最常见的原因就是你在写入页面之后对 HTTP 标题进行了修改,解决的方法是在页面的开始写上
〈%Response.Buffer=True%〉  
     10,Q:最近随同 IIS5.0 一起出现的 ASP3.0 有何新的功能?
       A:其实并没有什么新的变化,但是新增加了两个 Server 对象的方法:Server.Transfer 以及 Server.Excute,还有一个新的对象 ASPError。具体的使用方法请参考微软的网站:www.microsoft.com。  
     11,Q:我有没有必要在每一个 ASP 文件中使用“Option Explicit”?
       A:你最好这样,因为这样可以使得你的程序出错机会降到最少,并且会提升整体性能将近 9.8% 。  
     12,Q:我需不需要在每个 ASP 文件的开头使用 〈%@LANGUAGE=VBScript%〉?
       A:如果你使用的脚本语言就是 VBScript 的话, 请尽量不要使用这个语句(VBScript是 ASP 的缺省脚本语言),否则程序整体性能将会下降将近 1.2%。 但是如果你使用的并不是 VBScript 语言的话,请使用这个语句。  
     13,Q:我在 ASP 脚本中写了很多的注释,这会不会影响服务器处理 ASP 文件的速度?
       A:经国外技术人员测试,带有过多注释的 ASP 文件整体性能仅仅会下降 0.1%,也就是说基本上不会影响到服务器的性能下降。  
     14,Q:为什么我的记录集的 RecordCount 值总是返回 -1 ?
       A:你应当使用这种模式来打开存取数据库的记录集:
      rec.open strSQL,conn,1,1
      其中的 strSQL 是操作数据库的 SQL 语句; conn 是联接数据库的 Connection 变量。  
     15,Q:什么是线程?
       A:线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多 CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的 CPU 上去执行。由于一个程序的各线程是在相同的地址空间运行的,因此设及到了如何共享内存, 如何进行线程通信等问题,这样便需要处理各线程之间的同步问题,这是多线程编程中的一个难点。  
  16,Q:在 VB 中用 ADO 通过 ODBC 连接 ORACLE 数据库,读取有记录的表中的数据时为何返回结果的总是 NULL?
     A:请使用微软的 ODBC for Oracle 驱动程序,在 ODBC 管理器中是 Microsoft ODBC for Oracle。不要使用 Oracle 自带的驱动程序。尽量使用新的 ODBC 驱动程序。  
  17,Q:VB 在打开窗口中,文件类型及文件名变为乱码,不知如何解释(重装后也不行)?
A:将 \windows\fonts 目录下的一个名为 mingliu.ttc 的文件删了试试。 
  18,Q:请问怎样在 VB 中设置系统热键?
     A:代码如下:
        Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
       Private Function MyHotKey(vKeyCode) As Boolean
          MyHotKey = ((GetAsyncKeyState(vKeyCode) < 0))
       End Function
     然后,建立一个 timer 控件,输入以下代码:
        Sub timer1_timer()
          If myHotKey(vbkeyX) then …  ’ 这里的 vbkeyX 是指系统热键为 X
       End Sub  
  19,Q:如何让一个窗口总是处于各窗口的最上层?
     A:代码如下:
      Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
         ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
      Const HWND_TOPMOST = -1
      Private Sub Form_Load()
        SetWindowPos Me.hwnd,HWND_TOPMOST,Me.Left/Screen.TwipsPerPixelX, _
              Me.Top\Screen.TwipsPerPixelY,Me.Width\Screen.TwipsPerPixelX, _
       Form1.Height \ Screen.TwipsPerPixelY, 0
       End Sub  
  20,Q:我想在 Delphi 程序中直接调用 Word 文档并使用 Word 的功能,这个程序该怎样编? 该用什么控件呢?
     A:
   方法一:
  1) 从 WORD.EXE 中导入 WORD 的 Type Library
  2) var wd : _Application;
   wdt : Table;
   dot1,FileName: OleVariant;
  begin
   dot1 := ’c:\abc.dot’;
   wd := coApplication_.Create;
   wd.Documents.Add(dot1, EmptyParam);
   wdt := wd.ActiveDocument.Tables.Item(1);
   wdt.Cell(1,3).Range.Text := ’Hello!’;
   //以下是保存和关闭文档及 Word, 可以不关,下面两个例程略过此步。
   //EmptyParam 用来代替不使用的参数。
   FileName := ’c:\test.doc’;
   wd.ActiveDocument.SaveAs(FileName,EmptyParam,EmptyParam,
   EmptyParam,
     EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
     EmptyParam,
     EmptyParam);
   wd.ActiveDocument.Close(EmptyParam,EmptyParam,EmptyParam);
   wd.Quit(EmptyParam,EmptyParam,EmptyParam);
  end;

  方法二:
  var
   Ole: Variant;
   NewDoc: Variant;
   DocTable: Variant;
  begin
  //方法二的参数可以直接使用 Delphi 的数据类型。其它方法只能使用 OleVariant 类型.
    Ole := CreateOleObject(’Word.Application’);
    Ole.Application.Visible := true;
    NewDoc := Ole.Documents.Add(’C:\abc.dot’);
    DocTable := NewDoc.Tables.Item(1);
    DocTable.Cell(1,3).Range.Text := ’Hello!’;
  //设置Variant对象为UnAssigned来释放该对象的引用。
    NewDoc := UnAssigned;
    DocTable := UnAssigned;
    Ole := UnAssigned;
  end;

  方法三:使用 Server 页的 TWordApplication 控件,同理,你可以用里头的所有控件。Ole 为TWordApplication控件名称。
  var
   NewDoc: Variant;
   DocTable: Variant;
  o: OleVariant;
  begin
   o := ’c:\abc.dot’;
   NewDoc := Ole.Documents.Add(o,EmptyParam);
   DocTable := NewDoc.Tables.Item(1);
   DocTable.Cell(1,3).Range.Text := ’Hello!’;
   NewDoc := UnAssigned;
   DocTable := UnAssigned;
  end;

    推荐用方法一和方法三。因为方法二不提供类型参数检查,也因为方法二的接口调用效率低。程序中所使用的属性和方法资料可以在 Office 的 VBA 帮助中查到。需要者请在安装 Office 时选择安装 VBA 编程帮助。 
  21,Q:想用 Dephi4.0 实现这样的效果:在程序启动时在主窗口中同时放置几个 Dockable 的子窗口。子窗口的大小和 Dock 的位置都可以变化,也可以拖离主窗口成为独立的窗口。(如同Visual C++6.0 集成环境的界面一样),请问怎么实现?
       A:在 Delphi5.0 的 Borland\Delphi5\Demos\Docking 文件夹下有完整的示例程序,请参看例程 
   22,Q:我的 VB6 总把全角符号和半角符号一样对待,而且它对字符串的长度也辨不清如len("中华人民共和国")的返回值为 7。而其 FileLen() 的返回值却又似乎正常,等于文件的长度(Bit),请问到底得如何解决?
     A: VB4.0 以后,string 类型以 UNICODE 存放,以 ANSI 形式写入文件。所以,len 和 FileLen 结果不同。len 返回字数,每个中、英文均为 1;lenb 返回字节数,每个中、英文均为 2。
   如果需要返回 ANSI 的字节数,可用如下函数:
      Public Function LenANSI(strU as string) as long
        LenANSI = LenB(StrConv(strU, vbFromUnicode))
      End function  
  23,Q:能否在 VB 中作 DLL 文件?
     A:VB 不能制作 Win32 DLL 文件,但它可创建 ActiveX DLL。 
  24,Q:如何在不使用 Windows 的打印对话框或打印设置框的情况下,在 VB 程序中设定打印机的自定义纸张尺寸?
     A:可设置 Printer 对象的 Width 和 Height 属性。对于同一种打印机,Windows9X 往往可以成功设置自定义纸张大小,而 NT 不能。这主要取决于打印机驱动程序。另外,即使驱动程序接受这些设置,它也会根据情况作些微调。 
  25,Q:在 VB 中如何控制计算结果的整数位和小数位?
     A:可用 Format 函数,或 VB 新增的 FormatNumber(可本地化)等函数。 
  26,Q:在 VB6.0 中如何区分汉字和半角西文字符?
     A:用 LenB(StrConv(str, vbFromUnicode)),结果为 1 是半角,为 2 是全角。另外一个 undocumented 的方法是,ASC(str),结果>0是半角,<0是全角。 
 27,Q:微软VISUAL J++ 和 JAVA 有什么不同?
     A:微软已经放弃了java,他发布了一个新产品叫 C# 与 sun 的 java 竞争。C# 与 C++ 类似却很容易开发COM/DCOM 程序,但目前北美没有人用 C#。而 sun 的 java 却很热,年薪在 6 万元以上。 
  28,Q:如何在 VB 中调用资源文件中的资源,如图片、光标等?
     A:可用 LoadResPicture(index,format) 来调用。其中“index”是必需的,它是一个整数或字符串,用来指定资源文件中数据的标识符 (ID) ,“format”是必需的一个数值或常数,指定返回数据的格式,返回一个 Picture 对象,例如位图、图标或光标。
   例如:Picture1.Picture=LoadResPicture(100, vbResBitmap),常量有vbResBitmap ,vbResCursor, vbResIcon 等。*.res 文件可以用 VC++ 来产生和编辑,在 VB 中调用。 
  29,Q:是否运行用 Delphi 开发的数据库应用程序时,一定要装 BDE? 能否可以将其包含在应用程序中,使不安装 BDE,就可运行?
     A:不可以。BDE 是 Delphi 和 Inprise 公司其他一些产品的数据引擎!有它才可以和 ODBC 相连接。 
  30,Q:请问怎么样将用VFP5.0编写的小软件编绎成可以脱离VFP而独立运行的软件?
     A:将 VFP5.0 的的两个支持文件放置在与可执行文件相同的目录中,或者在 MS-DOS 搜索路径中,即可独立运行。 
  31,Q: 如何在 VC++6.0 中使用 MSComm 控件与单片机通讯? 要求是 PC 机发一个字节的命令,单片机返回相应的1--3字节数据。
     A:首先将端口串行化:
   commh = CreateFile(tmpstr, GENERIC_READ,GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
   然后设 DCB。读使用 ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader); 写使用 WriteFile(hComm, lpBuf, dwToWrite, &dwWritten, &osWrite);
   也可以使用 _inp, _outp 来直接写串口的端口。 
  32,Q:在 VB 网格中输入数据:
     A:VISUAL BASIC 提供的网格控制(Grid)主要是用来直观地输出数据,但不能输入数据,使用起来很不方便。能不能向网格中输入数据呢?这里提供一种解决方法,供大家参考:
    利用一文本框作为缓冲,实现编辑功能。当网格改变行列时,把网格当前行列的内容传递给文本框;当网格中有 ASCII 字符产生时,把输入焦点设置为文本框,并把输入的 ASCII 字符送给文本框;当编辑完文本框的内容时,按 Enter 键或 TAB 键,把文本框的内容送给网格的当前行列,并把输入焦点设置为网格。
    如下程序所示(其中 Textl 为文本框,Labell 为标签,Gridl 为网格):
    Option Explicit
    Const EnterAsc=13
    Const TabAsc=9
 
    Private Sub Form_Load()
     Labell.Caption=”请输入”
    End Sub

    Private Sub Gridl_KeyPress(KeyAscii As Integer)
     Text1.StFocus
     Textl.SelStart=0
     If KeyAscii <> EnterAsc And KeyAscii <> TabAsc Then
      SendKeys Chr(KeyAscii)
     End IF
    End Sub

    Private Sub Gridl_RowColChange()
     Textl.Text=Grid1.Text
    End Sub

    Private Sub Text1_KeyPress(KeyAscii As Integer)
     If KeyAscii=EnterAsc Then
      Grid1.SetFocus
      KeyAscii=0
     End If
    End Sub

    Private Sub Text1_LostFocus()
     Grid1.Text=Text1.Text
    End Sub 
  33,Q:启动“控制面板”中的设置程序:
     A:
’控制面板 Control Panel ( CONTROL.EXE )
’----------------------------------------
’Control Panel:
’ rundll32.exe shell32.dll,Control_RunDLL

’辅助选项 Accessability Options ( ACCESS.CPL )
’-----------------------------------------------
’Accessability Properties (Keyboard):
’ rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
’Accessability Properties (Sound):
’ rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
’Accessability Properties (Display):
’ rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
’Accessability Properties (Mouse):
’ rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
’Accessability Properties (General):
’ rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5

’添加/删除程序 Add/Delete Programs ( APPWIZ.CPL )
’--------------------------------------------------
’Add/Remove Programs Properties (Install/Uninstall):
’ rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
’Add/Remove Programs Properties (Windows Setup):
’ rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
’Add/Remove Programs Properties (Startup Disk):
’ rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3

’显示设置 Display Options ( DESK.CPL )
’----------------------------------------
’Display Properties (Background):
’ rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
’Display Properties (Screen Saver):
’ rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
’Display Properties (Appearance):
’ rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
’Display Properties (Settings):
’ rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3

’区域设置 Regional Settings ( INTL.CPL )
’-------------------------------------------
’Regional Settings Properties (Regional Settings):
’ rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
’Regional Settings Properties (Number):
’ rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
’Regional Settings Properties (Currency):
’ rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
’Regional Settings Properties (Time):
’ rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
’Regional Settings Properties (Date):
’ rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4

’Joystick Options ( JOY.CPL )
’-------------------------------
’游戏控制器 Joystick Properties (Joystick):
’ rundll32.exe shell32.dll,Control_RunDLL joy.cpl

’鼠标、键盘 Mouse/Keyboard/Printers/Fonts Options ( MAIN.CPL )
’----------------------------------------------------------------
’Mouse Properties:
’ rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
’Keyboard Properties:
’ rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
’Printers:
’ rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
’Fonts:
’ rundll32.exe shell32.dll,Control_RunDLL main.cpl @3

’邮件和传真 Mail and Fax Options ( MLCFG32.CPL )
’--------------------------------------------------
’Microsoft Exchange Profiles (General):
’ rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl

’多媒体 Multimedia/Sounds Options ( MMSYS.CPL )
’-------------------------------------------------
’Multimedia Properties (Audio):
’ rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
’Multimedia Properties (Viedo):
’ rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
’Multimedia Properties (MIDI):
’ rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
’Multimedia Properties (CD Music):
’ rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
’Multimedia Properties (Advanced):
’ rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4

’声音属性 Sounds Properties:
’ rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1

’安装调制解调器 Modem Options ( MODEM.CPL )
’----------------------------------------------
’Modem Properties (General):
’ rundll32.exe shell32.dll,Control_RunDLL modem.cpl

’网络设置 Network Option ( NETCPL.CPL )
’-----------------------------------------
’Network (Configuration):
’ rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl

’口令设置 Password Option ( PASSWORD.CPL )
’---------------------------------------------
’Password Properties (Change Passwords):
’ rundll32.exe shell32.dll,Control_RunDLL password.cpl

’系统/添加新硬件设置 System/Add new Hardware ( SYSDM.CPL )
’------------------------------------------------------------
’System Properties (General):
’ rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
’System Properties (Device Manager):
’ rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
’System Properties (Hardware Profiles):
’ rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
’System Properties (Performance):
’ rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
’ = = = = = = = = = = = = = = = = = = = = = = = = = = =
’Add New Hardware Wizard:
’ rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1

’日期和时间设置 Date and Time Options ( TIMEDATE.CPL )
’---------------------------------------------------------
’Date/Time Properties:
’ rundll32.exe shell32.dll,Control_RunDLL timedate.cpl

’微软邮局设置 Microsoft Mail Postoffice Options ( WGPOCPL.CPL )
’-------------------------------------------------------------------
’Microsoft Workgroup Postoffice Admin:
’ rundll32.exe shell32.dll,Control_RunDLL wgpocpl.cpl 
  34,Q:交换鼠标左、右键:
    A:拉两个 Command 按钮,键入以下代码可也:
Option Explicit
Private Declare Function SwapMouseButton Lib "user32" (ByVal bSwap As Long) As Long
Private Sub Command1_Click()
SwapMouseButton False ’左手
End Sub
Private Sub Command2_Click()
SwapMouseButton True ’右手
End Sub 
  35,Q:程序控制光驱(开)关:
    A:在工程中添加“Microsoft multimedia Control6.0”控件,再在窗体上加入该 MMControl 控件和 Command 控件,再键入以下代码(据说是可以开和关,但我没放光盘测试时只能关闭光驱):
Private Sub Command1_Click()
With MMControl1
.DeviceType = "CDAudio"
.Command = "Open"
.Command = "Play"
.Command = "Eject"
.Command = "Close"
End With
End Sub
Private Sub Form_Initialize()
MMControl1.Visible = False
End Sub
另外,有人介绍以下调用 API 的方法开、关光驱,我的机器上也不能实现,大家可以研究一下:
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Dim retval As Long, retstr As String
Private Sub Command1_Click()
retval = mciSendString("Set CDAudio door open", retstr, 127, 0) ’开
End Sub
Private Sub Command2_Click()
retval = mciSendString("Set CDAudio door closed", retstr, 127, 0) ’关
End Sub 
  36,Q:用程序遥控计算器 - VB 的 SendKeys 语句范例:
    A:本示例使用 Shell 函数来运行 Microsoft Windows 所附的计算器程序;然后使用 SendKeys 语句来按下计算器的某些数字键,最后退出计算器。(若要观察示例运行过程,可将示例粘贴到过程中,再运行过程即可。因为 AppActivate 会将焦点转移到计算器应用程序,故本示例不能以单步方式来运行。)

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ’ 运行计算器。
AppActivate ReturnValue ’ 激活计算器。
For I = 1 To 100 ’ 设置计数循环。
SendKeys I & "{+}", True ’ 按下按键给计算器
Next I’ 将所有 I 值相加。
SendKeys "=", True ’ 取得总和
SendKeys "%{F4}", True ’ 按 ALT+F4 关闭计算器。 
  37,Q:ASP 编程中参数传递的几种方法:
    A:
   (1)、<form action=do.asp method=post>
         <input name=var1>
         <input type=submit>
        </form>
    在 do.asp 中用 request.form("var1") 取参数的值;
   (2)、在 <form></form> 中 action=do.asp?var=参数值,或 <a href=do.asp=do.asp?var=参数值></a>
    然后在 do.asp 中用 request.querystring("var") 取参数的值(这是一种明文传递方式);
   (3)、使用 Cookies。设置 <%response.cookies("var")="参数值"%>,取值 <%=request.cookies("var")%>;
   (4)、用 session 变量传递参数。设置<%Session("var")="参数值"%>,取值 <%=Session("var")%>
    (注意:一旦使用了<% %> 的 ASP“标志”符号,该语句就必须保存在 ASP 文件中。) 
  38,Q:一次性清空本窗口内所有文本框(TextBox):
    A:
     Dim txt As Control
     For Each txt In Me.Controls
      If TypeOf txt Is TextBox Then
       txt.Text = ""
      End If
     Next txt
    (想一下:如果窗口中有几十个文本框,用传统的编程法要写多少行代码?体会一下面向对象编程的巨大威力吧!) 
  39,Q:怎样在 VB 程序中播放 Flash 动画?
     A:要用到一个播放 Flash 动画的控件 Shockwave Flash。该控件在 Flash4 安装盘的 Plugins 目录下,安装文件是 InstallAXFlash.exe,安装后在 VB 部件中选定即可使用。该控件的主要属性和方法如下:
   属性:Movie 动画文件
         Playing True/False 是否自动播放
         Loop True/False 是否循环播放
   方法:Play 播放
         Stop 停止
         Forward 快进
         Back 快退
         Rewind 回放
         GotoFrame(n) 绕到指定的帧播放
         SetZoomRect(left,top,right,bottom) 设置放大时的位置 
  40,Q:怎样在 VB 程序中实现图象扫描功能?
     A:同样要借用第三方提供的函数。在网站 http://www.twain.org/www/toolkit.html 可下载到 eztw32.dll 动态连接库文件,把它拷贝到 Windows 的 system 文件夹下就可以在 VB 中调用了。
 
  41,Q:在 VB 编程中检测声卡是否存在?
     A:
     Option Explicit
     Private Declare Function auxGetNumDevs Lib "winmm.dll" () As Long
     Private Sub Form_Load()
      Dim i As Integer
      i = auxGetNumDevs()
      If i > 0 Then ’There is at least one sound card on the system
       MsgBox "A Sound Card has been detected."
      Else ’auxGetNumDevs returns a 0 if there is no sound card
       MsgBox "There is no Sound Card on this system."
      End If
     End Sub 
  42,Q:在 VB 中终止 Windows95 的运行:
     A:在Visual Basic 程序中,可以使用 Windows API 的 ExitWindowsEx 函数来从程序中重新启动计算机系 统。 要使用该函数,需要将如下声明语句包含在窗体的通常声明部分中:
   Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
   ExitWindowsEx 函数需要 2 个参数,可以使用一个或多个下面的标识的组合来告诉 ExitWindowsEx 函 数希望进行哪种关机过程。
   EWX_FORCE 所有进程都被强制终止
   EWX_LOGOFF 所有的进程被强制止,并且用户退出登录(logged off)
   EWX_POWEROFF 计算机系统被关机,并且如果支持节电特性则计算机被物理关机
   EWX_REBOOT 计算机系统被关机并重新启动
   EWX_SHUTDOWN 计算机被物理地安全地关机
   下面的样例程序中使用了上面的三个标识的组合。该标识组合(EWX_LOGOFF,EWX_FORCE,以及EWX_REBOOT) 告诉 Windows 退出所有正在执行的进程,使用户退出网络登录,使计算机系统处于准备状态以供 用户关机。
样例程序的使用:
    1,在 VB 中开始一个新的项目,采用缺省的方法建立 Form1;
    2,将如下常量和声明语句添加到 Form1 的通常声明部分中(注意该声明语句需要书写在一行内):
     Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
     Const EWX_LOGOFF = 0
     Const EWX_SHUTDOWN = 1
     Const EWX_REBOOT = 2
     Const EWX_FORCE = 4
     Const EWX_POWEROFF = 8
     Const EWX_RESET = EWX_LOGOFF + EWX_FORCE + EWX_REBOOT
    3,在 Form1 上添加一个命令按钮控件,采用缺省的方法建立 Comand1, 将它的 Caption 属性设置为“ 重 新启动计算机”;
    4,将如下代码添加到 Command1 的单击事件中:
     Private Sub Command1_Click()
      Dim X As Long
      X = ExitWindowsEx(EWX_RESET, dwReserved)
     End Sub
    按下 F5 来运行上述样例程序,单击命令按钮,即可重新启动计算机系统。  
  43,Q:给一大段 VB 程序一次性加上注释符号:
     A:VB 注释程序代码的符号是 ’,只要在某行程序前面加上该符号就可以注释该行程序。但如果程序代码语句很多的时候,一行一行地注释就非常不方便。其实 VB 本身提供了一次性注释多条语句的功能:在主菜单“视图”选项的“工具栏”下,选中“编辑”,VB 的界面会出现一排工具按钮,其中就有用于“设置注释块”和“解除注释块”功能的按钮。选中一块语句,按该按钮即可。 
  44,Q:VB 中在一个窗体中执行另一个窗体中的代码:
     A:可以用“窗体.代码”的模式去执行别的窗体的代码。假设要在窗体 frm1 里执行窗体 frm2 的Form_Click 代码,程序如下:
     Private Sub Form_Click()
       frm2.Form_Click() ’在frm1 里执行 frm2 的 From_Click 代码
     End Sub  
  45,Q:Visual Basic 5.0 支持类吗?
     A:支持。您可以在 Visual Basic 5.0/6.0 的内部创建自己的类。具体说,您可以为各种类型的应用程序创建标准的基础类库,以便为具体类型的程序提供特定的功能,然后将这些类编译进您的应用程序中。这样做可以节省大量您在某一应用程序中重新编写一系列标准功能所需花费的时间。 
  46,Q:在 VB 5.0 中文版中,表单上最多允许有多少个控件?
     A: Visual Basic 5.0 允许在表单上最多可以有 255 个控件。 
  47,Q:Visual Basic 能用来创建在 Windows CE 环境下运行的应用程序吗?
     A:不能。目前情况下,您必须使用 Visual C++ 或其他与 Windows 95 兼容的 C/C++ 编译工具。 
  48,Q:Visual Basic5.0/6.0 能用来创建 Windows NT 服务吗?
     A:不能。Windows NT 中的服务必须是完全用机器代码编译的可执行文件。Visual Basic 目前不具备这一功能。您必须使用 Visual C++ 4.x 或其他与 Windows NT 兼容的 C/C++ 编译工具来创建服务。有关编写 Windows NT 服务的信息,请参阅微软 MSDN 的有关内容。 
  49,Q:Microsoft Visual Basic 5 除了支持本机编译的代码外,还支持 p 代码吗?
     A:支持。VB5.0 是第一个在将应用程序编译成 p 代码或本机代码方面提供了灵活操作可能性的 RAD 工具。编译成 p 代码可使应用程序的大小优化为最小。p 代码凭借这一最小化特性成为了低带宽条件下创建 Internet 应用程序的首选方式。本机代码编译极大地提高了速度(最高快 20 倍),但生成的可执行文件较大。 Visual Basic 是唯一既能够支持 RAD 的解释方式、编辑与连续、以及开发等,又能够支持从本机编译的 .EXE 文件的 RAD 工具。 
  50,Q:Microsoft Visual Basic 可以在 Macintosh 上使用吗?
     A:VB4.0 引入了可移植的 VBA (Visual Basic for Applications)语言引擎。Microsoft Excel 5.0 最近已在 Macintosh 上发行,其中随附了 Excel 的 VBA 组件,因此在它上面就有这个语言引擎。微软目前似乎对 Macintosh 上的 Visual Basic 版没有任何承诺。 
  51,Q:Visual Basic 5.0/6.0 支持 16 位开发吗?
     A:不支持。Visual Basic 5.0/6.0 只能创建 32 位可执行文件。开发 16 位 Windows 应用程序需要 Visual Basic 4.0。 
  52,Q:Visual Basic 5.0 中文版内的 Text Box 能存储 64K 以上的数据吗?
     A:不能。VB5.0 中文版没有突破文本框的 64K 限制,因为它是由操作系统指定的。如果您需要存储 64K 以上的数据,应使用 Visual Basic 内含的多信息文本框。多信息文本框类似于多行文本控件,不同的是增加了个别字符和段落的格式编排功能。多信息文本框能够保存 64K 以上的文本,提供内置的 OLE 2.0 客户支持,主要特性包括:使一个段落内的文本左、右、居中对齐,可定义左制表位、字体样式、简单的项目符号、查找/替换、上标、下标、加删除线等格式编排。 
  53,Q:在 ASP 编程中统计查询结果的记录数:
     A:
     <%
      Set theConn=Sever.CreateObject("ADODB.Connection")
      Set theRs=Sever.CreateObject("ADODB.RecordSet")
      theConn.Open "FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn"
      theRs.Open "SELECT COUNT(*) as Mycount FROM theTable",theConn
     %>
     共有<% =theRs("MyCount")%>条记录
     <%
      theRs.Close
      theConn.Close
     %> 
  54,Q:为何无法编译成 dll 文件?
     A:无论是用 VB 还是 VJ++,在编译 Active dll 文件时都会发现无法重新编译成 dll 文件的问题。原因是第一次编译后 dll 文件已经被自动注册了。这时关闭 Web server 后即可再次编译,待编译完毕后再打开 Web server。 
  55,Q:资源文件有什么用处?
     A:最重要的有两个地方:
     1、国际发行:如果我们将 Application 中所有的文字从 Resource 中读取,那么,只要更动 Resource 文件的内容,就可以用不同语言的方式来显示;
     2、管理资源:例如,我们的软件中用了数百张的图片或声音,不用 Resource 文档的话,在发行出去的软件中,就必需有数百个图形、声音文档,那似乎不太好,使用 Resource 文件,便可以将这些图形、声音放进一个 .Res 文档中。 
  56,Q:如何在 DOS 程序结束执行时,自动将其关闭?
     A:在 VB 程序中启动 DOS 程序(或指令)的方法是:
       Shell "DOS可执行文件名", vbNormalFocus
    例如:Shell "Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus
    但是当以上的 Xcopy 程序结束执行时, 却会残留着 DOS 窗口没有被关闭,如果想要让 DOS 程序结束执行时, DOS 窗口自动被关闭, 则应该使用以下方法来启动 DOS 程序:
     Shell "Command.com /C DOS可执行文件名", vbNormalFocus
    例如:Shell "Command.com /C Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus 
  57,Q:VB 编程中打开默认网址和 Email 的更简单的方法:
     A:打开网址:Call Shell("start http://www.alchemydev.com", vbHide)
       打开 Email:Call Shell("start mailto:admin@alchemydev.com", vbHide) 
  58,Q:我用 VB6.0 的 ActiveX dll 工程开发了一个在 ASP 中调用的 dll 类型库,里面有好多封装的函数,我能不能在 VB 的 EXE 工程中利用它们?
     A:当然可以! 这正是微软 COM 模型的具体应用之一。具体用法是:在 VB 的 EXE 工程的 IDE 界面中,引用你建立的类库文件,然后在“对象浏览器”里就可以看到你的所有类及其函数。比方你的类 myobj 中有函数 myfun(),则调用语句是:
      dim theobj as new myobj
      ret = theobj.myfun() ’ret 为函数返回值
    当然如果你要在别的机器上使用你的组件,就必须先进行注册:regsvr32 <你的组件名> 
  59,Q:“我爱你”病毒传播的秘密:
     A:千禧年五月分大面积流行的 "ILOVEYOU" 病毒至今让人记忆尤新。这种病毒是一种通过电子邮件流行的典型的蠕虫病毒。她是通过调用 Outlook 的应用程序对象的属性和方法进行信件发送的,其发送邮件的基本代码如下:
      Set OlApp = CreateObject("outlook.application")
      Set Oitem = OlApp.CreateItem(olMailItem)
      With Oitem
      .Subject = "邮件主题"
      .To = "收件人"
      .Body = "邮件正文"
      .attachments.Add "path:附件"      ’  添加附件
      .Send ’ 发送邮件
      End With 
  60,Q:在 PowerBuilder 中使用 RichTextEdit 控件,属性中没用 Font,我想设置字体怎么办(如果不设字体,读入一个文本文件,缺省的字体对不齐)?
     A:RichTextEdit 没有 Font 属性,在 Document 属性页中选择 Toolbar,使用的时候可以自行选择字体。 
  61,Q:在一个 PowerBuilder 程序中,我想用 RichTextEdit 控件从本地取文本文件显示,可是在我的机器上 RTE 只能显示出少量英文和乱码,程序并没有编错,因为相同的程序在其他人的机器上显示出的是正确的文本,不知是什么原因?
     A:应该是默认的类型不正确,导入的时候指定类型为 FileTypeText 试试。 
  62,Q:如何在 PowerBuilder 的 BLOB 字段中写入大于 1M 的文件(数据库为MSSQL 7.0)?
     A:源文件分块写。 
  63,Q:用程序控制电脑说英语?
     A:现在,应用 Microsoft 提供的一套文字朗读引擎(Text-To-Speech Engine,简称 TTS),可以在程序中编写代码来使安装了声卡的电脑流畅的朗读英文。如果安装了“金山词霸2000”,那么 Windows 文件夹下会有一个 Speech 文件夹,里面的文件 vtxtauto.tlb 文件就包含了有关的类型库和函数,我们完全可以在我们的程序中调用它们,使电脑开口说话。TTS 包含在“金山词霸2000”的安装盘上,文件名为 mstts.exe 和 spchapi.exe。要在 VB 程序中调用 TTS,必须首先引用 vtxtauto.tlb 文件中的“VoiceText 1.0 Type Library”类型库,然后参考以下代码,电脑就可以说话了:
      Option Explicit
      Private Sub Form_Load()
      Call VTxtAuto.VTxtAuto.Register(Space(1), Space(1))
      VTxtAuto.VTxtAuto.Speed = 170 ’设置语速(170 为正常语速,值越小语速越慢)
      Dim strTxt
      strTxt = "I love you very much.Do you love me? "
      On Error GoTo ErrorHandler
      Call VTxtAuto.VTxtAuto.Speak(strTxt, vtxtsp_VERYHIGH + vtxtst_READING)
      MsgBox "OK!"
      End
      ErrorHandler:
      ’ 错误处理语句
      End
      End Sub
     至于语速、频率等的控制,大家可以在“对象浏览器”里参看相关的控制属性。
    (站长话题:什么时候能够让电脑说一口流利的中国普通话甚至是方言呢?
               但愿不会让我们等待太久!
               但愿生产厂家能够像微软一样把技术公布给普通用户!) 
  64,Q:怎样判断、防止程序重复执行?
     A:
    Private Sub Form_load()
    ’判断程序是否已经运行
    If App.PrevInstance Then
     MsgBox "本程序已经运行!", vbInformation Or vbOKOnly, "提示信息"
     Unload Me
     Exit Sub
    End If
    ’以下是主要程序
    ’ ……
    End Sub

    附:另一个例子:
    Option Explicit
    Public Sub CheckExist(fm As Form) ’防止程序重复执行
      Dim title As String
      If App.PrevInstance Then
      title = App.title
      Call MsgBox("这程序已执行", vbCritical)
      App.title = "" ’如此才不会 Avtivate 到自己
      fm.Caption = ""
      AppActivate title ’activate 先前就已运行的程序
      End ’ 结束
      End If
    End Sub
    Private Sub Form_Load()
     Call CheckExist(Me)
    End Sub 
  65,Q:如何结束 Shell 所启动的程序?
     A:如果被 Shell 所启动的程序还没有结束,我们就想主动结束它,该怎么做呢? 此时应调用的 Windows API 是 TerminateProcess, 细节如下:
    1. API 的声明:
     Const SYNCHRONIZE = &H100000
     Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
     Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
     Private Declare Function TerminateProcess Lib "kernel32" A 

上一篇:internet大全

下一篇:网页大全

评论 (74条) 发表评论

  • 橙子
    橙子 : 好历害

    2009-05-03 09:22

  • 杨金花
    杨金花 : 好!

    2008-04-30 10:28

  • 钟芙琴
    钟芙琴 : 好呀,学习了!

    2008-04-28 14:52

  • 孙娥
    孙娥 : 不错呀!

    2008-04-27 17:01

  • ding_0503 (游客) : dig

    2008-01-26 12:59

  • ding_0503 (游客) : ding

    2008-01-26 12:56

  • ding_0503 (游客) : ding

    2008-01-26 12:53

  • ding_0503 (游客) : ding

    2008-01-26 12:53

  • ding_0503 (游客) : ding

    2008-01-26 12:53

  • ding_0503 (游客) : ding

    2008-01-26 12:53

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

  • ding_0503 (游客) : ding

    2008-01-26 12:52

发表评论
登录名 密码 注册
验证码
无觅相关文章插件,快速提升流量