
Может кто-нибудь знает или слышал про эту функцию (или вообще достаточно просто и без нее обойтись)???
Sebas писал(а):Какая конечная цель?
'Функция для поиска окна первого уровня
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Функция для поиска дочернего окна (коим являются такие контролы: Edit, Button и т.д.)
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
'Ищем hWnd Проводника по его классу
hndExpl = FindWindow("ExploreWClass", vbNullString)
'Ищем hWnd ComboBox, который содержит адрес
hndComb = FindWindowEx(hndExpl, 0, "ComboBoxEx32", vbNullString)
' hndComb - в этом контроле в поле .Text содержится адрес, осталось его только получить... :)
....л так: Обратиться и считать текущ. путь из Combox Проводника (Combox - имеется ввиду строка с адресом)......
goro писал(а):....л так: Обратиться и считать текущ. путь из Combox Проводника (Combox - имеется ввиду строка с адресом)......
Может быть что отключена функция показа всей строки в панели адреса и тогда твоя прога не покажет весь путь.
'Функция для поиска окна первого уровня
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Функция для поиска дочернего окна (коим являются такие контролы: Edit, Button и т.д.)
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 GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_GETTEXT = &HD
Dim hndExpl As Long, hnd_contr1 As Long, hnd_contr2 As Long, hnd_contr3 As Long
Dim s As String, iTxtLen As Long
'Ищем hWnd Проводника по его классу
hndExpl = FindWindow("ExploreWClass", vbNullString)
'Ищем hWnd ComboBox, который содержит адрес
hnd_contr1 = FindWindowEx(hndExpl, 0, "WorkerA", vbNullString)
hnd_contr2 = FindWindowEx(hnd_contr1 , 0, "ReBarWindow32", vbNullString)
hnd_contr3 = FindWindowEx(hnd_contr2 , 0, "ComboBoxEx32", vbNullString)
iTxtLen = SendMessage(hnd_contr3 , WM_GETTEXTLENGTH, 0, 0)
iTxtLen = iTxtLen + 1
s = Space$(iTxtLen)
iTxtLen = SendMessage(hnd_contr3 , WM_GETTEXT, iTxtLen, ByVal s)
MsgBox s
GSerg писал(а):А если я 10 эксплореров открою? (а я открою...) Как сия прога узнает, в котором из них происходит то важное, за чем следует следить?
Можно проверить работает ли с этим окном польз. GetForegroundWindow и если нет, продолжить поиск по классу дальше. Хотя тут конечно надо в начале определиться с общей идеологией. Зачем конкретно мы собираемся следить и как.Если нас волнует только то, чтобы пользователь ненароком в любом проводнике не открыл опред. папку, тогда придется все Проводники шерстить...
goro писал(а):А если пользователь открыл папку в Windows Commander'е? как это отследить? гы...
Сейчас этот форум просматривают: Google-бот и гости: 14