Форум: "Основная";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизКак получить слово под курсором из любой программы? Найти похожие ветки
← →
Имя не скажу (2006-07-29 01:02) [0]В одном форуме раскопал:
implementation
{$R *.dfm}
uses
Accessibility_TLB; // Импортировать из oleacc.dll
function AccessibleObjectFromPoint(Pt: TPoint; var Acc: IAccessible; var Child: Variant): HRESULT;
stdcall; external "OleAcc.dll" name "AccessibleObjectFromPoint";
var
OldPoint: TPoint;
procedure RecalcText(Wnd: HWND; uMsg, idEvent: UINT; dwTime: DWORD); stdcall;
var
P: TPoint;
A: IAccessible;
V: Variant;
begin
if GetCursorPos(P) and ((P.X <> OldPoint.X) or (P.Y <> OldPoint.Y)) then
begin
OldPoint := P;
if Succeeded(AccessibleObjectFromPoint(P, A, V)) then
Form1.Caption := A.accName[V]
else
Form1.Caption := ""
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetTimer(Handle, 1, 1000, @RecalcText)
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
KillTimer(Handle, 1)
end;
Но он получает целое предложение под курсором, а никак не отдельное слово. Как этого добиться?
← →
Германн © (2006-07-29 01:16) [1]2 Имя не скажу
А я и не хочу спрашивать. :-)
> Но он получает целое предложение под курсором, а никак не
> отдельное слово. Как этого добиться?
А кто "он"?
У "него" и спрашивай!
Сам "раскопал", сам и "закапывай"! :-)
← →
Имя не скажу (2006-07-29 01:20) [2]
> 2 Имя не скажу
> А я и не хочу спрашивать. :-)
Все равно не скажу ))))
> А кто "он"?
> У "него" и спрашивай!
Моя (т.е.) раскопанная программа, конечно)
← →
Германн © (2006-07-29 01:48) [3]Ну и. Так в чём сбс-но проблема?
Не то "раскопал" что-ли?
← →
Имя не скажу (2006-07-31 23:29) [4]Проблема в том, что эта прога возвращает полностью предложение, над которым он сейчас стоит, а мне нужно узнать именно слово.
← →
tButton © (2006-08-01 07:38) [5]хм =)
а у кого спрашивает что под курсором?
у любого компонента?
или у какого-то определённого?
если у кого-то одного можно заточить
точнее - написать
а этот код закопай обратно =)
← →
atruhin © (2006-08-01 23:14) [6]> Как получить слово под курсором из любой программы?
Вобщем никак. Только распознавание образов, но судя по вопросу, это не реально
← →
Dmitrij_K (2006-08-01 23:58) [7]Есть программа переводчик translateit.ru она как-то это далает. Как?
← →
atruhin © (2006-08-02 19:10) [8]> Есть программа переводчик translateit.ru она как-то это
> далает. Как?
А ты попробуй, с помощью этой программы, перевести надпись элемента TLabel.
Что получится?
Вообще как она не знаю, но например Ligvo делает очень просто, запускается по двойному нажатию Ctrl-Insert? Ctrl-C, т.е. при первом нажатии, текст помещается в буфер, при втором переводится.
← →
Юрий Зотов © (2006-08-02 20:01) [9]> atruhin © (02.08.06 19:10) [8]
TLabel - это элемент только для той программы, в которой он живет. Для остальных программ это не элемент, а просто рисунок и никаких надписей в нем нет. Соответственно, получить то, чего нет - невозможно.
PS
Я в курсе, что Земля не совсем круглая.
← →
Eraser © (2006-08-02 20:17) [10]> [8] atruhin © (02.08.06 19:10)
> > Есть программа переводчик translateit.ru она как-то это
>
> > далает. Как?
>
> А ты попробуй, с помощью этой программы, перевести надпись
> элемента TLabel.
> Что получится?
как правильно заметил Юрий Зотов, именно TLabel перехватить не удасться, но и Земля действительно не совсем круглая :) это значит, что во программах (особенно написаных на MSVC++) в т.ч. системных используется аналог не TLabel, а TStaticText, т.е. оконный элемент, прочитать заголовок которого не составляет труда. Но тут уж как повезет, попадется TLabel - текст "вытащить" не удастся, TStaticText - удастся )
← →
atruhin © (2006-08-02 23:36) [11]> [9] Юрий Зотов © (02.08.06 20:01)
> [10] Eraser © (02.08.06 20:17)
Я не понял, чего мне то объяснять бросились? Я это и так знаю.
Автор задал конкретный вопрос:
> Как получить слово под курсором из любой программы?
Я ответил что из любой никак. На последовавшие вопросы привел пример.
← →
atruhin © (2006-08-02 23:38) [12]Кстати помимо TLabel нельзя получить слово из любого элемента, где надпись просто выводится в OnDraw....
← →
Eraser © (2006-08-03 00:47) [13]> [12] atruhin © (02.08.06 23:38)
> Кстати помимо TLabel нельзя получить слово из любого элемента,
> где надпись просто выводится в OnDraw....
эт смотря какая надпись, если та же, что в заголовке окна, которое прорисовывает надпись, то можно.. но в общем случае - нет.
← →
Юрий Зотов © (2006-08-03 01:37) [14]Поясню, о чем идет речь в топике. Не о рисованных надписях, конечно. И даже не о всех окнах, а только о тех, которые поддерживают IAccessible (а в современных версиях Windows этот интерфейс поддерживают чуть ли не все стандартные контролы).
Где-то с год назад подобный вопрос уже задавался, тема для меня была новая, заинтересовался - ну и набросал этот пример получения текста, полагая, что дальнейшее (выделить из уже готового текста одно нужное слово) уже несложно и что для этого надо просто поизучать IAccessible более подробно, чем это сделал я при написании примера. Тем более, что есть программы, которые действительно это делают (QDictionary, например) - значит, это возможно.
Видимо, за прошедший год этот пример (как оно обычно и бывает) расползся по Сети, но вторую часть задачи (выделение слова) за это время так никто и не решил (вероятно, по той же причине, по которой Джо был неуловимым). Сейчас попробовал сделать это "на скорую руку" - не получилось, нужно браться более серьезно. Но тратить на неактуальную для меня задачу какое-то заметное время... честно говоря, не могу позволить себе такой роскоши. Сорри.
Так что задачка остается актуальной и если кому интересно поломать над ней голову - MSDN в руки и вперед. Решение точно есть, надо его найти.
← →
имя (2006-08-03 02:08) [15]Удалено модератором
← →
имя (2006-08-03 02:40) [16]Удалено модератором
← →
имя (2006-08-03 02:50) [17]Удалено модератором
← →
имя (2006-08-03 03:13) [18]Удалено модератором
← →
имя (2006-08-03 03:20) [19]Удалено модератором
← →
имя (2006-08-03 03:20) [20]Удалено модератором
← →
имя (2006-08-03 03:31) [21]Удалено модератором
← →
имя (2006-08-03 03:34) [22]Удалено модератором
← →
имя (2006-08-03 03:50) [23]Удалено модератором
Примечание: Мужики, хорош флудить.
← →
Имя не скажу (2006-08-04 23:18) [24]
> Юрий Зотов © (03.08.06 01:37) [14]
> Поясню, о чем идет речь в топике. Не о рисованных надписях,
> конечно. И даже не о всех окнах, а только о тех, которые
> поддерживают IAccessible (а в современных версиях Windows
> этот интерфейс поддерживают чуть ли не все стандартные контролы).
>
Прошу прощения, именно это я и имел в виду :)))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.053 c