Главная страница
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.03 c
9-1078136542
woolf/psycho
2004-03-01 13:22
2004.06.27
DirectPaly в DelphiX


4-1084820754
LORDMAXX
2004-05-17 23:05
2004.06.27
Перехват нажатия клавиш под Win2000


1-1086708278
matt
2004-06-08 19:24
2004.06.27
StringGrid


14-1086964902
Undert
2004-06-11 18:41
2004.06.27
Помогите с SQL запросом


14-1086462610
Девушка
2004-06-05 23:10
2004.06.27
Модераторы, удалите уже Ну как вам такое ? (Undert 05.06.04 23:0