Форум: "Начинающим";
Текущий архив: 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