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

Вниз

Просьба проверить код на Windows Vista   Найти похожие ветки 

 
tmp   (2007-09-22 14:20) [0]

У Вас работает этот код без пробела перед c:\New_text_file.txt ?

procedure TForm1.Button1Click(Sender: TObject);
var
 si: STARTUPINFO;
 pi: PROCESS_INFORMATION;
 WinDir: array[0..MAX_PATH] of Char;
begin
 ZeroMemory(@si, SizeOf(si));
 ZeroMemory(@pi, SizeOf(pi));
 si.cb := SizeOf(si);
 si.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEOFFFEEDBACK;
 si.wShowWindow := SW_SHOWNORMAL;
 if GetWindowsDirectory(WinDir,SizeOf(WinDir)) > 0 then
   if CreateProcess(PChar(WinDir + "\notepad.exe"), "c:\New_text_file.txt", nil,
     nil, False, 0, nil, nil, si, pi)
   then
     ShowMessage(IntToStr(Integer(CloseHandle(pi.hProcess))));  
end;


 
Denis_ ©   (2007-09-22 15:21) [1]

Да.


 
tmp   (2007-09-22 15:40) [2]


> Denis_ ©   (22.09.07 15:21) [1]
>
> Да.

Спасибо.
С Win9x до Xp SP2 - не пашет.


 
Юрий Зотов ©   (2007-09-22 16:32) [3]

Сорри, но код безобразный.
:-(


 
tmp   (2007-09-22 20:29) [4]


> Юрий Зотов ©   (22.09.07 16:32) [3]
>
> Сорри, но код безобразный.
> :-(
>

Я не профи, но вопрос был в другом: работает или нет. Кстати, а что не так?


 
Вася Правильный   (2007-09-22 20:40) [5]


>  без пробела перед c:\New_text_file.txt ?

пробел проверяем в константе или перед ней?


 
Anatoly Podgoretsky ©   (2007-09-22 22:16) [6]


> Кстати, а что не так?

Отсутствие обработки ошибок.


 
Юрий Зотов ©   (2007-09-22 22:40) [7]

> tmp   (22.09.07 20:29) [4]

> Кстати, а что не так?

1. Много лишнего.
2. Утечка ресурсов.
3. Нет обработки ошибок.

Сравните - этот код делает то же самое:

procedure TForm1.Button1Click(Sender: TObject);
var
 si: STARTUPINFO;
 pi: PROCESS_INFORMATION;
begin
 ZeroMemory(@si, SizeOf(si));
 si.cb := SizeOf(si);
 Win32CheckCreateProcess(nil, "notepad.exe c:\New_text_file.txt", nil, nil, False, 0, nil, nil, si, pi));
 CloseHandle(pi.hThread)
 CloseHandle(pi.hProcess)
end;


 
Юрий Зотов ©   (2007-09-22 22:42) [8]

Скобку пропустил:
Win32Check(...


 
tmp   (2007-09-22 23:42) [9]

Насчет обработки ошибок - это всего лишь тестовый код. Про CloseHandle(pi.hThread) забыл, а параметры lpApplicationName и lpCommandLine нужны для проверки, т.к функция без начального пробела перед параметром lpCommandLine почему-то не работает в Windows 9x/Me/XP/XPSP2, хотя в MSDN ничего не сказано на этот счет.


 
исследователь ©   (2007-09-23 00:37) [10]


> Юрий Зотов ©   (22.09.07 22:40) [7]

А почему зеромемори для pi не вызываете?


 
Anatoly Podgoretsky ©   (2007-09-23 11:38) [11]

> исследователь  (23.09.2007 00:37:10)  [10]

Из-за бессмысленности подобной операции.


 
исследователь ©   (2007-09-23 12:39) [12]

Значит, si обнулять не бессмысленно, а pi - бессмысленно? Обоснуйте.


 
Юрий Зотов ©   (2007-09-23 12:55) [13]

> tmp   (22.09.07 23:42) [9]

> функция без начального пробела перед параметром lpCommandLine
> почему-то не работает в Windows 9x/Me/XP/XPSP2

Я этот код использовал десятки раз - все работало. Похоже, причина в чем-то другом.

> исследователь ©   (23.09.07 12:39) [12]

Обнулять si нужно потому, что эта запись содержит ВХОДНЫЕ для CreateProcess данные. Если в них будет мусор, то CreateProcess или не сработает вообще, или сработает случайным образом (что еще хуже).

А pi содержит два поля и оба они заполняются внутри самой CreateProcess. Поэтому безразлично, что эти поля содержали перед вызовом - а если так, то операция их очистки лишняя.


 
Юрий Зотов ©   (2007-09-23 12:58) [14]

> pi содержит два поля

Сорри, не два, а четыре. Но это ни на что не влияет - все четыре все равно заполняет сама CreateProcess, поэтому чистить их перед вызовом бессмысленно.


 
исследователь ©   (2007-09-23 14:07) [15]

Спасибо.



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

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

Наверх




Память: 0.5 MB
Время: 0.022 c
2-1190968778
MM
2007-09-28 12:39
2007.10.21
счетчик


2-1190880438
F@T@L_Err0r
2007-09-27 12:07
2007.10.21
messagedlg


15-1190181663
oldman
2007-09-19 10:01
2007.10.21
Все программисты знают, что компьютер - железный глупый ящик


2-1190494437
Neux
2007-09-23 00:53
2007.10.21
Удаление одинаковых строк


15-1190168487
Slider007
2007-09-19 06:21
2007.10.21
С днем рождения ! 19 сентября 2007 среда