![]() |
|
#1
|
||||
|
||||
![]() Код:
procedure TForm1.Timer1Timer(Sender: TObject); var text: string; begin inc(schet); //SetCursorPos(1120,465); SetCursorPos(250,465); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0, 0, 0); SetCursorPos(1050,465); mouse_event(MOUSEEVENTF_LEFTUP,0,0, 0, 0); keybd_event(VK_LCONTROL, 0, 0, 0); keybd_event(Ord('C'), 0, 0, 0); keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); if schet=1000 then Timer1.Enabled:=false; sleep(10); Clipboard.Open; text:=Clipboard.AsText; Clipboard.Close; if (copy(text,1,5)='Некто') and (text<>msg) then begin msg:=text; Clipboard.Open; Clipboard.AsText:=ai(copy(text,7,length(text))); Clipboard.Close; SetCursorPos(254,504); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP,0,0, 0, 0); sleep(1); keybd_event(VK_LCONTROL, 0, 0, 0); keybd_event(Ord('V'), 0, 0, 0); keybd_event(Ord('V'), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); sleep(1); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); end; end; в том месте где выделил выскакивает ошибка "cannot open clipboard" погуглил ответов не нашел ![]() нужно скопировать выделенный текст, да и опера в это время подвисает Последний раз редактировалось ALexandr555, 18.08.2011 в 13:22. |
#2
|
||||
|
||||
![]() если создать пустое приложение:
Код:
unit Unit1; interface uses Clipbrd, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:=Clipboard.AsText; end; end. и Clipboard.Open; && Clipboard.Close; не нужно, ибо: Код:
function TClipboard.GetAsText: string; var Data: THandle; begin Open; Data := GetClipboardData(CF_TEXT); try if Data <> 0 then Result := PChar(GlobalLock(Data)) else Result := ''; finally if Data <> 0 then GlobalUnlock(Data); Close; end; end; Пишу программы за еду. __________________ |
#3
|
||||
|
||||
![]() да, в пустом ошибок нет
|
#4
|
||||
|
||||
![]() т.е. ошибка явно не в этом месте. ищи где еще с буфером работаешь.
Пишу программы за еду. __________________ |
#5
|
||||
|
||||
![]() у меня таймер в одном чате копирует обробатвает сообщение работа с буфером всего в двух местах
Код:
text:=Clipboard.AsText; и Clipboard.AsText:=ai(copy(text,7,length(text))); |
#6
|
||||
|
||||
![]() даже при ошибке он копирует в буфер, так что я сделал не красиво. //ну в прочем как всегда
Код:
try text:=Clipboard.AsText; except end; |
#7
|
||||
|
||||
![]() Цитата:
Код:
property AsText: string read GetAsText write SetAsText; Код:
function TClipboard.GetAsText: string; var Data: THandle; begin Open; Data := GetClipboardData(CF_TEXT); try if Data <> 0 then Result := PChar(GlobalLock(Data)) else Result := ''; finally if Data <> 0 then GlobalUnlock(Data); Close; end; end; Код:
procedure TClipboard.Open; begin if FOpenRefCount = 0 then begin FClipboardWindow := Application.Handle; if FClipboardWindow = 0 then begin {$IFDEF MSWINDOWS} FClipboardWindow := Classes.AllocateHWnd(MainWndProc); {$ENDIF} {$IFDEF LINUX} FClipboardWindow := WinUtils.AllocateHWnd(MainWndProc); {$ENDIF} FAllocated := True; end; if not OpenClipboard(FClipboardWindow) then raise Exception.CreateRes(@SCannotOpenClipboard); FEmptied := False; end; Inc(FOpenRefCount); end; Код:
SCannotOpenClipboard = 'Cannot open clipboard'; ну не может оно при таком эксепшене получить данные. Пишу программы за еду. __________________ |
#8
|
||||
|
||||
![]() да там точно так же,ну работает во всяком случае то что нужно.
|