Создать окно как дочернее в стороннем приложении

Я пытаюсь, чтобы моя форма C# была правильно добавлена ​​в стороннее приложение, у меня есть дескриптор элемента управления, к которому я хотел бы добавить форму, но просто не могу заставить его работать.

http://img693.imageshack.us/img693/8871/examplec.jpg

Я хотел бы создать свою форму так, чтобы она была частью MDIClient, обрабатывать 005E0ED6. Так же, как окно 01D7157D.

Это возможно? Если так, то можно ли это сделать в C#?

3 ответа

Решение

Как ты пытался это сделать? Вы пробовали SetParent? Посмотрите следующий вопрос Stackru, чтобы увидеть, помогает ли это. Встраивание HWND во внешний процесс с использованием SetParent

Этот код, кажется, работает:

    [DllImport("user32.dll")]
    private static extern
        IntPtr GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);

    [DllImport("user32.dll")]
    private static extern
        IntPtr AttachThreadInput(IntPtr idAttach, IntPtr idAttachTo, int fAttach);

        WinAPI.SetParent(this.Handle, otherappshandle);

        IntPtr otherprocessID = GetWindowThreadProcessId(otherappshandle, new IntPtr(0));
        IntPtr threadID = new IntPtr(AppDomain.GetCurrentThreadId());

        AttachThreadInput(threadID , otherprocessID , 1);

Удачи. Я пошел по этому пути и обнаружил, что есть достаточно мало раздражающих ошибок, которые я в конце концов бросил.

SetParent () и тому подобное помогут вам пройти часть пути, но есть куча маленьких ошибок, которые нужно посмотреть, насколько общая система (блокировка рассылки сообщений и т. Д.) Просто затрачивает время.

Особенно с WinForms, я настоятельно рекомендую просто запустить ваш пользовательский интерфейс в основном процессе (если вы можете), и если вы хотите изолировать свою обработку в другом процессе, сделайте это вместо этого.

Другие вопросы по тегам