Удаление Строки заголовка внешнего приложения с помощью c#

Мое приложение запускает другое внешнее приложение.

Я хочу удалить строку заголовка этого внешнего приложения, после того как это запустилось.

Действительно ли это выполнимо, и раз так как это было бы сделано?

На основе комментариев я использую рабочий код ниже

//Finds a window by class name
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

//Sets a window to be a child window of another window
[DllImport("USER32.DLL")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

//Sets window attributes
[DllImport("USER32.DLL")]
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

//Gets window attributes
[DllImport("USER32.DLL")]
public static extern int GetWindowLong(IntPtr hWnd, int nIndex);

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);


//assorted constants needed
public static int GWL_STYLE = -16;
public static int WS_CHILD = 0x40000000; //child window
public static int WS_BORDER = 0x00800000; //window with border
public static int WS_DLGFRAME = 0x00400000; //window with double border but no title
public static int WS_CAPTION = WS_BORDER | WS_DLGFRAME; //window with a title bar

public void WindowsReStyle()
{
    Process[] Procs = Process.GetProcesses();
    foreach (Process proc in Procs)
    {
        if (proc.ProcessName.StartsWith("notepad"))
        {
            IntPtr pFoundWindow = proc.MainWindowHandle;
            int style = GetWindowLong(pFoundWindow, GWL_STYLE);
            SetWindowLong(pFoundWindow, GWL_STYLE, (style & ~WS_CAPTION));
        }
    }
}
13
задан Fraser 13 August 2013 в 21:55
поделиться

3 ответа

Не нужно ничего вводить, вы можете просто изменить биты стиля Windows, используя API, например это работает для Блокнота, но YMMV в зависимости от приложения, с которым вы играете.

alt text

//Get current style
lCurStyle = GetWindowLong(hwnd, GWL_STYLE)

//remove titlebar elements
lCurStyle = lCurStyle And Not WS_CAPTION
lCurStyle = lCurStyle And Not WS_SYSMENU
lCurStyle = lCurStyle And Not WS_THICKFRAME
lCurStyle = lCurStyle And Not WS_MINIMIZE
lCurStyle = lCurStyle And Not WS_MAXIMIZEBOX

//apply new style
SetWindowLong hwnd, GWL_STYLE, lCurStyle

//reapply a 3d border
lCurStyle = GetWindowLong(hwnd, GWL_EXSTYLE)

SetWindowLong hwnd, GWL_EXSTYLE, lCurStyle Or WS_EX_DLGMODALFRAME

//redraw
SetWindowPos hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_FRAMECHANGED
9
ответ дан 1 December 2019 в 22:22
поделиться

В общем, вы не можете этого сделать, если нет прямой поддержки in запускаемым вами приложением (например, если для этого требуется командная строка переключатель для удаления строки заголовка).

Вы можете управлять только тем, что уже присутствует в классе ProcessStartInfo (т. Е. Открывать новое окно, запускать свертывание / разворачивание и т. Д.).

1
ответ дан 1 December 2019 в 22:22
поделиться

Это очень похоже на ранее заданный вопрос, и я почти уверен, что вы не можете этого сделать. (или, если вы можете, вам нужно покопаться в Windows API, что может оказаться сложной задачей, в зависимости от вашего опыта.)

Как добавить кнопку в строку заголовка окна других приложений (XP / Vista)

1
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: