Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CreateProcess, Как заполнить STARTUPINFO? 
:(
    Опции темы
RideX
Дата 27.9.2004, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



Нужно запустить стороннюю программу с помощью CreateProcess, задав с помощью параметров STARTUPINFO положение и размер окна, но что-то не выходит. Что здесь не так? Вот код:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 si: TStartupInfo;
 p:  TprocessInformation;
begin
FillChar(si, SizeOf(si), 0);
with si do begin
 cb := SizeOf(si);
 dwX := 0;
 dwY := 0;
 dwXSize := 100;
 dwYSize := 50;
 dwFlags := STARTF_USESHOWWINDOW + STARTF_USESIZE + STARTF_USEPOSITION;
 wShowWindow := SW_SHOWNOACTIVATE;
end;

Application.Minimize;
CreateProcess(nil,'notepad.exe', nil, nil, False, CREATE_DEFAULT_ERROR_MODE, nil, nil, si, p);
Waitforsingleobject(p.hProcess, INFINITE);
Application.Restore;
end;

PM   Вверх
bear
Дата 27.9.2004, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 15.6.2004

Репутация: нет
Всего: нет



Попробуй лучше WinExexc и SetWindowPos.
PM MAIL   Вверх
RideX
Дата 27.9.2004, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



bear
WinExec устаревшая ф-ция, оставленная только для совместимости, в Win32 нужно использовать CreateProcess. В дополнение к сказанному тобой, эту задачу также можно решить и через ShellExecute, MoveWindow, ShellExecuteEx, но надо разобраться, как это сделать с помощью CreateProcess. Кто-нибудь может что-то подсказать?
PM   Вверх
DonPager
Дата 27.9.2004, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



RideX
вот тебе функция которая обернёт CreateProcess в удобную форму
Код

function ExecIt(const FileName,Params: ShortString;const WinState: Word): boolean; export;
var
 StartInfo: TStartupInfo;
 ProcInfo: TProcessInformation;
 CmdLine: ShortString;
begin
 CmdLine := '"' + Filename + '" ' + Params;
 FillChar(StartInfo, SizeOf(StartInfo), #0);
 with StartInfo do
  begin
   cb := SizeOf(StartInfo);
   dwFlags := STARTF_USESHOWWINDOW;
   wShowWindow := WinState;
  end;
 Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                         CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                         PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
end;


Это сообщение отредактировал(а) DonPager - 27.9.2004, 12:30


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
RideX
Дата 27.9.2004, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



DonPager
Спасибо за совет smile.gif Дело в том, что в StartupInfo есть такие параметры как dwX: DWORD; dwY: DWORD; dwXSize: DWORD; dwYSize: DWORD; они служат для задания параметров положения и размера окна запускаемого приложения, именно их я и хочу задействовать, но почему-то не получается sad.gif В твоём примере этого сделать нельзя, а wShowWindow у меня работает нормально... Тем не менее, ещё раз спасибо.
PM   Вверх
DonPager
Дата 27.9.2004, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



RideX ...точно не скажу но просто попробуй использовать прямой вызов запуска процесса из MSDN(но помни там передаются указатели а не переменные)
там примерно 5 похожих процедур с разными дополнительными фичами

З.Ы. и в твоём случае попробуй задавать поле cb в конце определения;

Это сообщение отредактировал(а) DonPager - 27.9.2004, 12:59


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
RideX
Дата 27.9.2004, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



Цитата(DonPager @ 27.9.2004, 12:56)
попробуй задавать поле cb в конце определения

Попробовал, не то...
PM   Вверх
p0s0l
Дата 27.9.2004, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



В MSDN сказано про эти параметры:
Цитата
dwX
If dwFlags specifies STARTF_USEPOSITION, this member is the x offset of the upper left corner of a window if a new window is created, in pixels. Otherwise, this member is ignored.
The offset is from the upper left corner of the screen. For GUI processes, the specified position is used the first time the new process calls CreateWindow to create an overlapped window if the x parameter of CreateWindow is CW_USEDEFAULT.
(главное - выделено, а еще главнее - подчёркнуто)
Про dwY, dwXSize, dwYSize - то же самое...


--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 27.9.2004, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Мой совет - ждать появления первого окна, и менять у него параметры


--------------------
С уважением, г-н Посол.
PM   Вверх
RideX
Дата 28.9.2004, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 2
Всего: 7



p0s0l
Всё понятно, спасибо biggrin.gif
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.