Форум: "Основная";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
ВнизИзменение скорости выпадания меню. Найти похожие ветки
← →
V.Turecky (2002-07-13 13:03) [0]Я увеличиваю скорость выпадания меню изменением значения параметра MenuShowDelay в ключе реестра:
HKEY_CURRENT_USER\Control Panel\desktop
"MenuShowDelay"="0"
Но после изменения данного значения, Windows его не видит, а видит только после перезагрузки. Как можно программно это исправить? Ведь утилита Tweak UI делает это без перезагрузки.
← →
olookin (2002-07-13 13:15) [1]Может быть, закрыть и открыть снова Explorer?
← →
V.Turecky (2002-07-13 13:19) [2]Как?
← →
olookin (2002-07-13 13:27) [3]Как закрыть? Убить процесс Explorer а затем запустить снова с помощью ShellExecute.
← →
Юрий Зотов (2002-07-13 13:30) [4]SystemParametersInfo, флаги SPI_GETMENUSHOWDELAY и SPI_SETMENUSHOWDELAY.
SPI_GETMENUSHOWDELAY:
Indicates the time, in milliseconds, that the system waits before displaying a shortcut menu when the mouse cursor is over a submenu item. The pvParam parameter must point to a DWORD variable that receives the time of the delay.
SPI_SETMENUSHOWDELAY:
Set uiParam to the time, in milliseconds, that the system waits before displaying a shortcut menu when the mouse cursor is over a submenu item.
Использование SystemParametersInfo см. в справке API. Эти флаги там могут быть не описаны, они появились позже. Но это неважно.
← →
olookin (2002-07-13 13:30) [5]procedure StopProcess(ProcessID,ThreadID: dword);
var prochandle,thrdhandle: THandle;
www: dword;
begin
if DebugActiveProcess(ProcessID) then begin
prochandle:=OpenProcess(PROCESS_ALL_ACCESS,true,ProcessID);
if prochandle<>0 then
if TerminateProcess(prochandle,www)<>false then
showmessage("Process "+selecteditem.Caption+" is successfully terminated");
CloseHandle(prochandle); end;
end;
procedure TForm1.Terminateprocess1Click(Sender: TObject);
var pe32: PROCESSENTRY32;
te32: THREADENTRY32;
num: integer;
procID,thrdID,www: dword;
hd: hwnd;
find,findthread: boolean;
procname: Ansistring;
begin
//здесь вместо selecteditem.Caption надо поместить IEXPLORE.EXE
Timer1.Enabled:=false;
find:=false; findthread:=false;
hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(hd,pe32); num:=0;
while (Process32Next(hd,pe32)) and (find=false) do begin
procname:=pe32.szExeFile;
if procname=selecteditem.Caption then begin
procID:=pe32.th32ProcessID; //Thread32First(hd,te32);
find:=true; end; num:=num+1; end;
if find then StopProcess(procID,thrdID);
Timer1.Enabled:=true;
end;
← →
olookin (2002-07-13 13:33) [6]У меня под Win2000 и работающем Explorer эта штучка вызвала сбой в программе (IExplore.exe) и он вырубился. Запустить же его можно легко, зная системный диск. По-моему, так.
← →
olookin (2002-07-13 13:34) [7]Я должен был сразу сказать, что слышал будто при перезапуске explore изменяется содержимое реестра. М. б. это не так...
← →
SPeller (2002-07-13 15:51) [8]Достаточно наверно закрыть обычным способом, как на Alt-Ctrl-Del. Он тогда сразу же загружается по-новой. Правда в 95-й такое вроде как не прокатывает. И ещё придётся вручную восстанавливать почти все иконки в трее.
← →
Юрий Зотов (2002-07-13 16:20) [9]Народ, ну что вы на эксплорере зациклились? Это обычное изменение системных установок, делается точно так же, как и лругие, в одну строку, простым вызовом SystemParamemersInfo. И ничего ни в какой реестр ручками писать не надо, само пропишется.
← →
V.Turecky (2002-07-14 15:28) [10]> Народ, ну что вы на эксплорере зациклились? Это обычное
> изменение системных установок, делается точно так же, как
> и лругие, в одну строку, простым вызовом SystemParamemersInfo.
> И ничего ни в какой реестр ручками писать не надо, само
> пропишется.
2Юрий Зотов
Можно поконкретнее. Примерчик бы. Может, где-то загрузить можно?
Заранее благодарен.
Кстати: Компилятор не може идентифицировать флаги SPI_GETMENUSHOWDELAY и SPI_SETMENUSHOWDELAY.
procedure TForm1.Button1Click(Sender: TObject);
begin
SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, 0, 0);
SystemParametersInfo(SPI_SETMENUSHOWDELAY, 0, 0, 0);
end;
← →
Юрий Зотов (2002-07-14 17:44) [11]Вызовы могут быть такими:
function GetMenuShowDelay: integer;
begin
if not SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, @Result, 0) then Result := -1
end;
function SetMenuShowDelay(Delay: DWORD): boolean;
begin
Result := SystemParametersInfo(SPI_SETMENUSHOWDELAY, Delay, nil, SPIF_SENDCHANGE)
end;
Что же касается констант, то да, в Дельфишном Windows.pas они не определены (странно, потому что они уже достаточно старые - в MSDN сказано, что они не поддерживаются только в Windows 95, а во всех более поздних уже работают).
Их числовые значения указаны в Platform SDK, в заголовочных файлах Windows. Сейчас их под рукой, увы, нет, поэтому могу присоветовать поискать эти константы в онлайновском MSDN, или в пакетах MS C++ и Visual Studio, или обратиться к народу.
НАРОД! У КОГО PLATFORM SDK, MS C++ ИЛИ VISUAL STUDIO ИНСТАЛЛИРОВАНЫ - ПОМОГИТЕ ЧЕЛОВЕКУ! НУЖНО СДЕЛАТЬ ПОИСК СТРОК "SPI_GETMENUSHOWDELAY" И "SPI_SETMENUSHOWDELAY" ПО ФАЙЛАМ *.h (скорее всего, WinUser.h) - ИНТЕРЕСУЮТ ЧИСЛОВЫЕ ЗНАЧЕНИЯ ЭТИХ КОНСТАНТ.
← →
Случайный прохожий (2002-07-14 20:10) [12]winuser.h
#define SPI_GETMENUSHOWDELAY 106
#define SPI_SETMENUSHOWDELAY 107
← →
Юрий Зотов (2002-07-14 20:30) [13]Вот и все проблемы, спасибо проходящему народу...
:о)
Осталось только объявить у себя эти константы. Можно обычным образом, а можно по образцу Windows.pas:
const
{$EXTERNALSYM SPI_GETMENUSHOWDELAY}
SPI_GETMENUSHOWDELAY = 106;
{$EXTERNALSYM SPI_SETMENUSHOWDELAY}
SPI_SETMENUSHOWDELAY = 107;
← →
V.Turecky (2002-07-14 21:22) [14]Всем огромное спасибо за помощь. Пока ничего не проверял, но, надеюсь, всё будет работать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c