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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
2-1295886563
Дмитрий С
2011-01-24 19:29
2011.05.01
Name в TComponent.Create(...)


2-1295623636
Сергей
2011-01-21 18:27
2011.05.01
Как остановить таймер в его событии ontimer?


2-1296014917
novai
2011-01-26 07:08
2011.05.01
Помогите оптимизировать не большой код


15-1295508835
jack128_
2011-01-20 10:33
2011.05.01
Как получить код возврата из Powershell ?


2-1295713769
Taras1995
2011-01-22 19:29
2011.05.01
StringGrid &amp; QReport





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