| 
| 
 | Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |