AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Taskbar Programm-Einträge auslesen

Ein Thema von erich.wanker · begonnen am 21. Mär 2012 · letzter Beitrag vom 21. Mär 2012
Antwort Antwort
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#1

Taskbar Programm-Einträge auslesen

  Alt 21. Mär 2012, 13:43
Hallo Leute,

mal ne kurze Frage:

Wie kann ich "nur diejenigen Anwendungen", die in der Taskbar dargestellt werden (Word, Excel,Outlook.. OHNE TrayiconApps) auslesen (Handle parent = Taskbar?) - die "normale" Handle Liste beinhaltet ja "alles"

via FindWindowEx(FindWindow('Shell_TrayWnd .. hab ich ja ein Handle auf die taskbar...

Vielen Dank

Erich
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Taskbar Programm-Einträge auslesen

  Alt 21. Mär 2012, 13:57
Hi,

hier gibts bischen source dazu:

http://de.narkive.com/2007/5/28/5099...bds-fehlt.html

oder du nimmst die TWindowList, das funzt auch sehr gut, das gibts hier ganz unten:
http://www.torry.net/authorsmore.php?id=1584

gruß

tom
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Taskbar Programm-Einträge auslesen

  Alt 21. Mär 2012, 14:00
Ich selbst habs mal wo mit twindowlist gemacht, ein popupmenü mit dem ich die items die in der taskleiste sind anzeige...

Delphi-Quellcode:



procedure TMainform.GetTasks;
label nxt;
var
  win1:TWindowList;
  tx1,tx2:Integer;
  upd1:Boolean;
  ts1,hwnd1,
  old_map: TStringList;
  PrgIcon : HIcon;
  XIcon : TIcon;
  IcOBMP, EcoBMP : TBitmap;
  NewMenuItem : TMenuitem;
  function sendmsg(Handle : HWND; Msg : Cardinal; wParam, lParam : Integer):Cardinal;
  begin
    SendMessageTimeout(Handle,Msg,wParam,lParam, SMTO_ABORTIFHUNG, 500, Result);
  end;
begin
  win1:=TWindowList.Create(self);
  ts1:=TStringList.Create;
  hwnd1:=TStringList.Create;
  old_map := TStringList.Create;
  try
    upd1:=false;
    for tx1:=0 to win1.Count-1 do begin
      if win1.Windows[tx1].IsVisible and win1.Windows[tx1].IsEnabled and IsMainAppWindow(win1.Windows[tx1].WinHandle) then begin
        hwnd1.Add(Inttostr(win1.Windows[tx1].WinHandle));
        ts1.Add(win1.Windows[tx1].WinCaption);
      end;
    end;
    if hwnd1.Count = 0 then begin
       win1.Free;
       ts1.free;
       hwnd1.Free;
       old_map.Free;
       Exit;
    end;
    for tx1:=0 to hwnd1.Count-1 do begin
    if old_map.IndexOf(hwnd1.Strings[tx1])=-1 then begin
      old_map.Clear;
      for tx2:=0 to hwnd1.Count -1 do old_map.Add(hwnd1.Strings[tx2]);
      upd1:=true;
      goto nxt;
      end;
    end;
    for tx1:=0 to old_map.Count-1 do begin
      if hwnd1.IndexOf(old_map.Strings[tx1])=-1 then begin
        old_map.Clear;
        for tx2:=0 to hwnd1.Count -1 do old_map.Add(hwnd1.Strings[tx2]);
      upd1:=true;
      goto nxt;
      end;
    end;
    for tx1:=0 to hwnd1.Count-1 do begin
      if not(hwnd1.Strings[tx1]=old_map.Strings[tx1]) then begin
        old_map.Clear;
        for tx2:=0 to hwnd1.Count -1 do old_map.Add(hwnd1.Strings[tx2]);
        upd1:=true;
        goto nxt;
      end;
    end;
    nxt:if upd1 then begin
       TasksMenu.Items.Clear;
       for tx1 := 0 to ts1.Count - 1 do begin
          NewMenuItem := TMenuitem.Create(TasksMenu);
          NewMenuItem.Caption := ts1.Strings[tx1];
          NewMenuItem.Tag := tx1;
          NewMenuItem.Hint := hwnd1.Strings[tx1];
          NewMenuItem.OnClick := TaskItemClick;
          NewMenuItem.Visible := True;
          NewMenuItem.ImageIndex := 25;
          XIcon := TIcon.Create;
          IcOBMP := TBitmap.Create;
          EcoBMP := TBitmap.Create;
          try
            PrgIcon := sendmsg(StrToInt(hwnd1.Strings[tx1]), WM_GETICON, ICON_SMALL2, 0);
            if PrgIcon = 0 then PrgIcon := sendmsg(StrToInt(hwnd1.Strings[tx1]), WM_GETICON, ICON_SMALL, 0);
            if PrgIcon <> 0 then begin
                XIcon.Handle := PrgIcon;
                IcOBMP.Width:= XIcon.Width;
                IcOBMP.Height:= XIcon.Height;
                IcOBMP.Canvas.Draw(0, 0, XIcon);
                EcoBMP.Height := 32;
                EcoBMP.Width := 32;
                EcoBMP.Canvas.StretchDraw(Rect(0,0,32,32),IcoBMP);
                EcoBMP.Height := 16;
                EcoBMP.Width := 16;
                try
                  NewMenuItem.Bitmap := EcOBMP;
                except

                end;
            end;
            NewMenuItem.ImageIndex := -1;
          finally
            XIcon.Free;
            IcOBMP.Free;
            EcoBMP.Free;
          end;
          TasksMenu.Items.Add(NewMenuItem);
       end;
    end;
  finally
    win1.Free;
    ts1.free;
    hwnd1.Free;
    old_map.Free;
  end;
end;
Tom
Just DO it
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz