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

Вниз

ShellExecuteEx !   Найти похожие ветки 

 
psa247 ©   (2005-12-26 15:13) [0]

Проблема в том, что появляются лишние хендлы при вызове этой функции (при каждом)
Делаю так:

var Info_ : TShellExecuteInfo;
begin
  Info_.cbSize:= SizeOf(Info_);
  Info_.fMask:= SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS;
  Info_.wnd:= 0;
  Info_.lpVerb:= "properties";
  Info_.lpFile:= PChar(name);
  Info_.lpParameters:= nil;
  Info_.lpDirectory:= nil;
  Info_.nShow:= SW_SHOWNORMAL;
  Info_.hInstApp:= 0;
  Info_.lpIDList:= nil;
  ShellExecuteEx(@Info_);


 
Eraser ©   (2005-12-26 15:24) [1]


> psa247 ©   (26.12.05 15:13)

"лишние хендлы" - как это понимать?


 
psa247 ©   (2005-12-26 15:33) [2]


> Eraser ©  

В процесс-експлорере высмотрел постоянное увеличение незакрытых хендлов


 
Игорь Шевченко ©   (2005-12-26 16:38) [3]


> Проблема в том, что появляются лишние хендлы при вызове
> этой функции (при каждом)


CloseHandle(Info_.hProcess)


 
psa247 ©   (2005-12-26 17:35) [4]

Игорь, объясните, пожалуйста, как это будет правильно с учетом следующего:

Note ShellExecuteEx does not always return an hProcess, even if a process is launched as the result of the call. For example, an hProcess does not return when you use SEE_MASK_INVOKEIDLIST to invoke IContextMenu.


 
Игорь Шевченко ©   (2005-12-26 17:37) [5]

psa247 ©   (26.12.05 17:35) [4]

Правильно будет проверять, if Info_.hProcess <> 0 then

Но CloseHandle c 0 не вызывает побочных эффектов


 
psa247 ©   (2005-12-26 17:42) [6]

Благодарю.


 
Fay ©   (2005-12-27 10:02) [7]

2 Игорь Шевченко ©   (26.12.05 17:37) [5]

>> Но CloseHandle c 0 не вызывает побочных эффектов
У меня были случаи, когда "CloseHandle c 0" давал ошибку.
Выскакивало какое-то левое AV.


 
Игорь Шевченко ©   (2005-12-27 10:29) [8]

Fay ©   (27.12.05 10:02) [7]


> У меня были случаи, когда "CloseHandle c 0" давал ошибку.
>
> Выскакивало какое-то левое AV.


Ошибка была в другом месте.


 
Fay ©   (2005-12-27 10:40) [9]

2 Игорь Шевченко ©   (27.12.05 10:29) [8]
Нифига подобного. С поиска ошибок в другом месте я и начал. Не успокоился, пока не выделил минимальный код. Получилось что-то тривиальное, но на память не скажу, т.к. не писал его, а "высекал".


 
Игорь Шевченко ©   (2005-12-27 12:44) [10]

Fay ©   (27.12.05 10:40) [9]

Проверяй:

unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
begin
 for I:=0 to 1000 do
   CloseHandle(0);
end;

end.



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

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

Наверх




Память: 0.49 MB
Время: 0.03 c
2-1141300110
Tort
2006-03-02 14:48
2006.03.19
Работа с файлами


2-1141218554
Yozj
2006-03-01 16:09
2006.03.19
как конструктору вернуть NUL?


2-1140411056
TStas
2006-02-20 07:50
2006.03.19
Как от личить файл от папки при FindFirst


15-1141029035
syte_ser78
2006-02-27 11:30
2006.03.19
Как стать провайдером?


1-1139856622
Дубинка
2006-02-13 21:50
2006.03.19
Эмуляция клика