Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.03;
Скачать: CL | DM;

Вниз

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

 
Анна   (2008-07-02 12:04) [0]

Добрый день!
Запускаю .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;

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


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

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


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


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

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


 
Palladin ©   (2008-07-02 12:23) [3]


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

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

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


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


> 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)

Не слушается


 
{RASkov} ©   (2008-07-02 12:37) [5]

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

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


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


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

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

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


 
{RASkov} ©   (2008-07-02 12:38) [7]

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


 
Palladin ©   (2008-07-02 12:43) [8]

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


 
{RASkov} ©   (2008-07-02 12:47) [9]

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

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


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


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

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


 
Palladin ©   (2008-07-02 12:52) [11]


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

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


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

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


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


> 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) ;      ?


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


> > {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 13:13) [15]


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

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


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

> Анна

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

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



Страницы: 1 вся ветка

Текущий архив: 2008.08.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
2-1214939991
Casper
2008-07-01 23:19
2008.08.03
прокрутка изображения в компоненте TImage


15-1213860884
БарЛог
2008-06-19 11:34
2008.08.03
Хранение сессии в кукисах


4-1193603602
rainbow_d
2007-10-28 23:33
2008.08.03
Получить содержимое заблокированного файла


2-1215332395
RealSwift
2008-07-06 12:19
2008.08.03
Thread creation error - Недостаточно памяти


15-1213366269
AEN
2008-06-13 18:11
2008.08.03
Ищу работу