Login
`
Templates, Tools and Utilities
|
||
Add a comment to an Icetips ArticlePlease add your comments to this article.
Please note that you must provide both a name and a valid email address in order
for us to publish your comment. Comments are moderated and are not visible until they have been approved. Spam is never approved!
Back to article list Search Articles Add Comment Printer friendly Direct link Par2: Check for multiple instances of a program using DDE 1999-10-04 -- Richard Taylor 32-bit programs, unlike 16-bit programs, do not automatically default to a single running
instance. Users can easily initiate multiple program instances by just being a little
impatient and double-clicking the program icon twice. For some applications this is not
a problem, but for others it could be disastrous. Therefore, limiting Users to a single
running instance is necessary and actually pretty simple to accomplish. The trick here is
to make your program a DDE Server and have it look for an already running instance of
itself before fully loading.
You need to declare a global variable:
Channel LONG
And you need to prototype a Windows API call in the Inside the Global Map embed point:
MODULE('Windows API Call')
BringWindowToTop(LONG),BYTE,RAW,PASCAL,NAME('BringWindowToTop'),PROC
END
Then in the Program Setup embed point:
Channel = DDECLIENT('MYPROGRAM') !look for running instances of this program
IF Channel <> 0 ! and if found
DDEEXECUTE(Channel,'INFRONT') ! tell the running instance to take focus
DDECLOSE(Channel)
RETURN ! then get out
END
Then in the AppFrame's ThisWindow.Init method, after opening window embed point:
Channel = DDESERVER('MYPROGRAM') !set program as a DDE Server
Then in the AppFrame's ThisWindow.TakeEvent method, top of CYCLE/BREAK
support embed point:
IF EVENT() = Event:DDEexecute
IF DDEVALUE() = 'INFRONT' !tells it to bring itself to the front
AppFrame{PROP:Iconize} = FALSE
BringWindowToTop(AppFrame{PROP:Handle}) !and this does it
END
END
Today is November 21, 2024, 6:45 am This article has been viewed 35203 times.
|
|