Ich arbeite an einer C/S-Anwendung, Server in C++ und Client in C#, ich muss einige Informationen über aktuelle laufende Prozesse und verwandte Symbol senden. I Icon-Datei dank EnumWindows
mit diesem Code innerhalb des Rückrufs ...Get Bytes/char * von hIcon/hBitmap
// Get the window icon
HICON hIcon = (HICON)(::SendMessageW(hWnd, WM_GETICON, ICON_SMALL, 0));
if (hIcon == 0) {
// Alternative method. Get from the window class
hIcon = reinterpret_cast<HICON>(::GetClassLongPtrW(hWnd, GCLP_HICONSM));
}
// Alternative: get the first icon from the main module
if (hIcon == 0) {
hIcon = ::LoadIcon(GetModuleHandleW(0), MAKEINTRESOURCE(0));
}
// Alternative method. Use OS default icon
if (hIcon == 0) {
hIcon = ::LoadIcon(0, IDI_APPLICATION);
}
OK bekommen, jetzt habe ich die Icon und ich kann "print" es (nur für den Check) mit DrawIcon()
.
Meine Frage ist: Wie bekomme ich Bytes daraus? Ich brauche einen Puffer, um diese Daten an meinen Client zu senden und die gleichen Daten zu konvertieren, um das Symbol in einer Liste anzuzeigen (Icon + Prozessname). Also, ich brauche Bytes dieses Symbols/hIcon (oder Bitmap/hBitmap, etc.) (Natürlich brauche ich Hilfe für Server-Seite.)
Ich denke, es ist gut, das Symbol in einem Temp-Puffer zu kopieren bekomme Bytes, aber nichts funktioniert.
Jede Hilfe wäre willkommen.
EDIT:
@DavidHeffernan danke für die Antwort. Ich habe das gefunden: Converting-DDB-to-DIB durch StackOverflow's vergangenen Fragen (sorry wenn es falsch ist externe Links zu posten). Jetzt, mit GetDIBits()
Ich habe im fünften param die LPVOID lpvBits
, das heißt "Ein Zeiger auf einen Puffer, um die Bitmap-Daten msdn - GetDIBits()" zu empfangen Nun, wie soll ich von lpvBits
senden? Was ist mit Bitmap-Größe?
GetIconInfo. Sie werden jedoch etwas über GDI lernen müssen. –
Es liegt in Ihrer Verantwortung, einen Puffer für den Empfang der Bitmap-Daten zu reservieren. –