Показать сообщение отдельно
  #10  
Старый 16.03.2011, 11:15
Аватар для Sky.NET
Sky.NET Sky.NET вне форума
Прохожий
 
Регистрация: 22.09.2010
Сообщения: 49
Версия Delphi: XE
Репутация: 12
По умолчанию

Используется глобальная горячая клавиша [Ctrl] + [C] и прога перехватывает данную комбинацию не давая выполниться её виндовой процедуре. Пробовал вместо имитации посылать всякие сообщения чужому окну, но безрезультатно.
В общем делаю следующее:
Код:
<...>
procedure TForm1.WM_Hotkey(var Msg: TWMHotkey);
<...>
begin
<...>
     if Msg.HotKey = KeyID[7] then
       begin
// Убираем зарегистрированную клавишу
         UnRegisterHotkey(Handle, KeyID[7]); 
// Имитируем нажатие [Ctrl] + [C] (в чужом окне)
         keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
         keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
         keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
         keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
// Регистрируем клавишу заново
         RegisterHotkey(Handle, KeyID[7], MOD_CONTROL, 67);
<...>
// Считываем из буфера
         buff := Clipboard.AsText;
         for I1 := 0 to LBQuestions.Items.Count - 1 do
           if Pos(buff, LBQuestions.Items.Strings[I1]) <> 0 then
           begin
             LBQuestions.Selected[I1] := True;
             ListQuestion;
             Break;
           end;
       end;
<...>
end;
<...>
procedure TForm1.ListQuestion;
<...>
begin
<...>
// Пишем в буфер
     Clipboard.SetTextBuf(PChar(Copy(S, 1, p1 - 1))); 
// При повторном проходе - "Сannot open clipboard. Отказано в доступе."
<...>
end;
<...>
Это все манипуляции с буфером, которые я провожу в программе.
Окно программы практически всё время неактивно (работаю в чужом окне).
__________________
IDE := Embarcadero.RADStudio.XE.Architect
// Успешность метода научного тыка обратно пропорциональна извилистости головного мозга на кривизну рук ©
Ответить с цитированием