visual Basic6.0 语言编程中,如何获取当前活动窗口的焦点控件句柄

visual Basic6.0 语言编程中,如何获取当前活动窗口的焦点控件句柄,第1张

我当初也做过这个,好像是6年前的事了,记不太清楚了,好像如果便利目标IE的子窗口是找不到input类名也抓不到句柄的,不过我真的记不清了。但下拉框是绝对能找到的。

而且我刚用Spy++试了一下,也没抓到!

好久不玩VB+API了,

如果你就是想学习一下API,那么下面这个是我刚从我Blog里翻出来的

禁用Windows的开始按钮

'

' Paste this into a Code Mode (BAS)

'

Option Explicit

'

private Declare Function FindWindowEx Lib "user32" _

Alias "FindWindowExA" (byval hWnd1 as Long, byval hWnd2 as Long, _

byval lpsz1 as string, byval lpsz2 as string) as Long

'

private Declare Function EnableWindow Lib "user32" (byval hwnd as Long, _

byval fEnable as Long) as Long

public Sub EnableStartMenuButton(byval bEnable as Boolean)

'

' Don't forget to re-enable it !

'

Dim lHwnd as Long

'

lHwnd = FindWindowEx(0&, 0&, "Shell_TrayWnd", vbNullString)

lHwnd = FindWindowEx(lHwnd, 0&, "Button", vbNullString)

Call EnableWindow(lHwnd, bEnable)

'

End Sub

你拿去看看,有点帮助!

Dim a

Private Sub DataCombo1_Change(Index As Integer)

If DataCombo1(a)Text <> "" Then

Command1Enabled = True

Else

Command1Enabled = False

End If

End Sub

Private Sub Form_Activate()

For j = 0 To 3

If DataCombo1(j)Text = "" Then

a = j

DataCombo1(j)SetFocus

Command1Enabled = False

Exit For

Else

End If

Next j

End Sub

Private Sub Form_Load()

For i = 1 To 3

Load DataCombo1(i)

DataCombo1(i)Top = DataCombo1(i)Top + 500 i

DataCombo1(i)Visible = True

Next i

DataCombo1(2)Text = ""

End Sub

控件的句柄 和 获得焦点控件的句柄 比较

如何得到那个控件获得了焦点? API 函数GetFocus()返回 得到焦点的控件的局部

如何得到 已知控件ID的某个控件的句柄

先用CWND类的GetDlgItem方法 得到 该控件的 CWnd 指针

然后调用CWnd类的GetSafeHwnd方法得到 该控件的句柄

if(GetDlgItem(控件ID)->GetSafeHwnd() == ::GetFocus())

甚至可以直接比较指针 不用比较句柄 用CWnd类的GetFocus方法返回 得到焦点的控件的 CWnd 指针 (不需要GetSafeHwnd了)

举例

mfc对话框工程 添加 wm_close、wm_timer消息 响应函数

oninitdialog中添加 定时器SetTimer(1, 1000, NULL);

onclose中KillTimer(1);删掉定时器

添加两个edit控件

ontimer函数中

void CMfcdlgDlg::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

//if(GetDlgItem(IDC_EDIT2)->GetSafeHwnd() == ::GetFocus())

if(GetDlgItem(IDC_EDIT2) == GetFocus())

{

MessageBox("edit2 get focus");

}

CDialog::OnTimer(nIDEvent);

}

程序 每隔1秒检测一下焦点在不在 edit2上 如果在 就messagebox输出 信息

以上就是关于visual Basic6.0 语言编程中,如何获取当前活动窗口的焦点控件句柄全部的内容,包括:visual Basic6.0 语言编程中,如何获取当前活动窗口的焦点控件句柄、vb控件获得焦点、mfc对话框程序如何判断控件是否获得焦点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10054447.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存