Solved

List of taskbar 's runnig process?

Posted on 1998-09-28
10
292 Views
Last Modified: 2010-08-05
I want to know how to get only the taskbar 's process ?
I know that the windows folders have "CabinetWClass" classname (and delphi application are "Tapplication"),but the
applications seem not to have rules.
0
Comment
Question by:seb24
10 Comments
 
LVL 10

Expert Comment

by:viktornet
ID: 1341043
Hello! NOT SURE WHAT YA TALKIN' 'BOUT

REGARDS,
(@VIKTOR_IVANOV)^.NAME;
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1341044
You could use EnumWindows to enumerate all top level windows. Then you have to check each window. Only windows with owner=0 and parent=0 are shown as buttons in the taskbar.
Is that what you want?

Regards, Madshi.
0
 
LVL 4

Expert Comment

by:BoRiS
ID: 1341045
seb24

if yau are looking to get the taskbar use

var
  hw: HWND;
begin
  hw:= FindWindow('Shell_Traywnd', nil);

here is an example of getting the taskbar then show it or hide it...

procedure TForm1.Button1Click(Sender: TObject);
var
  hw: HWND;
begin
  hw:= FindWindow('Shell_Traywnd', nil);
  if hw <> 0 then
    if IsWindowVisible(hw) then
      ShowWindow(hw, SW_HIDE)
    else
      ShowWindow(hw, SW_SHOW);
end;

Later
BoRiS
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 20

Expert Comment

by:Madshi
ID: 1341046
seb24,

tell us a little bit more about what you want to do. Why did you reject Boris' answer? You should always write a comment when rejecting an answer, so we all know what didn't work or what it was that you didn't like.

Regards, Madshi.
0
 

Author Comment

by:seb24
ID: 1341047
I would known the processes who appear in the eplorer 's taskbar ,on the right of the "Start" button.
I tried the Madshi 's answer but I found again too much process.

ps:I'm on NT4 sp3.
////////////////////////////////////////////////////////////////
Unit seb;

Interface

Uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

Type
  TForm1 = Class(TForm)
    ListBox1 : TListBox;
    Button1 : TButton;
    Barre_des_tache : TTabControl;
    Button2 : TButton;
    Procedure Button1Click(Sender : TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  End;

Var
  Form1 : TForm1;
  ClassName : Array[0..79] Of char;
  str_TApplication,str_OleMainThreadWndClass, str_ClassName, str_DossierOuvert : String;
  h_Process : integer;
Implementation

{$R *.DFM}



Function EnumWindowsCallBack(HWND : hwnd; LPARAM : lParam) : bool stdcall;
Var
  capt : Array[0..79] Of char;

  lpWndClass : TWndClassA;
  tt, zz : variant;
Begin
  zz := 0;
  tt := 1;
  result := true;
  GetWindowText(HWND, capt, 79);
  GetClassName(HWND, ClassName, 79);

  GetClassInfo(HWND, ClassName, lpWndClass);
  h_Process := FindWindow(ClassName, capt);

  str_ClassName := ClassName;
  str_DossierOuvert := 'CabinetWClass';
  str_TApplication := 'TApplication';
  str_OleMainThreadWndClass:='OleMainThreadWndClass';

  If GetWindow(HWND, GW_OWNER)=zz  Then
           if GetParent(HWND)=zz then

    If Length(capt) > 0 Then
      if str_ClassName<>str_OleMainThreadWndClass then
      Begin

        Form1.Listbox1.items.add(capt + '     ' + Classname + '   ' + IntToStr(hwnd) + '   ' + IntToStr(h_Process));

        Form1.Barre_des_tache.Tabs.Add(capt);

      End;
End;

Procedure TForm1.Button1Click(Sender : TObject);
Var
  lpdevmode : tDeviceModeA;
  security : tSecurityAttributes;
  bureau : hdesk;
Begin
  Form1.Barre_des_tache.Tabs.Clear;
  Listbox1.Items.clear;

  lpdevmode.dmSize := SIZEOF(tdevicemodea);
  //lpdevmode.dmDisplayFrequency := 100;
  //lpdevmode.dmPelsWidth:=1024;
  //lpdevmode.dmPelsHeight:=768;
  //lpdevmode.dmFields :=DM_PELSWIDTH + DM_PELSHEIGHT +DM_DISPLAYFREQUENCY;

  security.nLength := sizeof(tsecurityattributes);
  //security.lpSecurityDescriptor:=a;
  //security.bInheritHandle:=false;


  bureau := createDesktop('Test',
    '',
    Nil, //@lpdevmode,
    DF_ALLOWOTHERACCOUNTHOOK + DESKTOP_SWITCHDESKTOP, DESKTOP_ENUMERATE,
    Nil); //@security);

  // EnumDesktopWindows(bureau, @enumwindowscallback, 0);
   //EnumThreadWindows(bureau,@enumwindowscallback,0);

  EnumWindows(@EnumWindowsCallBack, 0);
End;
End.
////////////////////////////////////////////////////////////////
0
 
LVL 10

Expert Comment

by:viktornet
ID: 1341048
Here is an example......

function GetTaskWindows(Handle : HWND; lparam : LPARAM) : Bool;stdcall;
var
  Name : array[0..MAX_PATH] of char;
begin
  if GetWindow(Handle, GW_CHILD) = 0 then begin
    GetWindowText(Handle, Name, SizeOf(Name));
    if StrPas(Name) <> '' then
      Form1.ListBox1.Items.Add(Name);
    Result := True;
  end;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  EnumWindows(@GetTaskWindows, 0);
end;

Regards,
Viktor Ivanov
0
 
LVL 10

Expert Comment

by:viktornet
ID: 1341049
This is a better code actually....

function GetTaskWindows(Handle : HWND; lparam : LPARAM) : Bool;stdcall;
var
  Name : array[0..MAX_PATH] of char;
begin
  if GetParent(Handle) = 0 then begin
    GetWindowText(Handle, Name, SizeOf(Name));
      if StrPas(Name) <> '' then
        Form1.ListBox1.Items.Add(Name);
    Result := True;
  end;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
  EnumWindows(@GetTaskWindows, 0);
end;

Regards,
Viktor Ivanov
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1341050
Viktor, sorry, not complete...  :-)

seb24, sorry, too. Have forgotten two things:

var taskWindows : string;

Function EnumWindowsCallBack(HWND : hwnd; LPARAM : lParam) : bool stdcall;
var s1   : string;
Begin
  result:=true;
  If (GetWindow(HWND,GW_OWNER)=0) and (GetParent(HWND)=0) and IsWindowVisible(HWND) and
     (GetWindowLong(HWND,GWL_EXSTYLE) and WS_EX_TOOLWINDOW=0) then begin
    SetLength(s1,MAX_PATH);
    GetWindowText(HWND,pchar(s1),MAX_PATH);
    s1:=string(pchar(s1));
    If s1<>'' Then taskWindows:=taskWindows+s1+#$D#$A;
  end;
End;

begin
  EnumWindows(@EnumWindowsCallBack, 0);
  MessageBox(0,pchar(taskWindows),'TaskWindows',0);
end;

Regards, Madshi.
0
 
LVL 10

Expert Comment

by:viktornet
ID: 1341051
Yup..Madshi has got the full procedure... Please reject ym answer and give 'im the points ;->

Regards,
Viktor Ivanov
0
 
LVL 20

Accepted Solution

by:
Madshi earned 50 total points
ID: 1341052
Thanx Viktor, seb24, is it working?

Regards, Madshi.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question