![]() |
Screenshot über Sockets als JPEG versenden
Hallo zusammen.
Ich möchte gerne ein Remote-Tool programmieren. Auf dem Client soll ein Screenshot gemacht werden, der dann in JPEG komprimiert wird, und dann per Clientsocket an den Server gesendet wird. Also den Screenshot mache ich mit:
Delphi-Quellcode:
Is so lang, da man den Cursor ja sehen soll!
function GetCursorInfo2: TCursorInfo;
var hWindow: HWND; pt: TPoint; pIconInfo: TIconInfo; dwThreadID, dwCurrentThreadID: DWORD; begin Result.hCursor := 0; ZeroMemory(@Result, SizeOf(Result)); // Find out which window owns the cursor if GetCursorPos(pt) then begin Result.ptScreenPos := pt; hWindow := WindowFromPoint(pt); if IsWindow(hWindow) then begin // Get the thread ID for the cursor owner. dwThreadID := GetWindowThreadProcessId(hWindow, nil); // Get the thread ID for the current thread dwCurrentThreadID := GetCurrentThreadId; // If the cursor owner is not us then we must attach to // the other thread in so that we can use GetCursor() to // return the correct hCursor if (dwCurrentThreadID <> dwThreadID) then begin if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then begin // Get the handle to the cursor Result.hCursor := GetCursor; AttachThreadInput(dwCurrentThreadID, dwThreadID, False); end; end else begin Result.hCursor := GetCursor; end; end; end; end; // 2. Capture the screen function CaptureScreen: TBitmap; var DC: HDC; ABitmap: TBitmap; MyCursor: TIcon; CursorInfo: TCursorInfo; IconInfo: TIconInfo; begin // Capture the Desktop screen DC := GetDC(GetDesktopWindow); ABitmap := TBitmap.Create; try ABitmap.Width := GetDeviceCaps(DC, HORZRES); ABitmap.Height := GetDeviceCaps(DC, VERTRES); // BitBlt on our bitmap BitBlt(ABitmap.Canvas.Handle, 0, 0, ABitmap.Width, ABitmap.Height, DC, 0, 0, SRCCOPY); // Create temp. Icon MyCursor := TIcon.Create; try // Retrieve Cursor info CursorInfo := GetCursorInfo2; if CursorInfo.hCursor <> 0 then begin MyCursor.Handle := CursorInfo.hCursor; // Get Hotspot information GetIconInfo(CursorInfo.hCursor, IconInfo); // Draw the Cursor on our bitmap ABitmap.Canvas.Draw(CursorInfo.ptScreenPos.X - IconInfo.xHotspot, CursorInfo.ptScreenPos.Y - IconInfo.yHotspot, MyCursor); end; finally // Clean up MyCursor.ReleaseHandle; MyCursor.Free; end; finally ReleaseDC(GetDesktopWindow, DC); end; Result := ABitmap; end; Nun kann ich das ganze ja in einem Image anzeigen lassen mit.
Delphi-Quellcode:
Nun soll das ganze aber in JPEG konvertiert werden und das fertige Bild in einen Stream (soll ja per ClientSocket verschickt werden)
Image1.Picture.Assign(CaptureScreen);
Hoffe ihr wisst, wie ich das anstelle :gruebel: PS: Danke schonmal für die Antworten :-D |
Re: Screenshot über Sockets als JPEG versenden
Hi,
benutze doch ![]() Edit: Merke gerade das GraphicEx kein JPG kann, aber es gibt ja noch andere gute Formate. PNG ist für Screenshots z.b. besser. MFG Chris. |
Re: Screenshot über Sockets als JPEG versenden
Wie mach ich das denn damit?
|
Re: Screenshot über Sockets als JPEG versenden
Wie wäre es mit der Unit "jpeg"?
|
Re: Screenshot über Sockets als JPEG versenden
GraphicEx musst du einfach nur einbiden und schon kannst du die Formate lesen. Ein TImage direkt in einen Stream speichern geht glaube ich nicht, du könntest es ja erst in eine Datei speichern und dann schicken.
|
Re: Screenshot über Sockets als JPEG versenden
Zitat:
|
Re: Screenshot über Sockets als JPEG versenden
Und du könntest bitte Delphi-Tags verwenden. Danke!
MfG Florian :hi: |
Re: Screenshot über Sockets als JPEG versenden
Welchen unterschied bitte macht es ob ich
Code:
oder
CODE
Delphi-Quellcode:
nehme?
DELPHI
|
Re: Screenshot über Sockets als JPEG versenden
Mit Delphi Tags hat der Code Delphi Language Highlighting.
|
Re: Screenshot über Sockets als JPEG versenden
OT: Ahh...ok, werd sie ab jetzt immer benutzen :stupid:
Aber jetzt back to topic :arrow: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz