扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这个不容易做到啊
目前创新互联公司已为超过千家的企业提供了网站建设、域名、网站空间、网站改版维护、企业网站设计、莲湖网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
首先要看外部程序是什么编的,大致有以下几种情况:
1. 标签有句柄,是由 SetWindowText 实现的(其实从底层一点看,还是发送了 WM_SETTEXT 消息),
例如VC、Masm 32 的程序。这种情况好解决,GetWindowText 或 发送WM_GETTEXT消息就OK了;
2. TextOut 画上去的(例如 VB 就是这样的)。这种情况要 hook TextOut;
GetWindowText()或SendMessage()都无法取得vb程序的label的文字,因为vb的label没有handle, 但大家发现 KingSoft CIBA 可以取得vb的label值,这是因为 KingSoft CIBA 拦下了Win32API中的textOut函数
参考资料:
可以的,需要判断控件类型并做一下类型转换。
For Each c As Control In Me.Controls
If TypeOf(c) Is TextBox Then
Dim t As TextBox = CType(c ,TextBox)
'调用t的方法即可
End If
Next
非常简单.
先用 GetForegroundWindow 来获取当前活动窗口的句柄,然后用 GetWindowText 来获得这个句柄的标题..就可以了,
我给你写了个代码 你运行看下就明白了..
在窗体上创建一个timer控件(用来随时检测活动窗口的标题),然后复制下面的代码 运行 就看到了...哥们,最好追加点分哦~~ o(∩_∩)o...~~
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Sub Form_Load()
Timer1.Interval = 500
Timer1.Enabled = True
Me.Width = Screen.Width / 2
End Sub
Private Sub Timer1_Timer()
Dim hd As Long, tt As String
tt = Space(255)
hd = GetForegroundWindow
GetWindowText hd, tt, 256
Cls
Print "活动窗口标题是 " tt
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim TheTypes As Type() = myAssembly.GetTypes()
Dim myType As Type
For Each myType In TheTypes
If myType.BaseType.ToString = "System.Windows.Forms.Form" Then
ListBox1.Items.Add(myType.Name)
End If
Next
End Sub
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流