Hi all,
I am in search of a script to disable the windows close button on my database forms.
A tool like NoClose will do it, however it stays in the tray which means it can be disabled.
Also read it can be done via AutoKey, but that also would introduce an additional dependency.
Had a go at the SendMessage post in this forum but could not get it to work.
So I wonder if anyone has some script which would achieve this, the script being run via the shell command on the open forms event. On rare occasions there will be two forms open, but both will have the same title.
Hope this makes sense.
Thanks for your thoughts
How to disable the Windows Close button
Moderator: DosItHelp
Re: How to disable the Windows Close button
Can't be done with pure Batch. Certainly in a PowerShell script or a hybrid.
However, I'm wondering if it's your own application if you're talking about "my database forms". If so, it would be likely easier to create a window without close button from the beginning rather than disabling it using an additional script.
Steffen
However, I'm wondering if it's your own application if you're talking about "my database forms". If so, it would be likely easier to create a window without close button from the beginning rather than disabling it using an additional script.
Steffen
Re: How to disable the Windows Close button
Thank you Steffen,
Its a custom application in LibreOffice base, the forms just being ordinary writer forms. Assuming every Windows PC these days comes with Powershell would you know of any forum for this ?, Thks
Gerhard
Its a custom application in LibreOffice base, the forms just being ordinary writer forms. Assuming every Windows PC these days comes with Powershell would you know of any forum for this ?, Thks
Gerhard
Re: How to disable the Windows Close button
Gerhard,
I'm quite sure you can bind a macro to the open forms event. And I would be surprised if it wouldn't be possible to declare and invoke Win32 platform API functions in LibreOffice. Unfortunately I'm not familiar with LibreOffice macros and besides of that it would be off-topic in this forum. But I still believe that this is the way you should go for. Even in PowerShell you would need platform invocation. And the fact that you would have to search for the target window (while in a macro it would be known already) makes a script solution even worse.
The only thing I can do for you is providing a couple of hints.
- You need the window handle of your form. As to what I found in the internet, there seems to be something like a window.getWindowHandle() method in LibreOffice.
- GetSystemMenu() and DeleteMenu() might be the API functions to delete the close item in the context menu and to gray the X button
- SetWindowLong() or SetWindowLongPtr() (the latter is for 64 Bit processes) might be the API function to make the window a toolwindow which doesn't appear in the task bar.
I think eventually the functionality is quite similar to the xtopmost PowerShell macro that I once wrote.
This having said, there is a reason why there is usually no simple way to disable closing a window. It's been a core functionality of windows for ages and users might be upset if you disable it. In other words - The necessity for disabling the close button is a strong indicator for having a design failure in the program logic. At least think about writing some lines of code to define the behavior of your application when the close button is pressed.
Steffen
I'm quite sure you can bind a macro to the open forms event. And I would be surprised if it wouldn't be possible to declare and invoke Win32 platform API functions in LibreOffice. Unfortunately I'm not familiar with LibreOffice macros and besides of that it would be off-topic in this forum. But I still believe that this is the way you should go for. Even in PowerShell you would need platform invocation. And the fact that you would have to search for the target window (while in a macro it would be known already) makes a script solution even worse.
The only thing I can do for you is providing a couple of hints.
- You need the window handle of your form. As to what I found in the internet, there seems to be something like a window.getWindowHandle() method in LibreOffice.
- GetSystemMenu() and DeleteMenu() might be the API functions to delete the close item in the context menu and to gray the X button
- SetWindowLong() or SetWindowLongPtr() (the latter is for 64 Bit processes) might be the API function to make the window a toolwindow which doesn't appear in the task bar.
I think eventually the functionality is quite similar to the xtopmost PowerShell macro that I once wrote.
This having said, there is a reason why there is usually no simple way to disable closing a window. It's been a core functionality of windows for ages and users might be upset if you disable it. In other words - The necessity for disabling the close button is a strong indicator for having a design failure in the program logic. At least think about writing some lines of code to define the behavior of your application when the close button is pressed.
Steffen
Re: How to disable the Windows Close button
@aGerman
Hallo Steffen, Thanks for your time...
In principle I agree with your comments, however I am dealing with design flaws of LibreOffice Base which do need some work arounds.
On opening the database the database window containing all db objects can not be hidden by default. This is no good and there is no option like in MS Access to hide the code and the window.
What I can do is run a vbscript to make the container invisible aka
Only trouble if a user closes an open form he is back to the desktop, however the process is still running in the background and subsequently the db can not be restarted prior to killing the process.
I could fire up the vbscript from a batchfile first doing a task kill, trouble with LO here is, if you kill the process you not only shutdown base, but also spreadshhets and documents as well.
cheers
Gerhard
Hallo Steffen, Thanks for your time...
In principle I agree with your comments, however I am dealing with design flaws of LibreOffice Base which do need some work arounds.
On opening the database the database window containing all db objects can not be hidden by default. This is no good and there is no option like in MS Access to hide the code and the window.
What I can do is run a vbscript to make the container invisible aka
Code: Select all
Dim sFileName, sTitle
sFileName = "sCashFlow.odb"
sTitle = "ERROR"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")
If Not oFSO.FileExists(sFileName) Then
oShell.Popup sFileName & " - file not found", 10, sTitle, vbCritical + vbSystemModal
Wscript.Quit 1
End If
' run the file with quotes added 1/0 to toggle Base window visible or not
iRC = oShell.Run("""" & sFileName & """", 0, True)
' Return file error level when exiting script
Wscript.Quit iRC
I could fire up the vbscript from a batchfile first doing a task kill, trouble with LO here is, if you kill the process you not only shutdown base, but also spreadshhets and documents as well.
cheers
Gerhard
Re: How to disable the Windows Close button
We can continue this topic offline if you're interested. I'll send you my e-mail via PM.
Steffen
Steffen