Инъецированные WPF Windows - PullRequest
1 голос
/ 06 ноября 2010

Я пытаюсь, чтобы мое окно WPF отображалось из другого процесса через внедрение DLL и удаленный хостинг CLR.Я знаю, что CLR правильно размещен и способен выполнять код, поскольку я могу создавать MessageBox () из удаленного процесса, используя ICLRRuntimeHost :: ExecuteInDefaultAppDomain ();

Однако, когда я пытаюсь отобразить свой WPFОкно (которое компилируется в библиотеку классов) ничего не происходит.Я пробовал следующие методы:

public static int Display(String pwzArgument)
{
    App thisApp = new App();
    thisApp.Run();
    return 0;
}

, а также:

public static int Display(String pwzArgument)
{
    MainWindow win = new MainWindow();
    win.Show();
    return 0;
}

My App.xaml и MainWindow.xaml:

// App.xaml
<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="WPFTest.App"
    StartupUri="MainWindow.xaml" Startup="Application_Startup">
    <Application.Resources>
        <!-- Resources scoped at the Application level should be defined here. -->
    </Application.Resources>
</Application>
//MainWindow.xaml
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
    x:Class="WPFTest.MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="378" Foreground="{x:Null}" Visibility="Visible" Topmost="True" Background="{x:Null}">

    <Grid>
        <Rectangle Stroke="Black" RadiusX="20" RadiusY="20" StrokeThickness="0.5">
            <Rectangle.Fill>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FF13DCF2" Offset="0"/>
                    <GradientStop Color="#FF0D0D0D" Offset="1"/>
                    <GradientStop Color="#FFF2F2F2" Offset="0.289"/>
                    <GradientStop Color="#FF8C8C8C" Offset="0.56"/>
                    <GradientStop Color="#FF262626" Offset="0.819"/>
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        <Button Content="X" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,5,17,0" FontWeight="Bold"/>
        <Button Content="[ ]" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,5,34.077,0" FontWeight="Bold"/>
        <Button Content="_" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,5,56.247,0" FontWeight="Bold"/>
        <Label Content="Injected WPF Test" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="12,-3,0,0" FontSize="18.667" FontStyle="Italic"/>
        <Rectangle HorizontalAlignment="Left" StrokeThickness="0" Margin="0,31,0,52" Width="640" Fill="#53000000"/>
        <Label Content="Placeholder:&#xa;" HorizontalAlignment="Left" Margin="0,162.678,0,173.401" d:LayoutOverrides="HorizontalAlignment, Height"/>
        <Label Content="Process Name:&#xa;" Margin="0,121.124,0,0" d:LayoutOverrides="HorizontalAlignment" HorizontalAlignment="Left" VerticalAlignment="Top"/>
        <Label Content="PID:" Margin="0,79.204,0,0" HorizontalAlignment="Left" Height="41.92" VerticalAlignment="Top"/>
        <Label Content="Placeholder:&#xa;" HorizontalAlignment="Left" Margin="0,0,0,121.124" VerticalAlignment="Bottom" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/>
        <Label Content="Placeholder:&#xa;" HorizontalAlignment="Left" Margin="0,0,0,79.204" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Bottom"/>
        <Label Content="PID_CONTENT&#xa;" HorizontalAlignment="Left" Margin="87.513,79.204,0,218" d:LayoutOverrides="HorizontalAlignment" Name="PIDCONTENT" Loaded="PIDCONTENT_Loaded" />
        <Label Content="PROCNAME&#xa;" HorizontalAlignment="Left" Margin="87.513,121.124,0,0" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Top" Name="PROCNAME" Loaded="PROCNAME_Loaded" />
        <Label Content="PLACEHOLDER&#xa;" HorizontalAlignment="Left" Margin="87.513,163.044,0,163.043" d:LayoutOverrides="HorizontalAlignment, Height"/>
        <Label Content="PLACEHOLDER&#xa;" HorizontalAlignment="Left" Margin="87.513,0,0,121.123" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Bottom"/>
        <Label Content="PLACEHOLDER&#xa;" HorizontalAlignment="Left" Margin="87.513,0,0,79.203" d:LayoutOverrides="HorizontalAlignment" VerticalAlignment="Bottom"/>
    </Grid>
</Window>

Ни один из вышеперечисленныхМетоды отображения любого окна.Я очень новичок в WPF и уверен, что кое-что мне не хватает.

...