VB经验技巧(一)[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 showman 的 blog

在程序设计中,我们经常遇见这样或那样的问题,即使是“身经百战”的编程老手,对于一些过于具体、细微的问题有时也会不知所措,以下是我从外文网站上摘取的一些vb经验技巧,并对它们进行的翻译整理,希望对你会有所帮助,有疏漏之处请大家指正,谢谢!


记载windows使用的时间

有时候你需要记下每次windows开启和关闭的时间,下面这个小程序就可以完成这个功能,你可以把它放在windows开始菜单的“启动”文件夹里面,这样当你进入windows时,这个小程序就会自动启动(不可见),并在你指定的文件中写下当时的时间,在你推出windows系统时,小程序会关闭并记下离开的时间,并关闭记录文件。

private sub form_load()

left = -10000

top = -10000

open "c:\apps\log.txt" for append as #1

print #1, "on: " & cstr(now)

close #1

end sub

private sub form_unload(cancel as integer)

open "c:\apps\log.txt" for append as #1

print #1, "off:" & cstr(now)

close #1

end

end sub


怎样关闭一个正在运行的程序

 

你可以使用api函数findwindow和postmessage去寻找指定的窗口,并关闭它。下面的例子教给你怎样找到并关掉一个caption为“caluclator”的程序。

 

dim winhwnd as long

dim retval as long

winhwnd = findwindow(vbnullstring, "calculator")

debug.print winhwnd

if winhwnd <> 0 then

retval = postmessage(winhwnd, wm_close, 0&, 0&)

if retval = 0 then

msgbox "置入消息错误!"

end if

else

msgbox "calculator没有打开!"

end if

 

为了让以上的代码工作,你必须在模块文件中什么以下api函数:

 

declare function findwindow lib "user32" alias _

"findwindowa" (byval lpclassname as string, _

byval lpwindowname as string) as long

declare function postmessage lib "user32" alias _

"postmessagea" (byval hwnd as long, byval wmsg as long, _

byval wparam as long, lparam as any) as long

public const wm_close = &h10


我怎样确定我的程序是否在运行?

 

把以下代码放在第一个窗体的form_load事件中:

 

if app.previnstance = true then

call msgbox("这个程序正在运行!",_

vbexclamation)

end

end if


怎样延迟一个vb程序?

 

延迟在vb中非常有意义!举个例子,有时你需要等待一个额外的过程完成,才能运行程序下面的代码。延迟使程序摆脱了cpu的运算速度对程序运行速度的影响,但是在vb中却没有延迟这个很多语言都有的现成函数,所以还要依靠api函数,请看以下的代码:

 

declare sub sleep lib "kernel32" _

(byval dwmilliseconds as long)

 

'延迟1秒

call sleep(1000)


怎样改变双击鼠标的时间间隔?

 

在较短时间里连续的点击两次鼠标就会造成鼠标双击事件。你可以调用api函数setdoubleclicktime改变鼠标双击所需要的时间,它只有一个参数,并可精确到毫秒级。

 

declare function setdoubleclicktime _

lib "user32" alias "setdoubleclicktime" _

(byval wcount as long) as long

 

提示:这种改变将影响到整个操作系统。


怎样找到鼠标指针的xy坐标?

 

在很多的作图软件中都有一个小的区域显示当前屏幕上的光标位置,这利用api函数非常容易做到,下面的例子将演示使用代码如何返回当前光标的xy的坐标值。

 

步骤:

  1. 在vb5中建立一个新项目文件,form1使用默认设置.

  2. 选择菜单的“project/add module”,建立一个新的模块文件“moudule1”。

  3. 输入以下代码声明api函数。

    option explicit

    type pointapi ' declare types

    x as long

    y as long

    end type

    declare function getcursorpos lib "user32" _

    (lppoint as pointapi) as long ' declare api

  4. 把焦点移到form1,添加两个标签对象(label)和一个计时器对象(timer1),把计时器的interval属性设为1,然后双击form1的任何区域,在代码窗口中输入:

 

 

option explicit

dim z as pointapi ' 声明变量

 

private sub timer1_timer()

getcursorpos z ' 得到坐标

label1 = "x: " & z.x ' 得到x坐标

label2 = "y: " & z.y ' 得到y坐标

end sub

 

5、按f5运行程序,移动鼠标注意观察两个标签对象的变化。


怎样捕捉窗体的鼠标?

 

这个技巧将向您展示如何使用捕捉光标的api函数阻止鼠标指针移出窗体。

 

本文关键:vb
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top