Ok, das war zwar nicht über die
API und nicht das was ich wissen wollte, aber trotzdem danke für die Antwort
.
Ich habe mir mal folgendes zusammengehackt (einfach die Funktionen, die an die TClipboard-Klasse gekapselt sind):
Delphi-Quellcode:
procedure SetBuffer(Format: Word; var Buffer; Size: Integer);
var
Data: THandle;
DataPtr: Pointer;
begin
OpenClipboard(hWnd); //hWnd ist das Fensterhandle
try
EmptyClipboard;
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Buffer, DataPtr^, Size);
SetClipboardData(Format, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
CloseClipboard;
end;
end;
procedure SetClipboardText(aText: PChar);
begin
SetBuffer(CF_TEXT, aText^, Length(aText) + 1);
end;
Nur funktioniert das nicht so 100 pro. Wenn ich beim Debugen im Editor Einfüge, klappts, doch bei allen anderen Programmen ist immer noch das alte Clipboard aktiv. Wie kommts?
/edit: Habe gerade den Fehler gefunden. Direkt nach OpenClipboard muss zuerst EmptyClipboard aufegerufen werden. Nähers in der
PSDK.