VB_API调用,实现获取窗口信息

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB编程:浅谈API的应用——实现获取目标窗口的信息

1.第一部分

废话不说,先把几个用到的API声明源码发出来,我是在“模块”里声明的

Option Explicit

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 '窗口置顶

Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long '捕获鼠标所在窗口信息

Declare Function ReleaseCapture Lib "user32" () As Long ' 与setcapture对应

Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long '返回鼠标所在窗口的句柄

Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long '坐标转化

Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long '获取指定窗口类名

Public Type POINTAPI

X As Long

Y As Long

End Type

大家看到了,这里我用到了6个API,每个API声明的后面我都把它的功能注释出来了。

2.第二部分

下面是实现获取窗口信息源码,我是写在“窗体”源码里的

Dim TuBiaoFlag As Boolean

Dim ShuBiao As POINTAPI

Private Sub Check1_Click()

ZhiDing (Check1.Value)

End Sub

Private Sub Form_Load()

Picture1.Picture = LoadPicture(App.Path & "\pass.ico")

TuBiaoFlag = 0

Private Sub ZhiDing(ByVal ZhiDingCanShu As Boolean)

If ZhiDingCanShu = True Then

FanHuiZhi = SetWindowPos(Form1.hwnd, -1, 0, 0, 0, 0, 3)

Else

FanHuiZhi = SetWindowPos(Form1.hwnd, -2, 0, 0, 0, 0, 3)

End If

End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

TuBiaoFlag = True

Screen.MouseIcon = Picture1.Picture

Screen.MousePointer = vbCustom

SetCapture (Form1.hwnd)

End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) TuBiaoFlag = False

Screen.MousePointer = vbDefault

ReleaseCapture

End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If TuBiaoFlag = True Then

Dim ShuBiaoJuBing As Long

Dim FanHuiZiFuChuan As String

Dim FanHuiZiFuChuanChangDu As Long

Dim FanHuiZhi1, FanHuiZhi2 As Long

ShuBiao.X = X

ShuBiao.Y = Y

FanHuiZhi1 = ClientToScreen(Form1.hwnd, ShuBiao)

Text1 = Str(ShuBiao.X) & "," & Str(ShuBiao.Y)

ShuBiaoJuBing = WindowFromPoint(ShuBiao.X, ShuBiao.Y)

Text3 = Str(ShuBiaoJuBing)

FanHuiZiFuChuan = Space(235)

FanHuiZiFuChuanChangDu = Len(FanHuiZiFuChuan)

FanHuiZhi2 = GetClassName(ShuBiaoJuBing, FanHuiZiFuChuan, FanHuiZiFuChuanChangDu)

Text2 = FanHuiZiFuChuan

End If

End Sub

3。第三部分

1 窗体:1个checkbox控件1个picturebox控件3个label控件3个textbox控件

2工程信息上面的第一部分是模块Module1里的代码,第二部分是在Form1里的代码

4第四部分

最后要特别说明的一点就是,Form1的ScaleMode属性,VB6.0默认的是1_Twip,我们要选择3_Pixel.

相关文档
最新文档