|
|
Регистрация | << Правила форума >> | 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; |