![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В 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]приложение может само при старте менять, как ему вздумается, эти значения
попробуй на блокноте, он должен слушаться