From: Glenn Smith Date: 2006-11-07T23:19:48+09:00 Subject: Re: The way to restrict a ruby program to just once occurrence on a windows box? 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 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