Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В CreateProcess задать координаты и размеры приложения


Анна ©   (2008-07-02 12:04:00) 

Добрый день!
Запускаю .exe из основной программы.
Можно ли заставить окно запускаемого приложения открыться в определенном месте экрана и определенного размера?

Перед CreateProcess(....)  делаю инициализацию структуры TStartupInfo

var
StInfo : TStartupInfo;
SeAttr : TSecurityAttributes;
ProcInfo : TProcessInformation;
ProcHandle : THandle;

begin

FillChar(StInfo,SizeOf(StInfo),0);
StInfo.cb := SizeOf(StInfo);
stInfo.dwFlags:=STARTF_USESIZE or STARTF_USEPOSITION;
stInfo.dwX:=700;
stInfo.dwY:=500;
stInfo.dwXSize:=400;
stInfo.dwYSize:=300
;

with SeAttr do begin
nLength:=SizeOf(SeAttr);
bInheritHandle:=true;
lpSecurityDescriptor:=nil;
end;

if CreateProcess(nil,
PChar('D:\small_prog\small_prog.exe'),
@SeAttr,@SeAttr,false,NORMAL_PRIORITY_CLASS,
nil,
PChar('c:\windows\'),
StInfo, ProcInfo) then begin
ProcHandle := ProcInfo.hProcess;
end
else begin
raise Exception.Create('ошибка запуска');
end;

Приложение запускается, но не "слушается" заданным  свойствам процесса. Что я делаю не так?


{RASkov}   (2008-07-02 16:14:00) [1]

> Анна

> 2. Работать будет только для приложений, которые делают
> вызов CreateWindow с CW_USEDEFAULT в параметрах, отвечающих
> за размер и положение создаваемого окна.

А, например, все приложения делфи с настройками(свойствами(Position)) гл. формы по умолчанию, размер и положение формы берутся из ресурса приложения и устанавливаются уже позже. Т.е. создаешь процесс, задаешь параметры гл. окну, а затем все эти твои настройки "затираются" значениями из ресурса...
Отсюда следует, что для большенства приложений на делфи(мало кто выставляет Position=poDefault) код из [0] бесполезен.


Palladin   (2008-07-02 13:13:00) [2]


> Анна   (02.07.08 13:00) [13]

в общем не важно, просто пойми для себя два факта
1. Твой код абсолютно правилен
2. Работать будет только для приложений, которые делают вызов CreateWindow с CW_USEDEFAULT в параметрах, отвечающих за размер и положение создаваемого окна.


Германн   (2008-07-02 13:10:00) [3]


> > {RASkov} ©   (02.07.08 12:38) [7]
>
> Не поняла. Создала (пустое) приложение, из второго  запускаю
> по кнопке пустую форму с poDefault...А откуда запускать
> : CreateProcess(nil,
> PChar('D:\small_prog\small_prog.exe'),
> @SeAttr,@SeAttr,false,NORMAL_PRIORITY_CLASS,
> nil,
> PChar('c:\windows\'),
> StInfo, ProcInfo) ;      ?
>

Цвет волос не имеет значения. :)


Анна   (2008-07-02 13:00:00) [4]


> Palladin ©   (02.07.08 12:37) [6]

Цвет волос не тот, что Вы думаете....
И вопрос задаю в начинающих, значит имею право что-то не понимать и рассчитывать на совет. Но все равно Вам спасибо за ответы.


> {RASkov} ©   (02.07.08 12:38) [7]

Не поняла. Создала (пустое) приложение, из второго  запускаю по кнопке пустую форму с poDefault...А откуда запускать : CreateProcess(nil,
PChar('D:\small_prog\small_prog.exe'),
@SeAttr,@SeAttr,false,NORMAL_PRIORITY_CLASS,
nil,
PChar('c:\windows\'),
StInfo, ProcInfo) ;      ?


Palladin   (2008-07-02 12:52:00) [5]


> Правильный-Вася   (02.07.08 12:50) [10]

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


Palladin   (2008-07-02 12:52:00) [6]

точнее не окно, а приложение


Правильный-Вася   (2008-07-02 12:50:00) [7]


> целевое приложение плевать хотело на передаваемые положение
> и размер

а консольное окно?


{RASkov}   (2008-07-02 12:47:00) [8]

> [8] Palladin ©   (02.07.08 12:43)
> а вообще смысла это никакого не имеет

Если только оба приложения "твои"(автора).... но и тут нужно "иметь на то какие-то свои соображения" :)
Но я согласен, что смысла в данном вопросе в общем - нет.


Palladin   (2008-07-02 12:43:00) [9]

а вообще смысла это никакого не имеет, потому что целевое приложение плевать хотело на передаваемые положение и размер :) но код верен


{RASkov}   (2008-07-02 12:38:00) [10]

т.е. у тебя должно быть два твоих приложений
одно: просто форма с Position=poDefault
второе: с кнопкой и кодом из [0] и запуском первого...


{RASkov}   (2008-07-02 12:37:00) [11]

> [4] Анна   (02.07.08 12:34)
> Главной форме назначила Position=poDefault
> запускаю блокнот:

:)
Да не блокнот запускай, а твое "новое" приложение с настройками главной формы из [3])


Palladin   (2008-07-02 12:37:00) [12]


> Анна   (02.07.08 12:34) [4]

у тебя какой цвет волос?

1. создай пустой проект
2. назначь главной форме пустого, вновьсозданногопроекта Position=poDefault
3. запусти вышеприведеннымметодом
4. посмотри и удивись


Анна   (2008-07-02 12:34:00) [13]


> Palladin ©   (02.07.08 12:23) [3]

Главной форме назначила Position=poDefault
запускаю блокнот:
PChar('c:\windows\notepad.exe'),
@SeAttr,@SeAttr,false,NORMAL_PRIORITY_CLASS,
nil,
PChar('c:\windows\'),
StInfo, ProcInfo)

Не слушается


Palladin   (2008-07-02 12:23:00) [14]


> Анна   (02.07.08 12:14) [2]

значит у тебя не стандартный блокнот

создай пустой проект, назначь главной форме Position=poDefault, запусти вышеприведенным методом и увидишь, что все прекрасно работает


Анна   (2008-07-02 12:14:00) [15]


> Правильный-Вася   (02.07.08 12:08) [1]

Попробовала. Блокнот тоже не слушается. :-((


Правильный-Вася   (2008-07-02 12:08:00) [16]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо