Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Вниз

Вопрос для Мастеров. На засыпку.   Найти похожие ветки 

 
Shrek   (2002-09-13 21:06) [0]

Значить так:
Имеется некий 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.
Принимаются любые мисли касающееся темы.
За рание Благодарен.


 
TTCustomDelphiMaster   (2002-09-13 21:22) [1]

Очевидно вы находите handle не того окна.


 
Esu   (2002-09-13 21:30) [2]

procedure TForm1.Button1Click(Sender: TObject);
var
buff : array[0..255] of char;
begin
GetWindowText(edit1.Handle, buff, 255);
ShowMessage(buff);
end;
работает... Видимо действительно не то окно


 
Shrek   (2002-09-13 21:31) [3]

Нет исключено! В некоторых случаях работает нормально.


 
Shrek   (2002-09-13 21:39) [4]


> Esu

Нет Вы не понимаете, это Edit совсем другой формы.
Для чего би я тогда использовал AttachThreadInput.
Читайте вопрос.
Ввашем примере я бы сделал так Edit.CopyToClipboard;


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

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


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


> TTCustomDelphiMaster

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


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

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

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


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

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

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


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

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.



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

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


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


> TTCustomDelphiMaster


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



> Song

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


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

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


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

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


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

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



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


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


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

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


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

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


 
Aldokhin_Alex   (2002-09-16 09:51) [17]

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


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


> Aldokhin_Alex



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


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



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

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


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

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

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


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

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

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

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

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


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

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


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

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


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

Благодаря
> Song


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

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

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


> Юрий Зотов

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.007 c
3-85372
Sergeyy
2002-09-04 09:58
2002.09.26
DefaultExpression в поле ADODataSet


1-85559
Shrek
2002-09-12 21:59
2002.09.26
ListView1DrawItem


3-85338
Viacheslav
2002-09-04 13:37
2002.09.26
Зачем нужен метод Post?


4-85772
Manulo
2002-06-17 17:48
2002.09.26
Текущее время


1-85543
Лана Розанова
2002-09-13 13:52
2002.09.26
Delphi 1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский