Форум: "WinAPI";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Вниз
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c