![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
есть простейшее консольное приложение
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
windows,sysutils;
procedure CopyStringToClipboard(s: string);
var
hg: THandle;
P: PChar;
begin
hg:=GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, Length(S)+1);
P:=GlobalLock(hg);
StrPCopy(P, s);
GlobalUnlock(hg);
OpenClipboard(Application.Handle);
SetClipboardData(CF_TEXT, hg);
CloseClipboard;
GlobalFree(hg);
end;
begin
CopyStringToClipboard('lol');
Writeln('OK');
Readln;
end.но оно даже не компилируется, ругается на строку OpenClipboard(Application.Handle); то есть я понимаю тут к хендлу окна прикрепляем открытый буфер обмена... но как это исправить? Без добавления модуля Forms естесно, как узнать handle консольного окна?! p.s. код копирования в буфер взят из http://www.delphisources.ru/pages/fa...clipboard.html но всетаки заголовок той статьи не соответствует коду...... |
|
#2
|
||||
|
||||
|
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows;
procedure SetBuffer(Format: Word; var Buffer; Size: Integer);
var
Data: THandle;
DataPtr: Pointer;
begin
OpenClipboard(0);
try
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Buffer, DataPtr^, Size);
EmptyClipboard;
SetClipboardData(Format, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
CloseClipboard;
end;
end;
procedure SetAsText(const Value: string);
begin
SetBuffer(CF_TEXT, PChar(Value)^, Length(Value) + 1);
end;
begin
SetAsText('Hello Clipboard');
Writeln('OK');
Readln;
end.BOOL OpenClipboard( HWND hWndNewOwner // handle to window opening clipboard ); Parameters hWndNewOwner Identifies the window to be associated with the open clipboard. If this parameter is NULL, the open clipboard is associated with the current task. |
|
#3
|
||||
|
||||
|
о_0 извращение конечно получается, но за код спс
![]() |
|
#4
|
||||
|
||||
|
ну не знаю на сколько родной код
Код:
unit Clipbrd; Код:
TClipboard = class(TPersistent)
private
procedure SetAsText(const Value: string);
protected
procedure SetBuffer(Format: Word; var Buffer; Size: Integer);
procedure TClipboard.SetAsText(const Value: string);
begin
SetBuffer(CF_TEXT, PChar(Value)^, Length(Value) + 1);
end;
procedure TClipboard.SetBuffer(Format: Word; var Buffer; Size: Integer);
var
Data: THandle;
DataPtr: Pointer;
begin
Open;
try
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Buffer, DataPtr^, Size);
Adding;
SetClipboardData(Format, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
Close;
end;
end; |
|
#5
|
|||
|
|||
|
Код:
TClipboard = class(TPersistent)
private
procedure SetAsText(const Value: string);
protected
procedure SetBuffer(Format: Word; var Buffer; Size: Integer);
procedure TClipboard.SetAsText(const Value: string);
begin
SetBuffer(CF_TEXT, PChar(Value)^, Length(Value) + 1);
end;
procedure TClipboard.SetBuffer(Format: Word; var Buffer; Size: Integer);
var
Data: THandle;
DataPtr: Pointer;
begin
Open;
try
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Buffer, DataPtr^, Size);
Adding;
SetClipboardData(Format, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
Close;
end;
end;Последний раз редактировалось Admin, 18.11.2010 в 20:33. |
|
#6
|
|||
|
|||
|
свое окно
Handle:= GetForegroundWindow; |