| 
| 
 | Вопрос # 5 384/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты! Помогите разобраться! Весь инет облазил, не нашел ответа. Проблема вот в чем: есть некое приложение, мне необходимо его запустить как дочернее в своей форме. Запустить то получается, (запускаем приложение, всавляем задержку, ищем окно по заголовку, вставляем в мое окно) но перед тем как оно помещается в мою форму, его окно мелькает на экране. Можно ли как то с помощью Createprocess запустить прогу сразу в моем окне, а не потом ее привязывать? Приложение:Переключить в обычный режим procedure TForm1.FormCreate(Sender: TObject);varh: hWnd;wnd:HWND;beginCreateprocess('Sys.exe','ipoffice_1.cfg',nil,nil,true,NORMAL_PRIORITY_CLASS ,nil,nil,si,p);;Delay (1000);h := FindWindow(nil, PChar('Sys'));      if h <> 0 then        begin          Windows.SetParent(h, Form1.Handle);          ShowWindow(h, SW_MAXIMIZE);        end;      Application.ProcessMessages;end; 
|  |   Вопрос задал: andreyfotograf (статус: Посетитель)Вопрос отправлен: 7 июня 2011, 11:37
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 8 июня 2011, 12:16; участников в обсуждении: 2. 
|   | min@y™ (статус: Доктор наук), 7 июня 2011, 11:47 [#1]:В функцию CreateProcess() передаётся структура типа STARTUPINFO. Вот такая: 
 typedef struct _STARTUPINFO { // si  
    DWORD   cb; 
    LPTSTR  lpReserved; 
    LPTSTR  lpDesktop; 
    LPTSTR  lpTitle; 
    DWORD   dwX; 
    DWORD   dwY; 
    DWORD   dwXSize; 
    DWORD   dwYSize; 
    DWORD   dwXCountChars; 
    DWORD   dwYCountChars; 
    DWORD   dwFillAttribute; 
    DWORD   dwFlags; 
    WORD    wShowWindow; 
    WORD    cbReserved2; 
    LPBYTE  lpReserved2; 
    HANDLE  hStdInput; 
    HANDLE  hStdOutput; 
    HANDLE  hStdError; 
} STARTUPINFO, *LPSTARTUPINFO;В этой структуре есть поле wShowWindow. Вот что пишет SDK:
 
 Цитата: wShowWindow
 
 Ignored unless dwFlags specifies STARTF_USESHOWWINDOW. The wshowWindow member can be any of the SW_ constants defined in WINUSER.H. For GUI processes, wShowWindow specifies the default value the first time ShowWindow is called. The nCmdShow parameter of ShowWindow is ignored. In subsequent calls to ShowWindow, the wShowWindow member is used if the nCmdShow parameter of ShowWindow is set to SW_SHOWDEFAULT.
 
 Делай выводы.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | andreyfotograf (статус: Посетитель), 7 июня 2011, 12:09 [#2]:А можите это в коде отобразить, если не трудно  , не особо врубаюсь... |  
|   | min@y™ (статус: Доктор наук), 7 июня 2011, 13:06 [#3]: Цитата (andreyfotograf): А можите это в коде отобразить, если не трудно   , не особо врубаюсь... Да некогда мне, работы дохрена. А чтобы это в коде изображать, придётся писать тестовую программу. Ну нафиг.
 Да чё там врубаться-то? Прогу можно запускать невидимой, если присвоить wShowWindow = SW_HIDE.
 Кстати, городить всё это можно и не через CreateProcess(), а через ShellExecute(). Там этот параметр передаётся прямо в функцию.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | andreyfotograf (статус: Посетитель), 7 июня 2011, 14:43 [#4]:Присваиваю wShowWindow = SW_HIDE и через  CreateProcess и через ShellExecute а она все равно видна, причем если параметр например SW_MAXIMIZE то окно распахивается, а если SW_HIDE или например SW_MINIMIZE то ничего не происходит... |  
|   | andreyfotograf (статус: Посетитель), 7 июня 2011, 14:50 [#5]:Оно как бы не реагирует на команды |  
|   | andreyfotograf (статус: Посетитель), 7 июня 2011, 17:19 [#6]:Если я правильно понял, читая форумы в инете, некоторые программы не ведуться на комманды типа SW_HIDE. Точнее если так: var
 wnd:HWND;
 begin
 wnd:=FindWindow(nil,'Resource Hacker');
 ShowWindow(wnd,SW_HIDE);
 То все прячется, но перед этим окно где-то секунду висит на экране, ведь FindWindow сразу его не находит, придотся вставлять задержку.
 Неужели нет способа?
 |  
|   | andreyfotograf (статус: Посетитель), 7 июня 2011, 17:19 [#7]:Кстате прогу которую надо сделать дочерней Resource Hacker |  
|   | andreyfotograf (статус: Посетитель), 8 июня 2011, 12:16 [#8]:Кому интересно проблема решена. В таймер прописал var
 wnd:HWND;
 begin
 wnd:=FindWindow(nil,'Resource Hacker');
 ShowWindow(wnd,SW_HIDE);
 end;
 Интервал 1
 Все прога не успевает появиться.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |