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

Вниз

Как получить selected text   Найти похожие ветки 

 
AlexanderS   (2002-01-22 15:45) [0]

Подскажите плз, как получить текст выделенный в чужом приложении.
Т.е. требуется, чтоб пользователь выделил (не скопировал в буфер) текст в какой-то программе, а моя могла его обработать.


 
VuDZ   (2002-01-22 16:28) [1]


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


 
troits   (2002-01-23 12:16) [2]

>VuDZ
А что за WM_GETSELTEXT? Может, должно быть EM_GETSELTEXT?
Но это только для rich edit.


 
VuDZ   (2002-01-23 16:54) [3]

да, ошибся...


 
derr   (2002-01-28 10:17) [4]

А как для WIN95/98 ?
EM_GETSELTEXT - не пройдет ?


 
VuDZ   (2002-01-28 10:20) [5]

only for NT - значит что используется UNICODE - LPWSTR and wcscmp :D
канэчна будет работать


 
derr   (2002-01-28 13:43) [6]

only for NT - значит что используется UNICODE - LPWSTR and wcscmp :D
канэчна нэ понял. Прекодировать надо ?
Шо це таке wcscmp :D ?



 
VuDZ   (2002-01-28 16:35) [7]

derr
гы-гы.. вот оно. различие делфи и С :)
короче, специально для делфистов - юзайте PChar и всё.
LPWSTR - LongPointe2WideSTRing - указатель на UNICODE строку,
wcscmp() - сравнение вдух UNICODE строк.
короче, основной смысл куска кода ясен, абстрагируясь от С и обращая внимание на win32API?


 
gorohov   (2002-01-28 17:29) [8]

НЕ надо пугать.
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.
Разьве этого мало ?


 
Dimaond Cat   (2002-01-29 01:02) [9]

2 Vudz
ага, вот только есть такие вещи как Internet Explorer которые в своем окне имеют вроде как дочерние окна но вот с хендлами у них проблемы, поэтому на сообщение wm_copy они плюют. а так в принципе пример нормальный. :о)


 
VuDZ   (2002-01-29 02:08) [10]

ну я и не обещал что это будет работать всегда и везде :}


 
Серый   (2002-02-01 17:54) [11]

Хорошо, но мало !
Не понялЖ
"с хендлами у них проблемы, поэтому на сообщение wm_copy "
Как это плюют ?


 
Skald   (2002-02-04 11:45) [12]

Господа, а кто скажет по 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)?


 
Dimaond Cat   (2002-02-05 00:36) [13]

а ты внимательно хелп на это сообщение почитай
The EM_GETSELTEXT message retrieves the currently selected text in a rich edit control .


 
Skald   (2002-02-05 11:46) [14]

2Dimaond Cat - А скажи-ка мне окно в WordPad-e это что?
Не rich edit control ли случайно?


 
Dimaond Cat   (2002-02-06 00:44) [15]

Случайно нет


 
Skald   (2002-02-06 11:53) [16]

2Dimaond Cat ©
Даже не буду спорить. (Хотя всё ж интересно, а что ж это)
Но почему же если на форму положить TRichEdit, и выделить в нем текст - резалт будет тот же "Коврик выполнил... и будет свёрнут" (при условии, что попытка получить currently selected text осуществлялась с другого проэкта)???


 
Dimaond Cat   (2002-02-07 01:07) [17]

2 Skald :
хрен его знает, могу только сказать , что ето виноват Trichedit, по крайней мере у меня сообщение об ощибке выдает он а не приложение посылающее сообщение. Но кстати wm_copy работает без проблемм, равно как и Wm_copydata



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

Форум: "WinAPI";
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
1-22755
Glonia Zbanov
2002-03-27 10:44
2002.04.08
tag


1-22654
solo
2002-03-28 11:32
2002.04.08
Вся работа стоит.


14-22794
Dimka Maslov
2002-02-21 12:44
2002.04.08
Почему крышки люков делают круглыми?


4-22896
Serd
2002-02-06 09:59
2002.04.08
Как запретить системные комбинации клавиш?


1-22609
Well
2002-03-25 09:52
2002.04.08
Работа с TImage





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский