Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.01;
Скачать: CL | DM;

Вниз

Макрос   Найти похожие ветки 

 
faiwer ©   (2011-01-23 21:40) [0]

Доброго времени суток.

Задача:

1. Пользователь выделяет текст
2. Пользователь зажимает доп. кнопку мыши
3. Срабатывает драйвер мыши и запускает мою программу (консольную)
4. Программа копирует выделенный текст
5. Обрабатывает
6. Заменяет на обработанный

Всё что до 4 пункта работает, и вообще не моего ума дело. Всё что после должна решать моя программа.

4. Скопировать тест я смог послав глобально Ctrl+C, а затем получив его из Clipboard.asText
5. Тут проблемы тоже нет
6. А вот тут я не знаю что делать.

Пробовал вот так:
   Clipboard.SetTextBuf(PChar(mes));
   PostKeyEx32(Ord("V"), [ssCtrl], False);


Однако вставлялся старый тест. Поставил между ними таймер - после 500 мс стало работать, но только в окне RAD Studio, но в нетбинсе (собсно ради него всё и затевалось) вставляется свежескопированный текст, а не изменённый. Увеличение sleep-а до 3 секунд не помогает. Зато помогает вызов ShowMessage, затем о5 ожидание 3 секунд, клик по окну (ибо оно изза диалога теряет фокус).

Простая вставка символов работает, но такой вариант не годится, ибо текст с которым я работаю содержит разные спецсимволы (< > # & и т.д.). Пробовал компоненту SendKey - она не справляется с етими символами.

Решил попробовать отправку сообщений окну. Ничего не получается =( Пробую так:

   dwTargetOwner := GetWindowThreadProcessId(GetForegroundWindow, nil);
   dwThreadID := GetCurrentThreadId(); //указатель на текущий процесс
   if (dwTargetOwner <> dwThreadID) then // если не один и тот же процесс
     Result := AttachThreadInput(dwThreadID, dwTargetOwner, TRUE); //подключение

   h:=GetFocus;
   SetWindowText(h, PChar("OLOLO") );
   SendMessage( h, WM_SETTEXT, 0, LPARAM(PChar("OLOLO2")) );


h - находит какой то дескриптор (не 0), но ничего не происходит (кроме смены заголовка окна). ТТ...

Вопрос, как реализовать пункт 6?

Если интересна сама задача - комментирование\раскомментирование кода (xls, css, php etc...)

P.S. D2010, W7, WXP


 
Andy BitOff ©   (2011-01-23 22:39) [1]

> 4. Скопировать тест я смог послав глобально Ctrl+C, а затем
> получив его из Clipboard.asText

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


 
Anatoly Podgoretsky ©   (2011-01-23 23:50) [2]

Вот теперь будешь знать, что и среди программистов есть уроды.


 
Германн ©   (2011-01-24 02:15) [3]


> т.к. не думал, что какой-то ... без моего ведома будет

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


 
Inovet ©   (2011-01-24 02:37) [4]

> [3] Германн ©   (24.01.11 02:15)
> А при "Пользователь зажимает доп. кнопку мыши" всегда "какой-
> то" "что-то" делает без твоего ведома.

Здесь неявное затирание буфера, то же можно и на любые другие события навешать: нажатие клавиши F11, например, или выбор пункта меню "Заменить выделенный текст" вдруг затрёт буфер.


 
Германн ©   (2011-01-24 03:01) [5]


> Inovet ©   (24.01.11 02:37) [4]
>
> > [3] Германн ©   (24.01.11 02:15)
> > А при "Пользователь зажимает доп. кнопку мыши" всегда
> "какой-
> > то" "что-то" делает без твоего ведома.
>
> Здесь неявное затирание буфера, то же можно и на любые другие
> события навешать: нажатие клавиши F11, например, или выбор
> пункта меню "Заменить выделенный текст" вдруг затрёт буфер.
>

Ну и?
В многозадачной среде "затирание буфера" вполне допустимо всегда. Буфер один, а приложений куча. Тут главное, что буфер "затирается" по "требованию" пользователя.


 
Inovet ©   (2011-01-24 03:09) [6]

> [5] Германн ©   (24.01.11 03:01)
> "затирается" по "требованию" пользователя.

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


 
Германн ©   (2011-01-24 03:35) [7]


> Inovet ©   (24.01.11 03:09) [6]
>
> > [5] Германн ©   (24.01.11 03:01)
> > "затирается" по "требованию" пользователя.
>
> Так нет требования, пользователь знать не знает, что его
> действие влияет на буфер, что программист, не зная как по-
> другому, сделал через буфер.
>

Требование есть! Кто-то нажал на доп.кнопку мыши.
И если в документации это нажатие описано, значит тому и быть!
В конце концов всяк, прошедший курс "информатики", обязан знать, что после Ctr+C, должно по возможности сделать Ctr+V сразу, а не нажимать другие кнопки.


 
faiwer ©   (2011-01-24 04:50) [8]


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


1. Ну никто не мешает его скопировать в отдельную переменную, а затем восстановить. Сейчас макрос в стадии реализации, и такие мелочи я оставил на потом
2. Программа исключительно для собственного использования, так что никто посторонний не пострадает, не переживайте :)


> Ну и?
> В многозадачной среде "затирание буфера" вполне допустимо
> всегда. Буфер один, а приложений куча. Тут главное, что
> буфер "затирается" по "требованию" пользователя.


Кстати да :) Но о5 же, повторюсь, единственным пользователем программы буду я сам.

А буфер я использую ввиду не понимания того, как иначе получить выделенный текст :) Может там есть какой шаманский вариант с WM_COPY или типа того? Но не приведёт ли он к тому же самому? + Как мне добраться до Handle контрола? Способ выше (найдено в сети), даёт мне опр.значение, но судя по всему не то =(


 
Leonid Troyanovsky ©   (2011-01-25 13:15) [9]


> faiwer ©   (24.01.11 04:50) [8]

http://delphimaster.net/view/4-1259844425/

--
Regards, LVT.



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

Текущий архив: 2011.05.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1295943783
dmitry1208197320
2011-01-25 11:23
2011.05.01
Где можно найти описание класса TXMLDocument


15-1295382887
cross
2011-01-18 23:34
2011.05.01
hex-редактор


15-1294829907
Пит
2011-01-12 13:58
2011.05.01
Русские символы в Apache


15-1295202200
George
2011-01-16 21:23
2011.05.01
SQL и время в параметрах


2-1292196382
Германн
2010-12-13 02:26
2011.05.01
Структура БД