hm,
wie mir grade auffällt, schlägt die abfrage manchmal fehlt, dann liefert die funktion, welche das
handle der icons liefern soll, den wert 0, und die bitmap wird weiß ... kann des an dem ICON_BIG bzw. ICON_SMALL liegen?
MfG - Ghost007
[EDIT]
hier der erweiterte code um das letzte ermittelte icon als bitmap darzustellen
Delphi-Quellcode:
function EnumWin(hWnd: THandle; FirstWnd: PCardinal): Boolean; stdcall;
var
WinText: AnsiString;
ProcId : cardinal;
icon : Ticon;
bmp : Tbitmap;
begin
Icon := TIcon.Create;
bmp := TBitmap.Create;
Result := True;
if IsWindowVisible(hwnd) then
begin
if (GetWindowLong(hwnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) <> 0 then
hwnd:= GetWindowLong(hWnd, GWL_HWNDPARENT);
ProcId := GetWindowThreadProcessID(hWnd, nil);
SetLength(WinText, SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0));
SendMessage(hWnd, WM_GETTEXT, Length(WinText) + 1, integer(WinText));
if (length(WinText) > 0) and (FirstWnd^ <> ProcId) then
begin
Form1.ListBox1.Items.Add(WinText);
Form1.handle.Items.Add(IntToStr(hWnd));
Form1.ListBox2.Items.Add(IntToStr(SendMessage(hWnd, WM_GETICON, ICON_BIG, 0)));
icon.Handle:=SendMessage(hWnd, WM_GETICON, ICON_BIG, 0);
if icon.Handle <> 0 then
begin
Form1.ImageList1.AddIcon(icon);
bmp.Assign(NIL); //löschen
bmp.height := icon.height;
bmp.width := icon.width;
bmp.Canvas.Draw(0,0,icon);
Form1.Image2.Picture.Bitmap:=bmp;
end;
icon.Free;
end;
FirstWnd^ := ProcId;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FirstWnd : cardinal;
begin
ListBox1.Clear;
EnumWindows(@EnumWin, cardinal(@FirstWnd));
end;
Wie kann es nun aber sein, das manche Applicationen als iconhandle 0 zurück liefern?
Ich hab schon getestet, bei den applicationen (z.B. Winamp) ist es egal ob man ICON_BIG oder ICON_SMALL aufruft ...
[/EDIT]
[EDIT]
im anhang sieht man die ausgabe des obigen codes ... wie kann es sein, das ich als icon
handle 0 bekomme ... bzw. wie komm ich dann an die icons?
[/EDIT]