Admin |
Отправлено: 11.11.2003, 16:26 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Есть чужое окно — панель внизу рабочего стола (с кнопкой "Пуск")
Необходимо запретить всплавающее меню по нажатию правой
кнопкой мыши, причем минимизированные приложения
должны остаться и трей с часами тоже, и они должны быть
доступны.
Handle окна известно:
hWnd = FindWindow("Shell_TrayWnd", NULL);
То есть — как зная Handle окна запретить для него
всплывающее меню (popup-menu)
|
|
xTrim |
Отправлено: 11.11.2003, 17:01 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
Проще помоему изменить
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoTrayContextMenu (reg_dword)(1)
или Вам нужно именно по хэндлу?
|
|
Admin |
Отправлено: 11.11.2003, 18:38 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
У меня в Windows2000 там такого ключа нет
(NoTrayContextMenu)
желательно по хэндлу.
|
|
Admin |
Отправлено: 12.11.2003, 09:50 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Спасибо, xTrim
Именно то, что мне и нужно было, прописал
это значение — меню исчезло, как и надо было.
CODE |
const char *RegKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
bool isNotReg = false;
TRegistry* Reg = new TRegistry;
Reg->RootKey = HKEY_CURRENT_USER;
Reg->OpenKey(RegKey, false);
if(Reg->ValueExists("NoTrayContextMenu")){
int sr = Reg->ReadInteger("NoTrayContextMenu");
if(sr != 1) isNotReg = true;
}else isNotReg = true;
if(isNotReg){
Reg->CloseKey();
Reg->RootKey = HKEY_CURRENT_USER;
Reg->OpenKey(RegKey, true);
Reg->WriteInteger("NoTrayContextMenu",1);
Reg->CloseKey();
}
delete Reg;
if(isNotReg) // перезагрузить комп, чтоб изменения вступили в силу
ARebootExecute(Sender);
|
Был еще вариант разобраться с этим меню через хук,
CODE |
HWINEVENTHOOK wHook = NULL;
// PopupMenu
VOID CALLBACK WinEventProc(
HWINEVENTHOOK hWinEventHook,
DWORD event,
HWND hwnd,
LONG idObject,
LONG idChild,
DWORD dwEventThread,
DWORD dwmsEventTime )
{
if(!hwnd)return;
if(event==EVENT_SYSTEM_MENUPOPUPSTART) ShowWindow(hwnd, SW_HIDE);
}
void __fastcall TFMain::SpeedButton1Click(TObject *Sender)
{
if(wHook)UnhookWinEvent(wHook);
wHook=NULL;
wHook=SetWinEventHook(
EVENT_SYSTEM_MENUPOPUPSTART,
EVENT_SYSTEM_MENUPOPUPSTART,
// EVENT_SYSTEM_MENUPOPUPEND,
NULL, (WINEVENTPROC)WinEventProc,
0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
}
//---------------------------------------------------------------------------
void __fastcall TFMain::SpeedButton2Click(TObject *Sender)
{
if(wHook)UnhookWinEvent(wHook); wHook=NULL;
}
//---------------------------------------------------------------------------
void __fastcall TFMain::FormDestroy(TObject *Sender)
{
if(wHook) UnhookWinEvent(wHook); wHook=NULL;
}
//----------------------------------------------------
|
скрывать меню, как только оно появляется,
но это не то что мне надо было.
Через реестр — Ок.
Отредактировано Admin — 12/11/2003, 10:53
|
|
|