![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить selected text [D5, Win95/98, Win2k]
AlexanderS © (2002-01-22 15:45:00)Подскажите плз, как получить текст выделенный в чужом приложении.
Т.е. требуется, чтоб пользователь выделил (не скопировал в буфер) текст в какой-то программе, а моя могла его обработать.
Dimaond Cat (2002-02-07 01:07:00) [1]2 Skald :
хрен его знает, могу только сказать , что ето виноват Trichedit, по крайней мере у меня сообщение об ощибке выдает он а не приложение посылающее сообщение. Но кстати wm_copy работает без проблемм, равно как и Wm_copydata
Skald (2002-02-06 11:53:00) [2]2Dimaond Cat ©
Даже не буду спорить. (Хотя всё ж интересно, а что ж это)
Но почему же если на форму положить TRichEdit, и выделить в нем текст - резалт будет тот же "Коврик выполнил... и будет свёрнут" (при условии, что попытка получить currently selected textосуществлялась с другого проэкта)???
Dimaond Cat (2002-02-06 00:44:00) [3]Случайно нет
Skald (2002-02-05 11:46:00) [4]2Dimaond Cat - А скажи-ка мне окно в WordPad-e это что?
Не rich edit controlли случайно?
Dimaond Cat (2002-02-05 00:36:00) [5]а ты внимательно хелп на это сообщение почитай
The EM_GETSELTEXT message retrieves the currently selected text in a rich edit control .
Skald (2002-02-04 11:45:00) [6]Господа, а кто скажет по EM_GETSELTEXT
Почему вот такой вот код:
var
pc array[word] of char;
i:=SendMessage(h1, EM_GETSELTEXT, 0, longint(@pc[0]));
Дает вот такой результат:
i=0 (если h1 - хэндл окошка едитора в Делфи или в Ворде)
"Программа WordPad.exe выполнила некорректную оперцию и будет..." (если h1 указывает на окно редактирования WordPad-a)?
Серый (2002-02-01 17:54:00) [7]Хорошо, но мало !
Не понялЖ
"с хендлами у них проблемы, поэтому на сообщение wm_copy "
Как это плюют ?
VuDZ (2002-01-29 02:08:00) [8]ну я и не обещал что это будет работать всегда и везде :}
Dimaond Cat (2002-01-29 01:02:00) [9]2 Vudz
ага, вот только есть такие вещи как Internet Explorer которые в своем окне имеют вроде как дочерние окна но вот с хендлами у них проблемы, поэтому на сообщение wm_copy они плюют. а так в принципе пример нормальный. :о)
gorohov (2002-01-28 17:29:00) [10]НЕ надо пугать.
AnsiCompareStr function
Compares strings based on the current Windows locale with case sensitivity.
AnsiCompareText function
Compares strings based on the current Windows locale without case sensitivity.
Разьве этого мало ?
VuDZ (2002-01-28 16:35:00) [11]derr
гы-гы.. вот оно. различие делфи и С :)
короче, специально для делфистов - юзайте PChar и всё.
LPWSTR - LongPointe2WideSTRing - указатель на UNICODE строку,
wcscmp() - сравнение вдух UNICODE строк.
короче, основной смысл куска кода ясен, абстрагируясь от С и обращая внимание на win32API?
derr (2002-01-28 13:43:00) [12]only for NT - значит что используется UNICODE - LPWSTR and wcscmp :D
канэчна нэ понял. Прекодировать надо ?
Шо це таке wcscmp :D ?
VuDZ (2002-01-28 10:20:00) [13]only for NT - значит что используется UNICODE - LPWSTR and wcscmp :D
канэчна будет работать
derr (2002-01-28 10:17:00) [14]А как для WIN95/98 ?
EM_GETSELTEXT - не пройдет ?
VuDZ (2002-01-23 16:54:00) [15]да, ошибся...
troits (2002-01-23 12:16:00) [16]>VuDZ
А что за WM_GETSELTEXT? Может, должно быть EM_GETSELTEXT?
Но это только для rich edit.
VuDZ (2002-01-22 16:28:00) [17]
1. работает только с NT
#define UNICODE
#include <windows.h>
#include <Lm.h>
#include <conio.h>
#include <process.h>
#include <stdio.h>
// тут осуществляется нумерация дочерих окон
bool CALLBACK EnumChild(HWND hWnd, void*)
{
LPWSTR szClass = new short[256];
// если дочернее окно - EDIT, то ему отсылается мессага
// скопировать текст
GetClassName(hWnd, szClass, 255);
if (wcscmp(szClass, L"Edit") == 0)
SendMessage(hWnd, WM_COPY, NULL, NULL);
else
return true;
return false;
}
int main(int argc, char* argv[])
{
char *c = new char[65535];
memset(c, 0, 65535);
HWND h = FindWindow(L"Notepad", NULL);
EnumChildWindows(h, EnumChild, NULL);
OpenClipboard(h);
HANDLE hData = GetClipboardData(CF_TEXT);
char *src = (char *)GlobalLock(hData);
printf(src);
GlobalUnlock(src);
getch();
}
но если надо делать без буфера, то поможет мессага WM_GETSELTEXT