Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 365
от 06.09.2006, 17:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 192, Экспертов: 34
В номере:Вопросов: 2, Ответов: 5


Вопрос № 53914: Здравствуйте! Попробую поведать суть задачки как можно понятней: Я открываю какую либо папку (не в VB, а просто открываю), к примеру это папка "D:\Pictures". Как я понимаю, это обычная форма с контролами, где в SysListView32 показы...
Вопрос № 53964: Здрайствуйте. Для начала всех, кто учит с праздником, всем, кто учиться: примите мои соболезнования. :) Купил книгу "VBA", авт. - Андрей Гарнаев, издательство "bhv", серия "в подлиннике"(довольно толстая штука), ...

Вопрос № 53.914
Здравствуйте!
Попробую поведать суть задачки как можно понятней:
Я открываю какую либо папку (не в VB, а просто открываю), к примеру это папка "D:\Pictures". Как я понимаю, это обычная форма с контролами, где в SysListView32 показываются иконки файлов. Мне нужно узнать из VB6, какую именно папку показывает эта форма. Дескриптор этой формы мне известен.
Короче: по дескриптору нужно узнать, на какую директорию ссылается эта форма.
Подскажите пожалуйста хотябы какие API нужно использовать. Пока я знаю только GetWindowText, которая возвращает заголовок окна.
Отправлен: 31.08.2006, 17:46
Вопрос задал: Таянчин Алексей Геннадьевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, Таянчин Алексей Геннадьевич!

По-моему, Вы сами отвечаете на свой же вопрос: разве Вам панель адреса в Эксплорере не даст ответ, что это за файл (папка) ? Или VB-функция Dir$ ? Кстати, если быть более точным - то, что Вы называете "формой","контролом", для Windows - не более чем обычное окно. Небольшое, но существенное уточнение, потому что Ваша программа в таком случае должна осуществлять слежение за окнами (в данном случае - открытой папкой "D:\Pictures") и процессами. А для этого получить хэндл окна и ID связанного с ним процесса. Есть спеиализированная рассылка, где Вам подскажут, как это осуществить через API.
---------
Труд сделал обезьяну человеком, а лень человека - программистом !
Ответ отправил: Кокорич Вадим Леонидович (статус: 6-ой класс)
Ответ отправлен: 31.08.2006, 23:13

Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, Таянчин Алексей Геннадьевич!
Насколько я понял, Вы собрались заняться шпионописательством. По идее, чтобы осуществить все задуманное, Вам надо сперва найти это окно (GetForegroundWindow, EnumWindows и т. д.), потом перечислить все дочерние окна найденного окна (насколько понятно из вопроса, Вы уже знаете его дескриптор). Для этого можно использовать функцию EnumChildWindows (пример использования смотрите на http://www.vb.kiev.ua/ref/w32api/showdoc.php?f=enumchildwindows) и найти окно с именем "Edit", из которого с помощью GetWindowText и достать текст.
В принципе, все сводится к простому перечислению дочерних окон найденного главного окна (того, что Вы называете формой) и поиска нужного с извлечением из него текста.
Кстати, есть неплохой способ узнать точное имя нужного окна: просто сделайте стандартный проект, на нем разместите таймер,задайте ему интервал гдето 40, и опишите следующие функции и одну структуру:

Структура координат курсора
Private Type POINTAPI
x As Long
y As Long
End Type

Находит окно, которое расположено в пределах указанных координат
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long

Получает текущую позицию курсора мышки
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Получает текст окна
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Теперь с помощью всего этого можно проследить, над чем находится курсор мышки (напишите все это в Timer1_timer):
'################################################
Private sub Timer1_Timer()
Dim strTxt As String, hWin As Long
Dim pa As POINTAPI

strTxt=String$(255,0)
GetCursorPos pa

hWin=WindowFromPoint(pa.X, pa.Y)
GetWindowText hWin, strTxt, 254
strTxt=Left$(strTxt,InStr(strTxt,Chr$(0))-1)

'Выводим текст куда-нибудь (например, в заголовок нашей формы)
Me.Caption=strTxt
strTxt=vbNullString
End Sub
'###################################################
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 02.09.2006, 13:26
Оценка за ответ: 5


Вопрос № 53.964
Здрайствуйте.
Для начала всех, кто учит с праздником, всем, кто учиться: примите мои соболезнования. :)
Купил книгу "VBA", авт. - Андрей Гарнаев, издательство "bhv", серия "в подлиннике"(довольно толстая штука), прошу вас, если кто читал высказать свое мнение.
Просто сначала показалось, что очень содержательная хорошая книга, а по мере чтения все больше разочаровываюсь.
Отправлен: 01.09.2006, 09:17
Вопрос задал: Дмитрий Т. (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Макаренко Е.В.
Здравствуйте, Дмитрий Т.!
Если Вы имели в виду "Самоучитель VBA. Технология создания пользовательских приложений.", то впечатление и впрямь удручающее: небольшой ликбез и курс объектов и методов Excel'я. Лично у меня, когда пришлось разбираться с экселевским VBA, вызвала затруднения только постановка защиты на лист (парольная строка не хотела работать). И все.
По моему скромному мнению, лучшее обучение - это общие навыки по объектно ориентированому программированию + хелп ДАННОЙ среды VBA. Ибо кто под свою систему адаптирует VBA, тот обязательно поизощряется на предмет уникальных классов и методов. :(
Писать и опять копаться в справочнике конструктора...


---------
осторожность, точность... и горит все синим пламенем! :))
Ответ отправил: Макаренко Е.В. (статус: 9-ый класс)
Ответ отправлен: 01.09.2006, 09:32

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, Дмитрий Т.!

На вкус и цвет... Не знаю, чем Вас разоваровала эта книга - лично я с удовольствием ей пользуюсь и нахожу в ней ответы на все возникающие у меня вопросы по VBA.
На мой взгляд, Ваше разочарование объясняется несбывшимися ожиданиями - Вы явно не того ожидали от книги. Если Вы покупали ее с целью ответа на вопрос типа "БыстроеНаписаниеМакровируса" и т.п. - Вы явно ошиблись. То же самое, если Вы предполагали найти перечень конкретных, готовых рецептов на все случаи жизни: книга тем и хороша, что она дает ТОЛЬКО ОСНОВЫ, предполагая самостоятельное применение данных рекомендаций (или их комбинацию), их развитие. Вам не нравиться большое количество теории ? Простите, но это - основа, которую все равно знать надо, если Вы планируете и далее заниматься VBA.
Позвольте мне Вас процитировать: "Просто сначала показалось, что очень содержательная хорошая книга, а по мере чтения все больше разочаровываюсь". Еще раз спрошу: чем конкретно ? Примеры не работают или они примитивные ?
В общем, не аргументированное высказывание о книге. Конечно, книг о VBA написано очень много и, может быть, есть и лучше - не буду спорить. А, может, только мне одному она подходит ? ;-)
---------
Труд сделал обезьяну человеком, а лень человека - программистом !
Ответ отправил: Кокорич Вадим Леонидович (статус: 6-ой класс)
Ответ отправлен: 01.09.2006, 16:43

Отвечает: Митрофанов Артем Борисович
Здравствуйте, Дмитрий Т.!
Я эту книгу читал, но знаний она мне прибавила мало, если вообще прибавила. Советую книгу Стива Брауна(издательство Питер) - Visual Basic 6. Отличная книга - почти 600 страниц, описано почти все - от обработчиков событий до ActiveX. Удачи!
Ответ отправил: Митрофанов Артем Борисович (статус: 3-ий класс)
Ответ отправлен: 01.09.2006, 18:28


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное