Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос для Мастеров. На засыпку. [D6, Win2k]


Страницы:   1 2

Shrek ©   (2002-09-13 21:06:00) 

Значить так:
Имеется некий Handleокошка ( TEdit) мне надо взять снего текст, GetWindowText- текста не достаёт, пусто. GetWindowTextLength- показывает 0. Остайотся только используя SendMessage(Handle, WM_COPY, 0, 0);скопировать текст в буфер, но для этого нужно текст в окне виделить.
Вопрос! Как виделить текст в окне;
Пробывал такое: SendMessage(Handle, LB_SELECTSTRING, 0, 0);и такое SendMessage(Handle, CB_SELECTSTRING, 0, 0); на большое меня не хватило.

Handleокошка беру при помощи GetFocusпредварительно используя AttachThreadInput.
Принимаются любые мисли касающееся темы.
За рание Благодарен.


Shrek   (2002-09-16 23:28:00) [1]

Благодаря
> Song


Всё получилось прекрасно.

var
Text: array [1..$FF] of Char;

SendMessage(handler, WM_GETTEXT, SizeOf(Text), Integer(@Text));


> Юрий Зотов

Речь не шла о handler-e.
Вы сами показали мне - AttachThreadInput.
GetWindowText а вот это уже на верно - берёт он текст, прада не всегда.


Song   (2002-09-16 22:29:00) [2]

Ребят, не парьтесь, у него наконец-то всё хорошо получилось.


Kibitzer   (2002-09-16 22:06:00) [3]

Хочу сделать маленькое замечание (только для WinNT): Если у какого-нибудь TEdit PasswordChar<>#0, то невозможно получить его текст отправляя ему сообщение типа SendMessage(EditHandle, WM_GETTEXT, 255, Integer(pc)) из другого приложения, хотя в том же приложении (даже из другой формы !) прекрасно работает (правда я не понял почему - может мастера объяснят).
Кроме того если у TEdit PasswordChar=#0, то можно "удалённо" установить какой-нибудь PasswordCharпослав сообщение: SendMessage(EditHandle, EM_SETPASSWORDCHAR, Ord("#"), 0), но вернуть назад (или установить другой символ) - облом :-/


Юрий Зотов   (2002-09-16 21:46:00) [4]

Ох, какие дебаты... Из-за чего, спрашивается? Из-за стандартной задачи с давно известным решением?

1. GetForegroundWindow, FindWindowEx, GetWindow - позволяют найти хэндл Edit"а без всяких заморочек с AttachThreadInput.

2. WM_GETTEXT(LENGTH) - позволяют взять его текст без всяких Clipboаrd"ов (не надо портить информацию бедняги юзера, ему своих проблем хватает).

3. По поводу GetWindowText уже было сказано - работает только для своего процесса.


Shrek   (2002-09-16 16:00:00) [5]

У меня был выходной! :)

Этот компонен очень интересный, hanlder у нево есть, но поработать сним через hanlder не совсем получается, компонент как-буто сложон из двух правда можно все коипоненты спрятат, но при попытке показать снова форма плохо работает.
В принцыипе я думал возможно проблема в том что это база даных Аксеса, форма создаётся им же, поработал сним я обнаружил ряд ошибок: текст можно вставить только из буфера, взять текст из компонента не льзя. Возможно это дело в Аксесе.


Song   (2002-09-16 15:43:00) [6]

Дык чего, до сих пор не получилось? :)


Shrek   (2002-09-16 15:28:00) [7]


> Aldokhin_Alex



> Если кто хочет подробности - расскажу


Если тебя не затруднит.


Aldokhin_Alex   (2002-09-16 09:51:00) [8]

Извините, я хотел сказать, глухо не про WM_GETTEXT, а про GETWINDOWTEXT. :-) Сорри, поторопился.


Aldokhin_Alex   (2002-09-16 09:42:00) [9]

Мужики, по-моему EM_GETLINE вам должен помочь. Работает гораздо быстрее, чем через клипбоард. И надежнее. Если кто хочет подробности - расскажу. А WM_GETTEXT действительно глухо, это вообще не из той оперы.


Shrek   (2002-09-13 22:56:00) [10]

Стоп не надо пример.


Shrek   (2002-09-13 22:43:00) [11]

А как Вы предлагаете использовать WM_GETTEXT - это ново для меня.
Если можно реальный пример.



> Вы думаете прикреплять чужой процесс только лишь для того
> чтобы использовать GetFocus - есть оптимальный способ?


Да я понимаю, но поверте, что для меня это так.


Song   (2002-09-13 22:35:00) [12]

Вы думаете прикреплять чужой процесс только лишь для того чтобы использовать GetFocus - есть оптимальный способ?


Song   (2002-09-13 22:32:00) [13]

Вот здесь помнится я когда-то писал пример как выдрать из блокнота текст: http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=delphi;action=display;num=1029670672;start=5


Shrek   (2002-09-13 22:24:00) [14]


> TTCustomDelphiMaster


GetWindowText почемуто с окна этой программы не берёт текста.
Но сдругих окон нормально.



> Song

Есть у меня этот handle но друним путём самим оптимальным для меня.
А вот на щёт WM_GETTEXT надо подумать.


Song   (2002-09-13 22:15:00) [15]

>>Да не надо мне handle.
Ну дык а что Вы хотите сказать что GetWindowText, WM_GETTEXT, WM_COPY и любого другого сообщения не нужно знать дискриптор окна?
Тут и разбираться нечего, просто Вам нужно дойти самому, чтобы потом больше не спрашивать.


TTCustomDelphiMaster   (2002-09-13 22:11:00) [16]

Shrek © (13.09.02 21:49)
Вот такая информация к размышлению:
GetWindowText
...

This function cannot retrieve the text of an edit control in another application.

Remarks
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.


Shrek   (2002-09-13 22:08:00) [17]

Да не надо мне handle.
Мне надо скопировать текст с окна в буфер.

Возможно Золотов бы разобрался сразу.
Мне хочется плакать.
Такой простой вопрос для Мастеров и не получается.


Song   (2002-09-13 22:00:00) [18]

Не надо никаких AttachTread..

Находите через FindWindowEx() и всё получится.


Shrek   (2002-09-13 21:49:00) [19]


> TTCustomDelphiMaster

Поверте мне я бы не писал не форум если бы не был уверен 100%.
Я кликаю на то окошко, нажимаю клавишы которые обрабативает моя программа, GetFocus мне берёт handle потом нажимаю на кнопку и выполняю ShowWindow(handle, WM_HIDE); окна невидно, потом ShowWindow(handle, WM_SHOW); оно на месте.
Думаю теперь Вам ясно.
Ми зря теряем время. Может у Вас есть другая мисль?


TTCustomDelphiMaster   (2002-09-13 21:40:00) [20]

Shrek © (13.09.02 21:31)
А вы все таки проверьте, тот это handle или не тот.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо