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

Вниз

Изменение скорости выпадания меню.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
3-81191
Дундук
2002-07-05 05:49
2002.07.25
Обработка клавиши TAB в DBGrid


1-81220
Sachem
2002-07-14 11:03
2002.07.25
Как узнать от какого компанента произошло событие


8-81385
shulc
2002-03-16 15:17
2002.07.25
USB


14-81461
MAxiMum
2002-06-25 16:21
2002.07.25
Поддержка Font.Charset


14-81477
SashaK
2002-06-28 20:20
2002.07.25
помогите написать снифер