Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-81491
Дмитрий К.
2002-05-03 16:58
2002.07.25
Как организовать опрос портов LPT1 и Com?


1-81303
Андрусь
2002-07-12 12:35
2002.07.25
закрытие главной формы MDI приложения


1-81363
invega
2002-07-13 20:03
2002.07.25
Как в Memo вставить текст при нажатии...


14-81447
Sergey_
2002-06-27 15:03
2002.07.25
Скажите пожалуйста, где я могу надыбать иконок для Delphi?


1-81292
EugenCFG
2002-07-11 21:16
2002.07.25
Изменив размер кнопоки, все остальные кнопки стали не стандар...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский