Thanks for the great code example here.
I am attempting to automate a series of steps which results in a file (csv) being downloaded.
I have got to the point where I can login and enter various parameters using the document completed event.
However there is a button I invoke which runs anohter PHP script which and then downloads a file.
When I invoke the button, the File Download dialog comes up to save the CSV file.
I do not have a URL to the file download.
Is there a way I can trap this event and automate the download to a specified location?
Wow! Very impressive work - I've been looking for something like this for a while and it was like a dream came trough when I found it. I will be using the control, more or less as is in a commercial application within a totally different field.
I also like the demo app which I will have a look at and probably use as a model for my own main application (in which the control will reside).
Thank you so much for sharing this wonderful control and demo app.
I am facing an rendering issue. In my app a background thread dowing its work after its completion i have to open a dialog, Also at the same time browser is loading.
Some time a situation occurs where backgroung thread completion and browser navigation occurs at same time. Focus is moved to the dialog open after thread completion. Behind the same browser is loaded but with white screen. This is the only time when issue can be reproduce, otherwise if works great.
After closing the dialog, if you move the mouse over browser it starts rendering.
Browser navigation completed event is properly occurs without any error. Please help how to solve this.
I am developing an MFC/C++ application and find that web browser controls keeps stealing the focus from other windows. I downloaded this sample app and changed IProtectFocus.AllowFocusChange so it always sets pfAllow to "false", however I am still seeing the same problem with this sample app. To recreate this behavior, create a simple web page that has the auto-refresh flag set in its head section, like this:
<meta http-equiv="refresh" content="10" />
Is it possible to prevent the web browser from stealing the input focus every time the page, or an element inside the page, refreshes?
Hi, your code is amazing.
I was wondering to know how can I block downloading of specific images or js files
there is a downloadbegin event but it dose not clear which file will be download and you have filter images but I couldn't find where you found it.
In simple way, I want to know when and which file being downloading and cancel it if I want.
I'm attempting to attach an event to a RadioButton in order to be notified when the "checked" property has been changed. I've been successful at doing this with Text Input Boxes & Select Boxes (for focus & blur) using the following:
HTMLInputTextElementEvents _html_input_text_element_events = new HTMLInputTextElementEvents();
HTMLSelectElementEvents _html_select_element_events = new HTMLSelectElementEvents();
if (element is mshtml.IHTMLInputElement)
_html_input_text_element_events.elemonfocus += new HTMLInputTextElementEventHandler(_html_input_text_element_events_elemonfocus);
_html_input_text_element_events.elemonblur += new HTMLInputTextElementEventHandler(_html_input_text_element_events_elemonblur);
bool connect = _html_input_text_element_events.ConnectToHtmlElementEvents(element );
elseif (element is mshtml.IHTMLSelectElement)
_html_select_element_events.selectonfocus += new HTMLSelectElementEventHandler(_html_select_element_events_selectonfocus);
_html_select_element_events.selectonblur += new HTMLSelectElementEventHandler(_html_select_element_events_selectonblur);
bool connect = _html_select_element_events.ConnectToHtmlSelectElementEvents(element );
When I attempt to do the same with a Radio Button (I've tried with HTMLElementEvents, HTMLInputTextElementEvents, and HTMLSelectElementEvents) like so:
HTMLElementEvents hee = new HTMLElementEvents();
hee.elemonclick += new HTMLElementEventHandler(hee_elemonactivate);
Do I need to cast as something else? Is this possible?
Is there a way to retrieve the selected element. I'm new to mshtml interop and have a need to retrieve the selected element(s), if any. Also, how do you discern (programmatically) if any elements are selected? I've found the iSelectionServices interface but am unclear how to proceed. HTMLEditHelper does not appear to wrap or provide this functionality. Thx.
I want to try this new csExWB class out. But I do not see a clear path on how to encorporate it into a hello-world like project. If one has say a VS2010 hello-world project, where thet made a simple form-based app that had the WebBrowser control in it. What would one have to do to use csExWB instead of the WebBrowser control?
I figure in the form_Load method, one would instantiate an instance of the csExWB class and pass the WebBrowser control to it, so the csExWB class could override it, but I do not see anything in csExWB to do this.
Also, what would one add as a reference to the hello-world project? Would they add a reference to csExWB.dll? What about Interop.CSEXWBDLMANLib.dll? Would one need to add that as well. Also, what about that csExWBDLMan.dll?
First of all csExWB must have been a monumental effort and Mike deserves enormous credit for his oevre ....
It is possible to incorporate csExWB into one's own project, but it requires some tenanicty. I had an application which included a WebBrowser control (effectively this is IE) and had got almost to the completion of my project when I git a problem which I could not overcome (downloading a file without the irritating "File Download" pop-up"). After 2 weeks of frustration I decided the only answer was a webbrowser like csExWB which does (I think) everything WebBrowser/IE does ... but also with a 'silent' and 'automatic' (or at least semi-automatic) file download capability. Perfect.
I did hit a few glitches though:
1. My original application had to be changed to build from 'Any CPU' down to 'X86'
2. I had to get the DemoApp working completely and then .... very slowly ... take components out of it until I had a barebones frmMain form which was JUST the browser window.
3. Could not get this barebones browser to work with 'Visible = false' (it just doesn't seem to want to 'go') so I reduced the browser window down to Size = (0,0) as a workaround )
4. Had to register the CSEXWBLDMANLib.dll library in the C:\Windows\SysWOW64 directory rather than C:\Windows\System32 before the program would build
5. Had to hack IN code to delete csExWB browser cookies and cache entries before I could get 'consistent' access to my target website
Apart from that, lots more grey hairs and many wrinkles, everything in my application is a thousand times better than using WebBrowser/IE
Hey folks! I got it encorporated. Here is what I had to do!
I had a VS2010 hello-world app. The app added the csExWB.dll and csExWBDLMANLib.dll as references. Supposedly this should also take care of registering csExWBDLMANLib.dll, albeit in my test, I had already manually run RegSvr32 on it ahead of time.
In my app, I added the old WebBrowser, so I could have something to work with the GUI of VS2010's form editor, and I named it "WebBrowser_Main".
Then I simply declared a cEXWB in my app's main form as a data member;
public csExWB.cEXWB cEXWB_This = null;
And in the MyForm's Constructor I instatiated it as such:
then in the MyForm_Load I added the event handler like this:
public void MyForm_Load(object objSender, EventArgs EventArgs_Param)
cEXWB_This.BeforeNavigate2 += new csExWB.BeforeNavigate2EventHandler(cEXWB_This_BeforeNavigate2);
cEXWB_This.NavigateComplete2 += new csExWB.NavigateComplete2EventHandler(cEXWB_This_NavigateComplete2);
cEXWB_This.DocumentComplete += new csExWB.DocumentCompleteEventHandler(cEXWB_This_DocumentComplete);
cEXWB_This.ProgressChange += new csExWB.ProgressChangeEventHandler(cEXWB_This_ProgressChange);
I am using VS2010 SP1 and my project is set to .NET 4, x86.
I did as above, and I have a refernce to C:\Users\Brian Hart\Dropbox\Downloads\C#\csEXWB\csExWB\DemoApp\bin\Debug\csExWB.dll and C:\Users\Brian Hart\Dropbox\Downloads\C#\csEXWB\csExWB\DemoApp\bin\Debug\Interop.CSEXWBDLMANLib.dll in my project.
My project is a Windows Forms project.
When I build the project, it builds ok.
When I run the project, it gets to the Application.Run() call in my Program class and then throws a FileNotFoundException. Details are below:
System.IO.FileNotFoundException was unhandled
Message=Could not load file or assembly 'Interop.CSEXWBDLMANLib, Version=18.104.22.168, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
FileName=Interop.CSEXWBDLMANLib, Version=22.214.171.124, Culture=neutral, PublicKeyToken=null
FusionLog==== Pre-bind state information ===
LOG: DisplayName = Interop.CSEXWBDLMANLib, Version=126.96.36.199, Culture=neutral, PublicKeyToken=null
LOG: Appbase = file:///C:/Users/Brian Hart/Dropbox/Documents/Visual Studio 2010/Projects/xyLOGIX/Desktop Apps/iCloudCalendar/iCloudCalendar/bin/Debug/
LOG: Initial PrivatePath = NULL
<h1>Calling assembly : csExWB, Version=188.8.131.52, Culture=neutral, PublicKeyToken=null.</h1>
I have copied the csExWBDLMan.dll file to the C:\Windows\SysWOW64 and ran regsvr32.exe on it and everything. Why is this exception throwing and how do I fix it?
Then I opened up the Add New Reference dialog box, clicked the COM tab and then clicked the csExWBDLMan entry in the list, clicked Add, hit build and worked! Previously, I had added the reference to the Interop.csExWBDLMan.dll file which does not actually work.
as far as i understand this should be done on the ProtocolHandlerOnBeginTransaction event.
i'm using the m_AdditionalHeadersToAdd field - but it does not seem to work, the server side still responds as if this header did not exist.
i've tried the BeforeNavigate2 event with headers field as well
this is working well when i use HttpWebRequest class or ordinary framework's web browser control with the invoke:
this.webBrowser1.Navigate(@"https://www.xxx.xx/xx", "", null, "X-header: header");