|
Вопрос # 3 963/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Сделал менеджер паролей - готовый лень искать, да и потренироваться нужно по работе с буфером. По одной кнопке в буфере логин, по другой - пароль. Чтобы еще ленивей было, захотел, чтобы буфер обновлялся после скидывания информации в окно формы. Но интуиция и здравый смысл мне подсказывает, что мое приложение не может знать, что происходит за пределами его формы. Я прав?
Придется по таймеру, раз лень второй раз кнопку тискать.
 |
Вопрос задал: Толяныч (статус: 4-ый класс)
Вопрос отправлен: 2 апреля 2010, 00:36
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 8 апреля 2010, 12:45; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 2 апреля 2010, 08:41 [#1]:
Предлагаю ловить WM_PASTE, посланное в активное окно. Если это удасться - по этому событию очищать буфер обмена.
Ставить такие хуки я не пробовал и даже не в курсе, возможны они или нет - нужды не было.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Толяныч (статус: 4-ый класс), 2 апреля 2010, 22:20 [#2]:
У меня в приложении только заносится текст в Сlipboard. Дальше я перехожу в окно брауэера и жму Ctrl/V. Я так думаю, если фокус ввода перешел в другое окно и моя форма стала неактивной, то оно уже не может отслеживать события КЛАВИША НАЖАТА ? Поиск дескрипторов чужого окна я не использую.
В общем, задача для общего развития и углубления понятия, прикладное ее значение невелико.
Спасибо за ответ.
|
|
Вадим К (статус: Академик), 2 апреля 2010, 23:06 [#3]:
Вставить то можно и через меню правой кнопки. Поэтому перехватывать Ctrl+V не совсем корректно. Хотя кто мешает сделать свою горячую кнопку? и никаких буферов обмена
Некоторые пользователи за "испорченный буфер обмена" по голове не погладят
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Толяныч (статус: 4-ый класс), 3 апреля 2010, 14:48 [#4]:
На компе один пользователь - с ним проблемы не будет А насчет "свою горячую кнопку"... Если правильно соображаю, то это вариации на тему "Заглядываем в чужие окна". Я с этим пока обломался, но тут в форуме был готовый фрагмент, и будет время, попытаюсь все-таки додавить эту тему.
А горячая клавиша в моем приложении работать не будет, если фокус ввода ушел на другую форму. Или нет ?
|
|
Толяныч (статус: 4-ый класс), 4 апреля 2010, 11:38 [#6]:
Спасибо! Столько информации, есть над чем думать и экспериментировать.
|
|
Толяныч (статус: 4-ый класс), 8 апреля 2010, 11:18 [#7]:
К сожалению, вариант не прокатил. Хоть она и горячая, но она ( клавиша ) работает только когда активно мое приложение. Когда уводишь курсор на браузер в окно ввода, тискай - не тискай "горячую", а в буфере что было, то и осталось.
Давайте закроем тему. Это не вопрос жизненной необходимости.
|
|
min@y™ (статус: Доктор наук), 8 апреля 2010, 12:04 [#8]:
Цитата (Толяныч):
Хоть она и горячая, но она ( клавиша ) работает только когда активно мое приложение.
Чтобы зарегистрировать горячую клавишу, ты, надеюсь использовал предназначенную для этого функцию RegisterHotkey()?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Толяныч (статус: 4-ый класс), 8 апреля 2010, 12:25 [#9]:
min@y™: И не надейся Я довольствовался тем, что поставил амперсенд перед нужным символом в Caption, и пока приложение активно, этого было достаточно. Но теперь уж попробую, конечно.
|
|
min@y™ (статус: Доктор наук), 8 апреля 2010, 12:45 [#10]:
Вот пример из моей проги.
При запуске:
RegisterHotKey(Application.Handle, 253, MOD_CONTROL or MOD_WIN, VK_F12); // Ctrl + Win + F12
RegisterHotKey(Application.Handle, 254, MOD_CONTROL or MOD_WIN, VK_F11); // Ctrl + Win + F11
RegisterHotKey(Application.Handle, 255, MOD_WIN, $20); // Win + Space
Перед выходом:
UnregisterHotKey(Application.Handle, 253);
UnregisterHotKey(Application.Handle, 254);
UnregisterHotKey(Application.Handle, 255);
Отлов сообщений WM_HOTKEY:
procedure TMainForm.AppEventsMessage(var Msg: tagMSG;
var Handled: Boolean);
begin
case Msg.message of
WM_QUERYENDSESSION: Close();
WM_HOTKEY: begin
case Msg.wParam of
// Развернуть/активизировать
253: if IsIconic(Application.Handle)
then begin
Application.Restore();
Application.BringToFront();
end
else Application.Minimize();
// Сказать время
254: begin
Application.ProcessMessages();
Clocker.SpeakTime();
end;
// Отмена проигрывания
255: ThreadQueue.TerminateAllThreads();
end; // case
Handled:= False; // Отдаю другим прогам
end;
end; // case
// ...
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|