HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Böngésző kontrol gyorsmenüjének letiltása


Példaprogram letöltése

9636 bájt

A TWebBrowser komponensnek köszönhetően az Internet Explorer képességeit beágyazhatjuk alkalmazásainkba. Mindössze egyetlen metódusát kell megfelelő paraméterekkel meghívnunk, hogy egy tetszőleges weblapot betöltsünk. A kontrolban is elérhető egy gyorsmenü, melynek pontjaival alapvető funkciók végezhetők el. Az alkalmazásainkba épített böngésző kontrol esetében ez a gyorsmenü letiltható, megakadályozandó az esetleges felhasználói beavatkozásokat. Cikkünkben bemutatjuk, hogyan lehetséges ez.

Az alkalmazás indulásakor betöltünk egy weblapot, és megjelenítjük azt a WebBrowser kontrolban. Ehhez a kontrol Navigate2 metódusát használjuk.
axWebBrowser1.Navigate("www.animare.hu",ref o,ref o,ref o,ref o);
A kontrol felületén kattintva a jobb egérgombbal elérhető, hogy egy gyorsmenü jelenjen meg, néhány funkciót elérhetővé téve a felhasználó számára.
A gyorsmenü letiltását úgy valósíthatjuk meg, hogy figyeljük a globális egéreseményeket, vagyis a jobboldali gomb lenyomásának eseményét. A megoldáshoz el kell végeznünk egy regisztrációt a SetWindowsHookEx metódussal, a TILTÁS gomb megnyomásakor.


hHook = Win32.SetWindowsHookEx(WH_MOUSE, HookProcedure, (IntPtr)0, AppDomain.GetCurrentThreadId());
A metódus visszaad egy kezelőt, melyet majd a figyelést megszüntető metódusnak adunk át paraméterként.
if (hHook != 0) Win32.UnhookWindowsHookEx(hHook);
A metódusok, és típusok deklarációi a Win32 osztályban találhatók. Ez utóbbi metódushívás az ENGEDÉLYEZÉS gomb meghívásakor történik meg.
A metódus paraméterként kap egy függvényt, melyben feldolgozzuk a kattintás eseményét. Ennek neve MouseHookProc.
Amikor a felhasználó a jobb gombbal a kattint valahol, akkor meghívjuk a GetClassName API metódust, mely visszaadja, hogy mely alkalmazás felületén történt ez a kattintás.
if (wParam.ToInt32() == WM_RBUTTONDOWN || wParam.ToInt32() == WM_RBUTTONUP)
{
  StringBuilder builder = new StringBuilder(256);   Win32.GetClassName(hs.hwnd,builder,builder.Capacity);
Amennyiben a kattintás a kontrol felületén történt, a betöltött HTML lapon, vagyis a kapott osztálynév azonos az „Internet Explorer_Server” karakterlánc-konstanssal, akkor a metódus visszatér a HC_SKIP értékkel, vagyis nem adódik tovább a figyelési információ a következő ciklusnak. Ekkor nem érvényesül az alapértelmezett viselkedés, vagyis a menü nem jelenik meg.
  if (builder.ToString() == "Internet Explorer_Server")
  {
    return HC_SKIP;
    ...
Ellenkező esetben meghívódik a CallNextHookEx metódus. Amennyiben nincs regisztrálva az egér viselkedésének figyelése, vagy a kattintás nem a figyelt osztályú ablakon történik, akkor az alapértelmezett viselkedés valósul meg, jelen esetben a menü megjelenik.
  return Win32.CallNextHookEx(hHook, nCode, wParam, lParam);

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 738. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |