Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Now do I stop more than 1 copy of exe opening? 1

Status
Not open for further replies.

jjyxk845

Programmer
Aug 22, 2002
18
0
0
GG
Now do I stop more than 1 copy of exe opening? Ie when you double click on the shortcut a second time it maximizes the window rather than open a new one?
 
in the global includes add this:

Module('Windows API')
FindWindow(*LPCSTR,*LPCSTR),HWND,PASCAL,RAW,NAME('FindWindowA')
End

in the data add this :

FindWindowName CSTIRNG(50)
FindWindowHandle Unsigned

in the global embed program setup add this :

FindWindowName = 'Window title'

FindWindowHandle = FindWindow(,FindWindowName)
IF FindWindowHandle
MESSAGE('You cannot run more than one instance of ' & FindWindowName)
return
END
 
Thanks for replying But I have a query
when I try to do the following

in the global includes add this:

Module('Windows API')
FindWindow(*LPCSTR,*LPCSTR),HWND,PASCAL,RAW,NAME('FindWindowA')
End

I get the following error
illegal return type or attribute

I was not sure where to put the above line so i put it in the global map as i couldnt find the global includes only before or after global includes.

I'm using c5.5 and its full upto date with the patches.

Any ideas?

Many thanks
JJ
 
ooops,
sorry my fault !
you also have to declare LPCSTR LPSTR and HWND

LPSTR EQUATE(CSTRING)
LPCSTR EQUATE(CSTRING)
HANDLE EQUATE(UNSIGNED)
HWND EQUATE(HANDLE)

put that somewhere after the global includes.
 
Hi
Thanks for the quick reply

Ive added those but now its giving this error
Parameter cannot be ommited
at this line
FindWindowHandle = FindWindow(,FindWindowName)

Many thanks again
JJ
 
try this prototype for findwindow:

Module('winapi')
FindWindow(<*cstring>,*cstring),unsigned,pascal,raw,name('FindWindowA')
End

The first parameter is the name of the class, for a clarion application it will be something like ClaWin and a lot of figures... ie Clawin8388608Class1
The second parameter is the title of the window (in the title bar.)

if you pass a NULL to the calss name then windows then this api will look through all the classes.. otherwise it will search everywhere.

If it still does not work then try this other method, it loop through all the opened windows (visible or not) until it finds a clarion program, then checks that it is the one you are interrested in.

module('winapi')
GetClassName(UNSIGNED,*CSTRING,SIGNED),SIGNED,PASCAL,RAW,NAME('GetClassNameA')
GetWindowText(Long,Long,SIGNED),SIGNED,PASCAL,RAW,NAME('GetWindowTextA')
End

WindowHandle USHORT
WindowTitle CSTRING(256)
ClassName CSTRING(256)

FindWindowName = 'The title of of the window to close'

Loop WindowHandle = 1 To 0FFFFh
rlen# = GetWindowText(WindowHandle,Address(WindowTitle),200)
If rlen# Then
ret# = GetClassName(WindowHandle,ClassName,200)
If (Sub(ClassName,1,6) = 'ClaWin') And Clip(WindowTitle) = FindWindowName) Then
MESSAGE('You cannot run more than one instance of ' & FindWindowName)
Return
End
End
End

 
Many Thanks
After playing around with your code I've got it working
Thank you for all your help
JJ
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top