Как в cmd Windows 10 добавить окно, которое бы требовало закрытие командной строки

Также скажем как при выходе из Paint без сохранения, чтобы выводилось окно, на котором был вопрос "Вы уверены что хотите закрыть командную строку?". Или убрать возможность закрытия через крестик в правом верхнем углу, а закрытие только через команду?


Ответы (1 шт):

Автор решения: Daemon-5

Собственно решения давно существуют. Стоит лишь "загуглить" "disable close button". Я предпочел бы решение, исходя из имеющегося системного инструментария, - это Powershell.

Вот пример кода для запрета кнопки "закрыть" редактора MSpaint.

#Calling user32.dll methods for Windows and Menus
$MethodsCall = '
[DllImport("user32.dll")] public static extern long GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")] public static extern bool EnableMenuItem(long hMenuItem, long wIDEnableItem, long wEnable);
[DllImport("user32.dll")] public static extern long SetWindowLongPtr(long hWnd, long nIndex, long dwNewLong);
[DllImport("user32.dll")] public static extern bool EnableWindow(long hWnd, int bEnable);
'
 
#Create a new namespace for the Methods to be able to call them
Add-Type -MemberDefinition $MethodsCall -name NativeMethods -namespace Win32
 
$MF_DISABLED = 0x00000002L #Indicates that the menu item is disabled, but not grayed, so it cannot be selected.
#... http://msdn.microsoft.com/en-us/library/windows/desktop/ms647636(v=vs.85).aspx
 
$SC_CLOSE = 0xF060
#... http://msdn.microsoft.com/en-us/library/windows/desktop/ms646360(v=vs.85).aspx
 
 
#Get window handle of Paint process (Ensure there is only one Paint window opened)
$PSWindow = (Get-Process mspaint) | where {$_.MainWindowTitle -like "*Paint*"}
$hwnd = $PSWindow.MainWindowHandle
 
#Get System menu of windows handled
$hMenu = [Win32.NativeMethods]::GetSystemMenu($hwnd, 0)


#Disable X Button and window itself
[Win32.NativeMethods]::EnableMenuItem($hMenu, $SC_CLOSE, $MF_DISABLED) | Out-Null
→ Ссылка