?
Solved

Disabling Menu Items in IE using Browser Helper Objects

Posted on 2002-05-25
11
Medium Priority
?
275 Views
Last Modified: 2008-02-26
Hi! I have developed a browser helper objects to block certain keyboard actions and the mouse actions on the browser. I want to disable some of the menu options like print, save, and stuff like that. I have implemented the IDocHostUIHandler Interface and has implemented hte ShowUI method as well. How do I proceed now....
0
Comment
Question by:salur
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +3
11 Comments
 
LVL 9

Accepted Solution

by:
BeyondWu earned 2000 total points
ID: 7036464
I think you can subclass the IE mainframe. Then you can catch WM_INITMENU or WM_INITMENUPOPUP, the these handler you can disable/enable the menu item.
0
 

Author Comment

by:salur
ID: 7036526
Thanks for your comment. Are you sure its going to work.
0
 
LVL 9

Expert Comment

by:BeyondWu
ID: 7037953
I'm not very sure:o( but you can try it:o)
Maybe you have implement the IObjectWithSite interface,
then you can get the hwnd handle of the ie in the setsite function.
IObjectWithSite::SetSite(IUnknown* punkSite)
{
    if(punkSite)
    {
      //Get the parent window.
      IOleWindow  *pOleWindow;
      m_hwndParent = NULL;  // this is hwnd of ie.
      if(SUCCEEDED(punkSite->QueryInterface(IID_IOleWindow, (LPVOID*)&pOleWindow)))
      {
         pOleWindow->GetWindow(&m_hwndParent);
         pOleWindow->Release();
      }
      // ...subclass it...
      g_oldWndProc = (WNDPROC)SetWindowLong(m_hwndParent, GWL_WNDPROC, (LPARAM)(WNDPROC)NewExplorerProc);
      // ...
}

You can try it.
Good Luck.
         
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:salur
ID: 7038330
Hi! Thanks a lot for your comments. I shall try it out and get back to you in this regard.
0
 

Expert Comment

by:GregToombs
ID: 7056102
I tried experimenting myself, and found only one way to intercept the messages of the Internet Explorer window. If you provide me with your email address I will send you the source code I've written to disable or enable any menu in Internet Explorer.
My email address is gregtoombs@yahoo.com
Thanks, it's been an interesting learning experience.

-Greg
0
 

Author Comment

by:salur
ID: 7058870
Hi!,,

Beyondwu-----------I appreciate your efforts, thanks for the code snippet....I shall try it out...

GregToombs----I am eagerly waiting to see the source.....

THanks & Regards,
Sandy
0
 

Expert Comment

by:GregToombs
ID: 7060437
The method I used is a little bit complex, so I don't know if it'll suit your needs or not.
I first tried subclassing the IE window, as BeyondWu suggested, but then I found out that Windows doesn't support subclassing windows that aren't owned by the caller process.
I found out how to get the messages: using hooks. One has to write a .DLL containing a function similar in nature to WindowProc. Every time the external window receives a message, it goes through the hook in your DLL first.
Then, you need to write another program, a .EXE, that loads your DLL and associates its hook with IE.

What I think I'll do is, to make matters simpler for you, I'll write the DLL. It'll have a generic initialization function that asks for the target HWND and a callback function pointer to a standard WindowProc that -you- provide.

How about, for exports for the hook dll,

BOOL HookInitialize(HWND targWindow, WNDPROC messageCallback);

That's it.
When you unload the DLL the hook'll be destroyed as well.
Sound okay?
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 7137365
hi salur, are you still looking for a solution to this problem? -- Dan
0
 
LVL 11

Expert Comment

by:griessh
ID: 7260197
Dear salur

I think you forgot this question. I will ask Community Support to close it unless you finalize it within 7 days. You can always request to keep this question open. But remember, experts can only help you if you provide feedback to their questions.
Unless there is objection or further activity,  I will suggest to accept

     "BeyondWu"

comment(s) as an answer.
     "refund the points and delete this question"
since nobody had a satisfying answer for you.
since you never gave more feedback.
PAQ at zero points.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!
======
Werner
0
 
LVL 6

Expert Comment

by:Mindphaser
ID: 7332848
Force accepted

** Mindphaser - Community Support Moderator **
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
Suggested Courses

800 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question