Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

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

Posted on 2009-06-29
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?

Question by:antgodber
LVL 84

Accepted Solution

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 version for this to work on NT4.
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.
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)
		$strRunProgram = $CmdLineRaw
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")
        $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]
    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)
Func _Main()
Local $intPid
Local $hWnd
Local $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)
		$hWnd = _GetHwndFromPID($intPid)
; ****************************************************************************************************
; ****************************************************************************************************

Open in new window

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.

Featured Post

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Remote control Windows CE 7 94
Reinstall Windows 10 3 26
Picture size 4 35
How do I generate a CSR on our root CA server? 1 24
Storage devices are generally used to save the data or sometime transfer the data from one computer system to another system. However, sometimes user accidentally erased their important data from the Storage devices. Users have to know how data reco…
This is an article about Leadership and accepting and adapting to new challenges. It focuses mostly on upgrading to Windows 10.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
This Micro Tutorial will give you a basic overview of Windows DVD Burner through its features and interface. This will be demonstrated using Windows 7 operating system.

856 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