![]() |
|
|
#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
|
||||
|
||||
|
да там точно так же,ну работает во всяком случае то что нужно.
|