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

Вниз

Запретить кнопку Close   Найти похожие ветки 

 
NorthMan ©   (2004-05-17 16:37) [0]

почему не работает такой код:
(требуется запретить кнопку close у блокнота)

procedure RunExe;
var SI:TStartupInfo;
   PI:TProcessInformation;
   FErrorString:PChar;
   ErrCod:Integer;
   hMenuHandle : HMENU;
begin
 FillChar(SI, SizeOf(SI), 0);
 SI.cb := SizeOf(SI);
 SI.dwFlags:=STARTF_USESHOWWINDOW;
 SI.wShowWindow:=SW_SHOWNORMAL; //SW_SHOWMINIMIZED;
 result:="";
 if CreateProcess(nil,PChar("notepad.exe"),nil,nil,False,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS or CREATE_SEPARATE_WOW_VDM,nil,nil,SI,PI) then
 begin
   hMenuHandle := GetSystemMenu(PI.hProcess, FALSE);
   if (hMenuHandle <> 0) then
     DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
 end;
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;

а так работает:

procedure TForm1.Button1Click(Sender: TObject);
var
hwndHandle : THANDLE;
hMenuHandle : HMENU;
begin
hwndHandle := FindWindow(nil, "Untitled - Notepad");
if (hwndHandle <> 0) then begin
hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;
end;

PI.hProcess и hwndHandle в данном случае разные?


 
Игорь Шевченко ©   (2004-05-17 17:04) [1]


> hMenuHandle := GetSystemMenu(PI.hProcess, FALSE);
>    if (hMenuHandle <> 0) then
>      DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);


?????????????????????????????????????????????????

Что-то очень новое в программировании для Windows


 
NAlexey ©   (2004-05-17 17:23) [2]


var
 WndH: THandle;

function EnumThreadWndProc(aHandle: THandle; lParam: Longint): Boolean; stdcall;
begin
 WndH := aHandle;
 Result := True;
end;

procedure RunExe;
var
 SI:TStartupInfo;
 PI:TProcessInformation;
 FErrorString:PChar;
 ErrCod:Integer;
 hMenuHandle: HMENU;
begin
 FillChar(SI, SizeOf(SI), 0);
 SI.cb := SizeOf(SI);
 SI.dwFlags:=STARTF_USESHOWWINDOW;
 SI.wShowWindow:=SW_SHOWNORMAL;
 if CreateProcess(nil, PChar("notepad.exe"), nil, nil, False,
   CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS or CREATE_SEPARATE_WOW_VDM,
   nil, nil, SI, PI)
 then begin
   WaitForInputIdle(PI.hProcess, INFINITE);
   EnumThreadWindows (PI.dwThreadId, @EnumThreadWndProc, 0);
   hMenuHandle := GetSystemMenu(WndH{PI.hProcess}, FALSE);
   if (hMenuHandle <> 0) then
     DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
 end;
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;


 
Klev   (2004-05-18 02:47) [3]

Мда...

function EnumThreadWndProc(aHandle: THandle; lParam: Longint): Boolean; stdcall;
begin
WndH := aHandle;
Result := True;
end;????????????
зачем???
Используй WndH:=Findwindow("Notepad",nil)


 
NAlexey ©   (2004-05-18 08:13) [4]

>Klev   (18.05.04 02:47) [3]
Да ладно, не сработает. А вдруг еще один NotePad открыт?
Кстати здесь я был неправ. Надо так:

function EnumThreadWndProc(aHandle: THandle; lParam: Longint): Boolean; stdcall;
begin
 WndH := aHandle;
 Result := False;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.049 c
4-1084945481
Kraj
2004-05-19 09:44
2004.06.27
Tray


1-1086946941
Silencer
2004-06-11 13:42
2004.06.27
Проблемы с TDBComboBox


3-1085987161
Valeri
2004-05-31 11:06
2004.06.27
select, Memo, Paradox


3-1085745467
half_litre
2004-05-28 15:57
2004.06.27
MultiThread доступ


4-1084895360
ДиМаньяк
2004-05-18 19:49
2004.06.27
Пограммирование мини АТС