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