Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];

Вниз

В 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
2-1214779198
Андрей_1
2008-06-30 02:39
2008.08.03
Exel в Paradox


2-1214955539
MN
2008-07-02 03:38
2008.08.03
изменения в Combobox


2-1214987265
Ega23
2008-07-02 12:27
2008.08.03
Избавиться от warning а в потомке TStringList


2-1214932835
Саша
2008-07-01 21:20
2008.08.03
Работа с реестром


15-1213908265
wl
2008-06-20 00:44
2008.08.03
дайте воздуху!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский