Solved

NT4 Cant I stop / restict a user closing a program?

Posted on 2009-06-29
3
363 Views
Last Modified: 2013-12-28
Hi there,

I have an app on an NT4 box, if a user clicks the X top right corner to close, and not using the correct exit button in the app, the database corrupts.

Any Ideas?

Cheers
Anthony
0
Comment
Question by:antgodber
3 Comments
 
LVL 83

Accepted Solution

by:
oBdA earned 500 total points
ID: 24735756
You can compile the following script as "StartNoClose" using AutoIT (http://www.autoitscript.com/autoit3/downloads.shtml).
Then run your application through StartNoClose:
StartNoClose.exe "C:\Programe Files\Acme\acme.exe"
Note that you'll need the 3.2.12.1 version for this to work on NT4.
#cs

StartNoClose.au3

Skript for AutoIT (http://www.autoitscript.com/)

Starts the program passed as argument in the command line, and removes "Close" from the system menu;

this will disable the windows's "X" button as well, but it will not disable Alt-F4.

Posted at Experts Exchange by oBdA (http://www.experts-exchange.com/Q_24529579.html?cid=295)
 

Tested and compiled with AutoIT v3.2.12.1; use Aut2exe.exe to compile this script into an executable.

#ce

AutoItSetOption("TrayIconHide", 1)
 

Global Const $SC_CLOSE = 0xF060

Global Const $MF_BYCOMMAND = 0x0
 

Func _ParseCommandLine(ByRef $strRunProgram)

Local $i

	If $CmdLine[0] = 0 Then

		$Syntax = @ScriptName & @CRLF & _

			"Starts the program passed as argument and disables the system 'Close' menu." & @CRLF & _

			@CRLF & _

			"Syntax: " & _

			@ScriptName & " <Program>"

		MsgBox(0 + 32, @ScriptName & " Syntax", $Syntax)

		Exit(0)

	Else

		$strRunProgram = $CmdLineRaw

	EndIf

EndFunc
 

Func _GetHwndFromPID($PID)

; AutoIT code for _GetHwndFromPID by BrettF (http://www.autoitscript.com/forum/index.php?showuser=16404), 

; posted at http://www.autoitscript.com/forum/index.php?showtopic=85337&st=15&start=15

Local $hWnd

Local $stPID

Local $winlist2

    $hWnd = 0

    $stPID = DllStructCreate("int")

    Do

        $winlist2 = WinList()

        For $i = 1 To $winlist2[0][0]

            If $winlist2[$i][0] <> "" Then

                DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i][1], "ptr", DllStructGetPtr($stPID))

                If DllStructGetData($stPID, 1) = $PID Then

                    $hWnd = $winlist2[$i][1]

                    ExitLoop

                EndIf

            EndIf

        Next

        Sleep(100)

    Until $hWnd <> 0

    Return $hWnd

EndFunc ;==>_GetHwndFromPID
 

Func _RemoveClose($hWnd)

Local $ret

Local $hSystemMenu

	$ret = DllCall("user32.dll", "int_ptr", "GetSystemMenu", "hwnd", $hWnd, "int", 0)

	$hSystemMenu = $ret[0]

	DllCall("user32.dll", "int", "DeleteMenu", "hwnd", $hSystemMenu, "uint", $SC_CLOSE, "uint", $MF_BYCOMMAND)

EndFunc
 

Func _Main()

Local $intPid

Local $hWnd

Local $strRunProgram

	_ParseCommandLine($strRunProgram)

;	When doing test runs out of SciTE, set $strRunProgram to the program you want to start; $CmdLineRaw will contain arguments 

;	from the wrapper in addition to the arguments specified in the View menu.

;	$strRunProgram = "calc.exe"

	$intPid = Run($strRunProgram)

	If ($intPid = 0) Then

		MsgBox(0 + 48, "Error", "Program not found: " & @CRLF & $strRunProgram)

		Exit(1)

	Else

		$hWnd = _GetHwndFromPID($intPid)

		_RemoveClose($hWnd)

	EndIf

EndFunc
 

; ****************************************************************************************************

_Main()

; ****************************************************************************************************

Open in new window

0
 
LVL 74

Expert Comment

by:Glen Knight
ID: 34877590
This question has been classified as abandoned and is being closed as part of the Cleanup Program. See my comment at the end of the question for more details.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Our Group Policy work started with Small Business Server in 2000. Microsoft gave us an excellent OU and GPO model in subsequent SBS editions that utilized WMI filters, OU linking, and VBS scripts. These are some of experiences plus our spending a lo…
Today, still in the boom of Apple, PC's and products, nearly 50% of the computer users use Windows as graphical operating systems. If you are among those users who love windows, but are grappling to keep the system's hard drive optimized, then you s…
This video Micro Tutorial explains how to clone a hard drive using a commercial software product for Windows systems called Casper from Future Systems Solutions (FSS). Cloning makes an exact, complete copy of one hard disk drive (HDD) onto another d…
Windows 8 came with a dramatically different user interface known as Metro. Notably missing from that interface was a Start button and Start Menu. Microsoft responded to negative user feedback of the Metro interface, bringing back the Start button a…

911 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

20 Experts available now in Live!

Get 1:1 Help Now