Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: basicproduction.nm.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 02.02.05 12:25
 Вообще то если поле текстовое, то читается всегда (независимо от процесса). Я как-то писал прогу на VB, которая выдавала информацию об окне под курсором. Так вот если поле было текстовое, то никогда не сбоило.

 Возможно просто там другой контрол используется. Ты класс его смотрел?

Ответить

Номер ответа: 5
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #5 Добавлено: 02.02.05 15:18
Фильтр представляет из себя строку, разбитую нулями, и на конце (как признак окончания фильтра) два нуля
Dim sFilter As String
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-сайт: basicproduction.nm.ru
 Профиль | | #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-сайт: basicproduction.nm.ru
 Профиль | | #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 сразу устанавливал значение, в этом случае все пашет, но при изменении текста – нет?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам