| 
| 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
 |  
|  |  |