Страница: 1 |
Страница: 1 |
Вопрос: Пара вопрсов
Добавлено: 02.02.05 10:31
Автор вопроса: Mihalыch | ICQ: 373-509-101
1. Как при вызове диалога выбора файлов, в фильтре указать несколько форматов? Речь идет о GetOpenFileName.
2. В описании ф-ии GetWindowText, сказано: ф-я не может использоваться для чтения текста из текстового поля другого приложения. Во первых иногда это получается, а во вторых какая ф-я тогда может для этого использоваться?
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 02.02.05 11:57
1. Через ; Например "Txt and DOC"+Chr$(0)+"*.txt;*.doc"
2. Попробуй послать сообщение WM_GETTEXT
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 02.02.05 12:02
Ее аналог еще есть GetDlgItemText, хотя вроде бы и она обладает теми же св-вами...
Номер ответа: 3
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #3
Добавлено: 02.02.05 12:08
По первому вопросу, так можно выбирать сразу несколько типов файлов, уже хорошо, но вот еще бы по раздельности (выбрал один пункт видишь только txt, другой только doc, третий оба вместе).
WM_GETTEXT, пробовал, тот же эффект, в описании сказано что, WM_GETTEXT – дублирует GetWindowText.
GetDlgItemText - попробую
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 02.02.05 12:25
Вообще то если поле текстовое, то читается всегда (независимо от процесса). Я как-то писал прогу на VB, которая выдавала информацию об окне под курсором. Так вот если поле было текстовое, то никогда не сбоило.
Возможно просто там другой контрол используется. Ты класс его смотрел?
Номер ответа: 5
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #5
Добавлено: 02.02.05 15:18
Фильтр представляет из себя строку, разбитую нулями, и на конце (как признак окончания фильтра) два нуля
sFilter = "Word Files" & Chr(0) & "*.DOC" & Chr(0) & "Text Files" & Chr(0) & "*.txt" & Chr(0) & "All Files" & Chr(0) & "*.*" & Chr(0) & Chr(0)
А текстбокс читается без проблем. Если например читать из листвью, то надо иметь права доступа к памяти процесса, содержащего листвью.
Так что действительно, посмотри, какой класс того поля, откуда пытаешься считать
Номер ответа: 6
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #6
Добавлено: 02.02.05 15:35
За фильтр спасибо!
А про текст, класс посмотрел “ThunderRT6TextBox”, иногда “ThunderTextBox”, да и каким он может быть, если на тестовую прогу накидал TextBox’ов. Maнипулятор и имя класса без проблем а вот текст не получается, только у своего приложения получает.
Пробовал так:
sBuffer = Space(BufferLen)
Call SendMessageByString(hChildWin, WM_GETTEXT, BufferLen + 1, sBuffer)
Здесь пробовал вместо байтовый sBuffer массив 'hMem = VarPtr(aByte(0))…
BufferLen = GetWindowTextLength(hChildWin)
BufferLen = GetWindowText(hChildWin, sBuffer, BufferLen + 1)
BufferLen = GetDlgItemText(hChildWin, 0, sBuffer, BufferLen + 1)
Это ф-я, которую sne предложил, тут вообще не получается, не могу понять что за идентификатор контрола нужно передать во второй параметр
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 02.02.05 15:55
Вообще то sBuffer нужно передавать ByVal. Покажи объявление SendMessageByString
(потому как такой API-функции не существует в Win32 API).
Номер ответа: 8
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #8
Добавлено: 02.02.05 16:27
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
У меня книга по API, с ней шел диск с примерами, это объявление от туда.
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 02.02.05 16:48
Вроде правильно. Может длина буфера слишком большая? Почему +1? Попробуй LEN(sBuffer)-1
Хотя наверное это не важно. Да, и проверь не забыл ли ты объявить константу WM_GETTEXT.
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 03.02.05 10:48
If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. This behavior is by design. It allows applications to call GetWindowText without hanging if the process that owns the target window is hung. However, if the target window is hung and it belongs to the calling application, GetWindowText will hang the calling application.
To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
Номер ответа: 11
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #11
Добавлено: 03.02.05 11:00
Это все понятно, но почему WM_GETTEXT, не чего не возвращает из текстового поля другого приложения? Я делал так, создавал проект кидал на форму TextBox, и в его св-во Text сразу устанавливал значение, в этом случае все пашет, но при изменении текста – нет?