我用ShellExecute调用了Windows的一个应用程序,请问如何获得(捕捉)此窗口中某一个控件的句柄,并将焦点聚集在上边呢(关键是这一点)?大侠们能不能给写一个例子?我知道可以根据窗体的标题来取得窗体的HWND,可是如何做呢?比如:用ShellExecute调去了“我的电脑”的窗口,其中“地址栏”的句柄是656520(每次句柄都是不同的,我是用工具查出来的),然后把让这个Combo获得焦点。我搜索了以前的帖子,并试验了一些。可是没有成功。郁闷。:)呵呵。感谢大侠的帮助!!
调试欢乐多
Dim hw As Long
hw = FindWindow(vbNullString, "我的电脑")
MsgBox hw
End Sub
我想获得其下的Combo的句柄,并且把焦点给它~如何做?
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Command1_Click()
Dim hw As Long
hw = FindWindow(vbNullString, "我的电脑")
SetForegroundWindow (hw)
SendKeys "{tab}"
SendKeys "{tab}"
SendKeys "{tab}"
SendKeys "{tab}"
End Sub先打开我的电脑,然后运行程序,然后你会看到焦点定在地址栏那里,我在win2000,vb6.0下通过
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const WM_SETFOCUS = &H7Private Sub Command1_Click()
Dim Handle As Long, topHandle As Long
Handle = FindWindow("CabinetWClass", "我的电脑") ' 只能是我的电脑,资源管理器不行
topHandle = Handle
Handle = FindWindowEx(Handle, 0&, "WorkerW", vbNullString)
Handle = FindWindowEx(Handle, 0&, "ReBarWindow32", vbNullString)
Handle = FindWindowEx(Handle, 0&, "ComboBoxEx32", vbNullString)
Handle = FindWindowEx(Handle, 0&, "ComboBox", vbNullString)
Debug.Print Handle ' 这个Handle就是我的电脑的Combo的句柄了
' 下面两句可能能用一个SendMessage代替,你查查吧,其功能是让我的电脑窗口为当前窗口
ShowWindow topHandle, 0
ShowWindow topHandle, 5SendMessage Handle, WM_SETFOCUS, 0, 0 ' 让那个Combo获得焦点
End Sub
'改进了一下,那两个ShowWindow换了一下Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Const WM_SETFOCUS = &H7Private Sub Command1_Click()
Dim Handle As Long, topHandle As Long
Handle = FindWindow("CabinetWClass", "我的电脑") ' 只能是我的电脑,资源管理器不行
topHandle = Handle
Handle = FindWindowEx(Handle, 0&, "WorkerW", vbNullString)
Handle = FindWindowEx(Handle, 0&, "ReBarWindow32", vbNullString)
Handle = FindWindowEx(Handle, 0&, "ComboBoxEx32", vbNullString)
Handle = FindWindowEx(Handle, 0&, "ComboBox", vbNullString)
Debug.Print Handle ' 这个Handle就是我的电脑的Combo的句柄了
SetForegroundWindow topHandle
SendMessage Handle, WM_SETFOCUS, 0, 0 ' 让那个Combo获得焦点
End Sub
我是标准的傻X!我太弱智了,我怎么没想出来? cnhgj(黄桂佳 → 吃软不吃硬) ,goodname008(卢培培,想学好VB) 两位仁兄(仁妹),能不能告诉我你们的QQ?我的是 87266872 。还是CSDN高人多的。向VB高手学习!
cnhgj(黄桂佳 → 吃软不吃硬) ,goodname008(卢培培,想学好VB) 两位仁兄!!!只是每人25分有些少。 因为我确实没分了。十分对不住阿!呵呵
30分:20分=goodname008(卢培培,想学好VB) :cnhgj(黄桂佳 → 吃软不吃硬)这样好了。:)
可以告诉我怎样关闭这个程序吗?
用postMessages