Solved

Hide Application from TaskList/Bar

Posted on 1998-06-01
5
430 Views
Last Modified: 2010-04-06
Hello,

I'm calling a form in a DLL in which I want teh user to actually close before they can continue work in the forms in the EXE - sort of like showmodal.  I don't want the user to be able to either 1) press Alt+Tab or 2) click the exe form in the TaskBar to switch back to the application while the DLL form is still open.  I also DO NOT want to hide the exe form from the screen, just from the tasklist & taskbar.  I will also need to restore the taskbar icon & tasklist entries of the exe after the DLL form is closed.  I've tried a few differnt API calls that I got from a newsgroup, but none of them worked.  If you provide an API call, please add the correct syntax.

Thanks
0
Comment
Question by:d4jaj1
5 Comments
 
LVL 5

Expert Comment

by:ronit051397
ID: 1349560
0
 
LVL 4

Accepted Solution

by:
BoRiS earned 30 total points
ID: 1349561
d4jaj1

To hide the app from the taskbar use the ShowWindow API Call like so...

ShowWindow(Application.Handle, SW_HIDE) and to show replace SW_HIDE with SW_SHOW

to get the list of tasklist items use the GetNumTasks API Call and then check the structure to hide it from there...

if you need more info let me know

Later
BoRiS
0
 
LVL 3

Author Comment

by:d4jaj1
ID: 1349562
Yea, I need more.  I'm not trying to hide the application, just remove the taskbar/tasklist entries - so SW_HIDE won't work.  Also, I have no idea how to use the GetNumTasks API call to hide a to hide the application's icons once found.  Code examples?
0
 
LVL 4

Expert Comment

by:BoRiS
ID: 1349563
The only way to hide the application from the taskbar is to use showwindow

to hide it from the task list I used this code snippet
pass the const fisrt

const
  RSP_SIMPLE_SERVICE = 1;

then create the function

function RegisterServiceProcess(ProcessID, Flag: dWord):Word;
        stdcall; external 'kernel32.dll';

then call the function

RegisterServiceProcess(GetCurrentProcessID, RSP_SIMPLE_SERVICE);

Later
BoRiS
0
 

Expert Comment

by:ms99y
ID: 1349564
If I am not wrong, the only thing you want to do is, to make the main form activated
after the dll form is closed. otherwise make it impossible to activate the main form.

this is the DLL code;

DLL Project Source::

//**************DLL PROJECT SOURCE*************
library dllp;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  View-Project Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the DELPHIMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using DELPHIMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes,
  dll in 'dll.pas' {Form1};

exports
       CreateForminDll;

end.

//********THIS IS THE UNIT INCLUDED IN THE DLL***************************
unit dll;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


Procedure CreateFormInDll;stdcall;

implementation
{$R *.DFM}

Procedure CreateFormInDll;stdcall;
Begin
     Form1:= TForm1.Create(Application);
     Form1.ShowModal;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
      Form1.Close;
end;

end.
 
As you can see in the above code portions. I have included a form into dll project that consists of a label and a button.


//**********THIS IS THE UNIT OF THE CALLING PROGRAM*********
unit formdll1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
Procedure CreateFormInDll;stdcall; external 'h:\experts\formdll\dllp.dll'; // THIS PATH                         //AND DLL NAME MUST BE CHANGED..
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
     CreateFormInDll;    // Call to the exported function defined in the DLL, to show the                   //form in DLL
end;

end.


Unless the user press the button on the Dll's form, the calling program window cannot
be activated by clicking or by using the alt+tab .
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Printing problem 2 91
HTML text in the body of an email (delphi code) 12 112
Delphi: Connect to running MS Outlook 4 77
Slow Restore if incremental backups using RDiff.exe 4 17
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…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, just open a new email message. In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
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…

815 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now