Revert "Use EnumWindows instead of FindWindow"

This reverts commit fa24ae3022.
This commit is contained in:
Yaakov 2020-05-21 17:52:07 +10:00
parent fa24ae3022
commit 1d1f92c608
3 changed files with 15 additions and 70 deletions

View file

@ -18,15 +18,9 @@ namespace Notepad.Extensions.Logging.FunctionalTest
var sp = sc.BuildServiceProvider(); var sp = sc.BuildServiceProvider();
var logger = sp.GetRequiredService<ILogger<Program>>(); var logger = sp.GetRequiredService<ILogger<Program>>();
//logger.LogWarning("Here is a warning."); logger.LogWarning("Here is a warning.");
//logger.LogError(GetException(), "oh no!."); logger.LogError(GetException(), "oh no!.");
//logger.LogInformation("Here is some info."); logger.LogInformation("Here is some info.");
//logger.LogInformation("here, have a nice 😋 emoji.");
logger.LogInformation(@"💧 Paul
@paws101
Replying to
@yaakov_h
But does it handle emoji injection?.");
} }
static Exception GetException() static Exception GetException()

View file

@ -1,6 +1,5 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text;
namespace Microsoft.Extensions.Logging namespace Microsoft.Extensions.Logging
{ {
@ -16,13 +15,5 @@ namespace Microsoft.Extensions.Logging
[DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)] [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
public delegate bool EnumWindowsDelegate(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]
public static extern bool EnumWindows(EnumWindowsDelegate lpEnumFunc, IntPtr lParam);
[DllImport("User32.dll")]
public static extern int GetWindowText(IntPtr hWndParent, StringBuilder sb, int maxCount);
} }
} }

View file

@ -1,6 +1,4 @@
using System; using System;
using System.ComponentModel;
using System.Text;
namespace Microsoft.Extensions.Logging namespace Microsoft.Extensions.Logging
{ {
@ -8,66 +6,28 @@ namespace Microsoft.Extensions.Logging
{ {
public static IntPtr FindNotepadWindow() public static IntPtr FindNotepadWindow()
{ {
sb ??= new StringBuilder(4096); var hwnd = FindMainWindow();
IntPtr edit = NativeMethods.FindWindowEx(hwnd, IntPtr.Zero, "EDIT", null);
try return edit;
{
FindMainWindow();
if (handle == IntPtr.Zero)
{
return handle;
}
IntPtr edit = NativeMethods.FindWindowEx(handle, IntPtr.Zero, "EDIT", null);
return edit;
}
finally
{
handle = IntPtr.Zero;
sb.Clear();
}
} }
static IntPtr FindMainWindow() static IntPtr FindMainWindow()
{ {
NativeMethods.EnumWindows(enumWindowsDelegate, IntPtr.Zero); IntPtr hwnd;
return handle;
} hwnd = NativeMethods.FindWindow(null, "Untitled - Notepad");
if (hwnd != IntPtr.Zero)
static NativeMethods.EnumWindowsDelegate enumWindowsDelegate = new NativeMethods.EnumWindowsDelegate(EnumWindowsCallback);
static bool EnumWindowsCallback(IntPtr hWnd, IntPtr lParam)
{
var result = NativeMethods.GetWindowText(hWnd, sb, sb.Capacity);
if (result < 0)
{ {
throw new Win32Exception(result); return hwnd;
} }
if (IsKnownNotepadWindow(sb.ToString())) hwnd = NativeMethods.FindWindow(null, "*Untitled - Notepad");
if (hwnd != IntPtr.Zero)
{ {
WindowFinder.handle = hWnd; return hwnd;
return false;
}
return true;
}
[ThreadStatic]
static IntPtr handle;
[ThreadStatic]
static StringBuilder sb;
static bool IsKnownNotepadWindow(string titleText)
{
switch (titleText)
{
case "Untitled - Notepad":
case "*Untitled - Notepad":
return true;
} }
return false; return IntPtr.Zero;
} }
} }
} }