![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос для Мастеров. На засыпку. [D6, Win2k]
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): Если у какого-нибудь
TEditPasswordChar<>#0, то невозможно получить его текст отправляя ему сообщение типаSendMessage(EditHandle, WM_GETTEXT, 255, Integer(pc))из другого приложения, хотя в том же приложении (даже из другой формы !) прекрасно работает (правда я не понял почему - может мастера объяснят).
Кроме того если уTEditPasswordChar=#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 или не тот.