Определите, завершилось ли задание, используя Delphi - PullRequest
0 голосов
/ 01 апреля 2020

Я использую прикрепленный код для копирования содержимого PDF-файла в компонент richedit.

Я не знаю, как определить, когда Acrobat Reader открыл файл / скопированный контент, поэтому я использую команду sleep, которая очень неэффективно. Позже мне нужно будет запустить этот код на тысячах PDF-файлов с различными размерами.

Не могли бы вы помочь мне заменить команду сна командой, которая сообщит о завершении задачи?

var
  Title: array[0..255] of char;
begin
  GetWindowText(wHandle, Title, 255);
  if IsWindowVisible(wHandle) then
  if pos('Adobe Reader',string(Title))>0 then
  begin
    keybd_event(VK_CONTROL,0,0 , 0);
    keybd_event(ord('A'),0,0 , 0);
    keybd_event(ord('A'),0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL,0, KEYEVENTF_KEYUP,0);

    keybd_event(VK_CONTROL,0,0 , 0);
    keybd_event(ord('C'),0,0 , 0);
    keybd_event(ord('C'),0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_CONTROL,0, KEYEVENTF_KEYUP,0);
end;
  Result := True;
end;


procedure TForm5.Button1Click(Sender: TObject);
begin
    ShellExecute(self.WindowHandle,'open',PChar('D:\Orators.pdf'),nil,nil, SW_SHOWNORMAL);
    sleep(1000);
    EnumWindows(@PDF_to_Clipboard,LPARAM(ListBox1));
    sleep(1000);

    RichEdit1.Lines.Clear;
    RichEdit1.PasteFromClipboard;
end;

1 Ответ

0 голосов
/ 01 апреля 2020

Вы можете использовать функцию AddClipboardFormatListener () , чтобы получать уведомления о появлении новых данных в буфере обмена. Вы найдете Delphi пример здесь .

Имейте в виду, что вы можете получить уведомление для каждого доступного формата (простой текст, форматированный текст ...).

...