I open an Excel (2003) application from c#. I want that user will not be able to change it's size (it's opened maximized), therefore that the system menu and minimize/maximize buttons would be disabled or even hidden. Thanks for any help!
Here's the code:
internal static class Utilities
{
[DllImport("user32.dll")]
internal extern static int SetWindowLong(IntPtr hwnd, int index, int value);
[DllImport("user32.dll")]
internal extern static int GetWindowLong(IntPtr hwnd, int index);
internal static void HideMinimizeAndMaximizeButtons(IntPtr hwnd)
{
const int GWL_STYLE = -16;
const long WS_MINIMIZEBOX = 0x00020000L;
const long WS_MAXIMIZEBOX = 0x00010000L;
long value = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, (int)(value & ~WS_MINIMIZEBOX & ~WS_MAXIMIZEBOX));
}
}
As stated in Daniel Mošmondor's answer you need to find the Excel Windows handle, then just call the above code in this way:
Utilities.HideMinimizeAndMaximizeButtons(windowHandle);
N.B.
Maybe, depending on how you start the Excel process, you could already have the process or the window handle, so just use it without calling Process.GetProcessesByName(...) / Process.GetProcesses()
EDIT:
If you start your Excel application with:
ApplicationClass _excel = new ApplicationClass();
Just use the following code:
IntPtr windowHandle = new IntPtr(_excel.Hwnd);
Utilities.HideMinimizeAndMaximizeButtons(windowHandle);
For testing, first create the app that will be used as a Excel mock just to see that you are doing it right from the 'other' app point of view. After everything works, switch to real Excel.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With