Я не совсем уверен, что именно вы пытаетесь сделать, но вот решение, которое я нашел.
(at [0-9]{2}:[0-9]{2}:[0-9]{2}.*)\n.*\1
Позвольте мне шаг за шагом разбить то, что происходит на самом базовом уровне, который я могу.
(
начало захвата группы
at
совпадает точно «в»
[0-9]{2}:[0-9]{2}:[0-9]{2}
совпадает с датой в формате выше
.*
соответствует 0 или более любым символам (исключая новую строку)
)
группа захвата конца
\n
соответствует символу разрыва строки
.*
соответствует 0 или больше любого символа (исключая новую строку)
\1
соответствует группе захвата 1
Короче говоря, это будет совпадать, если у вас есть две строки в строке, которые абсолютно одинаковы после текущей части строки.
На самом деле, насколько я понимаю, что такая вещь действительно возможна в WPF использование HwndSource
и HwndSourceHook
. См. этот поток на MSDN как пример. (Соответствующие нормы включали ниже)
// 'this' is a Window
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
// do stuff
return IntPtr.Zero;
}
Теперь, я не совсем уверен, почему Вы хотели бы обработать сообщения Windows Messaging в приложении WPF (если это не самая очевидная форма interop для работы с другим приложением WinForms). Идеология дизайна и природа API очень отличаются в WPF от WinForms, таким образом, я предложил бы, чтобы Вы просто ознакомились с WPF больше для наблюдения точно почему нет никакого эквивалента WndProc.
Существуют способы обработать сообщения с WndProc в WPF (например, использование HwndSource, и т.д.), но обычно те методы резервируются для interop с сообщениями, которые не могут непосредственно быть обработаны через WPF. Большинство средств управления WPF не является даже окнами в Win32 (и дополнительным Windows. Формы) смысл, таким образом, у них не будет WndProcs.
WPF не воздействует на wndprocs
типа WinForms, можно разместить HWndHost в соответствующем элементе WPF, тогда переопределяют wndproc Hwndhost, но AFAIK, это так близко, как Вы собираетесь добраться.
http://msdn.microsoft.com/en-us/library/ms742522.aspx
http://blogs.msdn.com/nickkramer/archive/2006/03/18/554235.aspx
Короткий ответ - Вы, не может. WndProc работает путем передачи сообщений HWND на уровне Win32. Окна WPF не имеют никакого HWND и следовательно не могут участвовать в сообщениях WndProc. Основной цикл сообщения WPF действительно находится сверху WndProc, но он абстрагирует их далеко от базовой логики WPF.
можно использовать HWndHost и достигнуть WndProc для него. Однако это почти наверняка не, что Вы хотите сделать. В большинстве целей WPF не воздействует на HWND и WndProc. Ваше решение почти наверняка полагается на внесение изменения в WPF не в WndProc.
HwndSource src = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
src.AddHook(new HwndSourceHook(WndProc));
.......
public IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if(msg == THEMESSAGEIMLOOKINGFOR)
{
//Do something here
}
return IntPtr.Zero;
}
Вы можете сделать это через пространство имен System.Windows.Interop
, которое содержит класс с именем HwndSource
.
Пример использования этого
using System;
using System.Windows;
using System.Windows.Interop;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
source.AddHook(WndProc);
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
// Handle messages...
return IntPtr.Zero;
}
}
}
Полностью взят из отличного сообщения в блоге: Использование пользовательского WndProc в приложениях WPF, автор Стив Рэндс