Never mind, solved it (unless anybody knows a better way).
It's a windows app, so:
require 'Win32API'
SW_HIDE = 0
WS_OVERLAPPED = 0
WS_DISABLED = 0x08000000
WS_MINIMIZED = 0x20000000
def already_running
#
# Not sure of any other way to do this.
# Create a window with the title "i4FileProcessorHiddenWindow".
When we come to run this program again,
# if there is already a window called
"i4FileProcessorHiddenWindow" then abort that instance.
# In this way, only one instance of the script should run.
#
findwindow = Win32API.new('user32','FindWindow', ['p','p'], 'L')
return true if findwindow.call("STATIC",
"i4FileProcessorHiddenWindow") != 0
createwindow = Win32API.new('user32', 'CreateWindowEx', ['l', 'p',
'p', 'l', 'i', 'i', 'i', 'i', 'l', 'l', 'l', 'P'], 'l')
dwStyle = (WS_DISABLED | WS_MINIMIZED)
cw = createwindow.call( WS_OVERLAPPED, 'STATIC',
'i4FileProcessorHiddenWindow', dwStyle, 0, 0, 0, 0, 0, 0, 0, 0 )
show = Win32API.new('user32', 'ShowWindow', ['L', 'L'], 'L')
show.call(cw, SW_HIDE)
return false
end
On 07/11/06, Glenn Smith <glenn.ruby@gmail.com> wrote:
> I'm rewriting a vb app to ruby (in about a quarter of the code!). If I
ran
> the same ruby program twice in parallel, the second instance should
exit.
>
> In VB6 I could do this:
>
> If App.PrevInstance Then Exit Sub
>
> Any ideas how this is done in ruby?
>
> Ta muchly
>
--
All the best
Glenn
Aylesbury, UK