form 안에 다른 응용프로그램을 띄울 때 테두리 제거하기

안녕하세요, form 안에 다른 응용 프로그램을 실행 할 때 질문입니다.

위 프로젝트에 있는 DLL을 활용하여, form 안에 다른 응용 프로그램을 실행하는 것 까지는 됐는데요.

문제는 이렇게 띄워진 프로그램에는 테두리(최소화, 최대화, 종료 버튼 있는)가 존재하게 되는데,

이 테두리의 경우 BorderStyle.None 속성을 활용해서 제가 수정을 할 수 있는지…

아니면 애초에 응용 프로그램 자체에서 테두리가 없는 상태가 되어야하는지 궁금합니다

1개의 좋아요

GPT 가 이렇게 하래여
테스트 해보니 진짜 없어짐…ㄷㄷㄷ

[DllImport("USER32.DLL")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("USER32.DLL")]
        public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

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

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

        public const int GWL_STYLE = -16;
        public const int WS_CAPTION = 0xC00000; // window with a title bar
        private void button2_Click(object sender, EventArgs e)
        {

            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));
                }
            }
        }
2개의 좋아요

G선생…!

헉… 저도 gtp 물어보니 저렇게 알려주던데요…
저걸 GitHub - bitzhuwei/AppContainer: Embed an exe application into the panel control. make it feels like you own this exe application.

이 프로젝트에도 적용해서 되나요??

위에 공유해주신 프로젝트 보니 SetWindowLong 쓰는 부분이 있네요.

4 // Remove border and whatnot
5 SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);

요거 대로 하셨음 안나올거 같은데

임베디드 될 앱의 핸들값만 알면 적용 될듯 합니다.

아마 C# 에서 실행 시키고 임베디드 할거니까 핸들값은 실행 시킬때 알수 있습니다.

답변에 써주신 코드가 적용이 안될 가능성도 있을까요?

쿠우 님이 첨부 해주신 깃소스 에도 아래 코드가 있네요

4 // Remove border and whatnot
5 SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);

이미 보더 없애는게 있는데 GPT에서 괜히 찾은듯 합니다.
친절 하게 핸들값 구해서 저 API 호출 해서 없애는게 있습니다.

DEEPL 깔아서 쓰세요… 중국어도 번역 잘 합니다.

감사합니다!!

적용이 안되는 프로그램도 있을 수 있을까요ㅠㅠ

해당 앱이 이미 보더가 없고 보더를 만들어 준 경우 라면 보더 감추는 API가 안먹을수는 있겠죠
근데 어떤 앱을 띄우실건데 안먹어여 ?
해당 API 는 표준 이라 웬만 해서는 다 감출것 같은데요

이런거 보면 아직 닷넷이 부족한게 보이네요.
언제쯤 되면 api 마샬링 없이 개발을 할수 있을지…

prasannavl/WinApi: A simple, direct, ultra-thin CLR library for high-performance Win32 Native Interop (github.com)
이런 게 있긴 하네요

테스트로 AnyDesk 라는 원격 프로그램으로 해봤는데요,안되서요

앗 참고해보겠습니다

링크는 code님이 win32 api 쓰기 번거롭다는 푸념에 대한 댓글이고요
윈도우 테두리 스타일은 WS_BORDER 외에 WS_EX_CLIENTEDGE, WS_EX_STATICEDGE 확장 스타일도 있어요
Spy++로 보면 알 수 있겠죠