Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Информация из буфера обмена


Автор: MacTep 22.6.2009, 16:39
Реализовано программно следующее:
1) двигаю курсор к определенному месту в браузере (mouse_event);
2) делаю двойной щелчок (mouse_event) для выделения текста;
3) имитирую нажатие ctrl+c (keybrd_event), тем самым копируя текст в буфер обмена;
4) ОЧЕНЬ СИЛЬНО ХОЧУ получить текст из буфера обмена, но не получается...

Может кто-то поможет?

Автор: THandle 22.6.2009, 17:59
Цитата(MacTep @  22.6.2009,  17:39 Найти цитируемый пост)
4) ОЧЕНЬ СИЛЬНО ХОЧУ получить текст из буфера обмена, но не получается...


А как пытаешься получить? Через TClipboard? Показывай код, что не получается.

Автор: MacTep 22.6.2009, 18:29
Поискал тут по форуму, но не нашел решения. Много слов и в итоге много нерешенного! ;)

Делаю такое: 
Код

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, CoolTrayIcon, Clipbrd, ShellAPI;

type
  TfrmMain = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
  public
    MyMouse: TMouse;
  end;
  procedure PageUp;
  procedure PageDown;
  procedure MouseLeftClick;
  procedure MouseDoubleClick;
  procedure CtrlC;
  procedure GetMoneyCount;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure PageUp;
begin
  // PageUp
  keybd_event(VK_PRIOR, 0, 0, 0);
  keybd_event(VK_PRIOR, 0, KEYEVENTF_KEYUP, 0);
end;

procedure PageDown;
begin
  // PageUp
  keybd_event(VK_NEXT, 0, 0, 0);
  keybd_event(VK_NEXT, 0, KEYEVENTF_KEYUP, 0);
end;

procedure MouseLeftClick;
begin
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;

procedure MouseDoubleClick;
begin
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;

procedure CtrlC;
begin
  keybd_event(VK_CONTROL, 0, 0, 0);
  keybd_event(VK_INSERT, 0, 0, 0);
  Sleep(100);
  keybd_event(VK_INSERT, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
end;

procedure GetMoneyCount;
begin
  PageUp;
  PageUp;
  SetCursorPos(0, 0);
  SetCursorPos(480, 220);
  MouseDoubleClick;
  CtrlC;
end;

procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
  GetMoneyCount;
  ShowMessage(clipboard.astext); // ни фига не работает ... такое ощущение, что во время работы проги, пока она в памяти, в буфер вообще нифего не копируется :(((
  timer1.Enabled := false;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Clipboard.Open;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Clipboard.Close;
end;

end.


Добавлено через 9 минут и 51 секунду
Ошибку нашел! Ужас....
Код

Clipboard.Open
Clipboard.Close

делать не надо! Горе от ума, называется! smile))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)