Используется глобальная горячая клавиша [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;
<...>
Это все манипуляции с буфером, которые я провожу в программе.
Окно программы практически всё время неактивно (работаю в чужом окне).