Extension of the document function, it now also accepts the "Internet Explorer_Server" window directly, this can increase the performance for coming changes.

git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@1999 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
RKrom 2012-08-17 09:11:50 +00:00
commit 8305327db5

View file

@ -138,7 +138,7 @@ namespace Greenshot.Helpers {
} else { } else {
List<string> singleWindowText = new List<string>(); List<string> singleWindowText = new List<string>();
try { try {
IHTMLDocument2 document2 = getDocument(ieWindow); IHTMLDocument2 document2 = getHTMLDocument(ieWindow);
string title = document2.title; string title = document2.title;
if (string.IsNullOrEmpty(title)) { if (string.IsNullOrEmpty(title)) {
singleWindowText.Add(ieWindow.Text); singleWindowText.Add(ieWindow.Text);
@ -171,7 +171,18 @@ namespace Greenshot.Helpers {
/// </summary> /// </summary>
/// <param name="mainWindow"></param> /// <param name="mainWindow"></param>
/// <returns></returns> /// <returns></returns>
private static IHTMLDocument2 getDocument(WindowDetails mainWindow) { private static IHTMLDocument2 getHTMLDocument(WindowDetails mainWindow) {
WindowDetails ieServer;
if ("Internet Explorer_Server".Equals(mainWindow.ClassName)) {
ieServer = mainWindow;
} else {
ieServer = mainWindow.GetChild("Internet Explorer_Server");
}
if (ieServer == null) {
LOG.WarnFormat("No Internet Explorer_Server for {0}", mainWindow.Text);
return null;
}
IHTMLDocument2 document2 = null; IHTMLDocument2 document2 = null;
uint windowMessage = User32.RegisterWindowMessage("WM_HTML_GETOBJECT"); uint windowMessage = User32.RegisterWindowMessage("WM_HTML_GETOBJECT");
if (windowMessage == 0) { if (windowMessage == 0) {
@ -179,11 +190,6 @@ namespace Greenshot.Helpers {
return null; return null;
} }
WindowDetails ieServer = mainWindow.GetChild("Internet Explorer_Server");
if (ieServer == null) {
LOG.WarnFormat("No Internet Explorer_Server for {0}", mainWindow.Text);
return null;
}
LOG.DebugFormat("Trying WM_HTML_GETOBJECT on {0}", ieServer.ClassName); LOG.DebugFormat("Trying WM_HTML_GETOBJECT on {0}", ieServer.ClassName);
UIntPtr response; UIntPtr response;
User32.SendMessageTimeout(ieServer.Handle, windowMessage, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_NORMAL, 5000, out response); User32.SendMessageTimeout(ieServer.Handle, windowMessage, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_NORMAL, 5000, out response);
@ -207,7 +213,7 @@ namespace Greenshot.Helpers {
/// <param name="browserWindow">The WindowDetails to get the IHTMLDocument2 for</param> /// <param name="browserWindow">The WindowDetails to get the IHTMLDocument2 for</param>
/// <param name="document2">Ref to the IHTMLDocument2 to return</param> /// <param name="document2">Ref to the IHTMLDocument2 to return</param>
/// <returns>The WindowDetails to which the IHTMLDocument2 belongs</returns> /// <returns>The WindowDetails to which the IHTMLDocument2 belongs</returns>
private static DocumentContainer GetDocument(WindowDetails browserWindow) { private static DocumentContainer CreateDocumentContainer(WindowDetails browserWindow) {
DocumentContainer returnDocumentContainer = null; DocumentContainer returnDocumentContainer = null;
WindowDetails returnWindow = null; WindowDetails returnWindow = null;
IHTMLDocument2 returnDocument2 = null; IHTMLDocument2 returnDocument2 = null;
@ -235,7 +241,7 @@ namespace Greenshot.Helpers {
try { try {
// Get the Document // Get the Document
IHTMLDocument2 document2 = getDocument(ieWindow); IHTMLDocument2 document2 = getHTMLDocument(ieWindow);
if (document2 == null) { if (document2 == null) {
continue; continue;
} }
@ -337,7 +343,7 @@ namespace Greenshot.Helpers {
//BackgroundForm backgroundForm = BackgroundForm.ShowAndWait(language.GetString(LangKey.contextmenu_captureie), language.GetString(LangKey.wait_ie_capture)); //BackgroundForm backgroundForm = BackgroundForm.ShowAndWait(language.GetString(LangKey.contextmenu_captureie), language.GetString(LangKey.wait_ie_capture));
try { try {
//Get IHTMLDocument2 for the current active window //Get IHTMLDocument2 for the current active window
DocumentContainer documentContainer = GetDocument(windowToCapture); DocumentContainer documentContainer = CreateDocumentContainer(windowToCapture);
// Nothing found // Nothing found
if (documentContainer == null) { if (documentContainer == null) {