c# wpf代码怎么嵌入EXE应用程序?

c# wpf代码怎么嵌入EXE应用程序?,第1张

在 C# WPF 中嵌入 EXE 应用程序的方法有多种。一种方法是使用 Process 类并调用悉前其 Start 方法来启动 EXE 应用程序,然后使用 WindowInteropHelper 类来将 EXE 应用程序窗口嵌入 WPF 窗口中。例如:

请注意,这只是一种可能的方法,并不一定适用于所有桥陆纳情况。如果您敏没需要更详细的帮助,请提供更多信息,例如您的目标和限制。

1. 新建一个基于.Net Framework 3.5 的WPF 应用程序项目:WPFWMP。

2. 在工程中新建Windows Forms Control Library 项目:WMPControlLibrary。

创建WMP 控件

下面要在WMPControlLibrary 中创建Windows Media Player 控件,在项目中加入Windows Media Player COM。

在左侧工具栏中若没有Windows Media Player 控件的话侍液消,可以右键General 选择Choose Items,在COM 组件列表中勾选Windows Media Player 选项。

将Windows Media Player 控件拖入设计窗口,并将Dock 设置为Fill 填充控件。

F6 编译项目后会生成以下三个DLL 文件,这就是我们稍后将要在WPF 中用到的WMP 控件库。

嵌入WMP 控件

回到WPF 项目在前篇文章的基础上,保留其中“Open File” 按键和Button 样式。将上面三个DLL 文件及System.Windows.Forms、WindowsFormsIntegration 加入项目。

在XAML 中加入AxWMPLib 命名空间,并将上篇MediaElement 替换为AxWindowsMediaPlayer 控件,注意此处是将WinForm 控件嵌入WPF 程序,所以要将AxWindowsMediaPlayer 控件放到<WindowsFormsHost>标签中。

<Window x:Class="WPFWMP.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:mediaControl="clr-namespace:AxWMPLibassembly=AxInterop.WMPLib"

title="WPF Media Player" Height="450" Width="520" Background="#FF554D4D">

<Window.Resources>

<Style x:Key="btnStyle" TargetType="Button">

… …

</Style>

</Window.Resources>

<StackPanel HorizontalAlignment="Center" Margin="10">

<Border BorderThickness="3"老知埋租 Background="Black">

… …

<WindowsFormsHost Height="340" Width="450">

<mediaControl:AxWindowsMediaPlayer x:Name="wpfMediaPlayer"/>

</WindowsFormsHost>

</Border>

<Button Content="Open File" Click="openFile_Click" Margin="10"

Width="80" Style="{StaticResource btnStyle}"/>

</StackPanel>

</Window>

通过Windows API Code Pack 为“Open File” 按键添加点击事件,默认打开Sample Video 文件夹,选择视频文件后自动播放。

private void openFile_Click(object sender, RoutedEventArgs e)

{

ShellContainer selectedFolder = null

selectedFolder = KnownFolders.SampleVideos as ShellContainer

CommonOpenFileDialog cfd = new CommonOpenFileDialog()

cfd.InitialDirectoryShellContainer = selectedFolder

cfd.EnsureReadOnly = true

cfd.Filters.Add(new CommonFileDialogFilter("WMV Files", "*.wmv"))

cfd.Filters.Add(new CommonFileDialogFilter("AVI Files", "*.avi"))

cfd.Filters.Add(new CommonFileDialogFilter("MP3 Files", "*.mp3"))

if (cfd.ShowDialog() == CommonFileDialogResult.OK)

{

wpfMediaPlayer.URL = cfd.FileName

}

}

安装Windows 2000/XP之类的基于NT内核的 *** 作系统在RAID或SCSI或SATA硬盘上,它们的驱动程序必须在安装系统之前就正确加载。安装此类驱动程序常见的模式是将硬件的驱动程序拷贝到软盘上,在系统开始安装的时候按下F6,然后系统会为你加载软盘中的驱动程序。这样的驱动程序软盘根目录下肯定有一个名为Txtsetup.oem的文件,它会告诉安装隐弊销程序怎样安装SCSI、RAID卡的驱动程序。那么只要我们使用WINDOWS的自动安装模式,并通过Txtsetup.oem就可以实现让驱动直接加载(就如同它已经内置了驱动程序一样)。以EP-8RDA3+的SATA芯片SI3112为例,其他的可以依瓢画葫芦。

1、新建一个目录,命名卜档为$OEM$。在此目灶游录下建立两个目录,TEXTMODE和$1。

2、把SI3112的驱动文件都拷到TEXTMODE的目录下:

Si3112r.inf

Si3112r.mpd

Si3112r.sys

SIISUPP.vxd

SIWinAcc.sys

TxtSetup.oem

驱动文件至少应包括包含TxtSetup.oem、.inf和.sys文件。也就是在TxtSetup.oem里出现的文件都是必须的。

3、用任何文本编辑器编辑Txtsetup.oem文件,删除任何和Windows XP驱动无关的信息,保存。我的文件修改后如下:

[Disks]

disk1 = "Silicon Image SiI 3x12 SATARaid Driver Installation Disk",\Si3112r.sys,

[Defaults]

SCSI = Si3112r

[SCSI] HwComponent section

Si3112r_XP = "Silicon Image SiI 3x12 SATARaid Controller for Windows XP"

[Files.SCSI.Si3112r_XP]

driver = disk1,si3112r.sys, Si3112r

driver = disk1,SiWinAcc.sys, SiFilter

inf = disk1,Si3112r.inf

catalog = disk1, Si3112r.cat

[HardwareIds.SCSI.Si3112r_XP]

id = "PCI\VEN_1095&DEV_3112&SUBSYS_61121095", "Si3112r"

id = "PCI\VEN_1095&DEV_3112&SUBSYS_34228086", "Si3112r"

id = "PCI\VEN_1095&DEV_3112&SUBSYS_809D1043", "Si3112r"

id = "PCI\VEN_1095&DEV_3512&SUBSYS_65121095", "Si3112r"

id = "PCI\VEN_1095&DEV_3512&SUBSYS_34228086", "Si3112r"

[Config.Si3112r_XP]

value = ProblemDevices, "", REG_SZ, ""

value = ProblemDevices, "Maxtor 4D060H3 DAK05GK0", REG_SZ, "MaxMode = UDMA-5"

value = ProblemDevices, "ST320012AS", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST330013AS", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST340017AS", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST360015AS", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST380023AS", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST3120023AS", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST340014ASL", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST360014ASL", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST380011ASL", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST3120022ASL", REG_SZ, "Mod15Write"

value = ProblemDevices, "ST3160021ASL", REG_SZ, "Mod15Write"

4、在$1的目录下建立Drivers目录,在Drivers目录下再建立SI3112目录,此两个目录名称可随意,但是必须与下面的unattend.txt文件里提到的相应路径一致。把TEXTMODE下的所有文件都拷到SI3112目录下。

5、建立文件名为unattend.txt的文本文件,这个文件是WINDOWS自动安装的脚本文件,可自己手动写入参数,也可通过setupmgr.exe产生,setupmgr.exe文件在安装光盘的SUPPORT\TOOLS目录下的DEPLOY.CAB压缩包里。

6、在unattend.txt中,创建 [OEMBootFiles]段,把TextMode目录下的所有文件列表填写进去,如我的:

[OEMBootFiles]

Si3112r.inf

Si3112r.mpd

Si3112r.sys

SIISUPP.vxd

SIWinAcc.sys

TxtSetup.oem

7、建立[MassStorageDrivers]段,如:

[MassStorageDrivers]

"Silicon Image SiI 3x12 SATARaid Controller for Windows XP"="OEM"

其中"Silicon Image SiI 3x12 SATARaid Controller for Windows XP"来自于Txtsetup.oem文件[scsi]段中标志Windows XP控制器的文字。

8、建立[Unattended],在[Unattended]中添加OemPreinstall=Yes,是为了保证Windows安装程序自动去查找我们添加进去的第三方驱动程序。为了防止没有通过微软的WHQL认证的驱动安装失败,需要指定DriverSigningPolicy=Ignore来忽略WHQL认证检查。还要指明驱动保存的目录路径,此为:Drivers\SI3112。如下:

[Unattended]

OemPreinstall=Yes

DriverSigningPolicy=Ignore

OemPnPDriversPath="Drivers\SI3112"

9、使用此方法有一个缺陷——Windows安装分区是自动选择的,我们不能在安装过程中指定分区,不过可以在unattend.txt文件中新建[Data]段,并输入以下信息就可以在安装过程中选择安装分区。

[Data]

AutoPartition = 0

Unattendmode = Yes

MSDosInitiated = "0"

OemSkipEula=Yes

10、安装:

把安装光盘中所有的文件COPY到硬盘(比如:F盘的WINXP目录下),把一开始创建的整个$OEM$目录都放到I386的目录下,并且unattend.txt也放到I386目录下,在I386目录下运行安装命令为Winnt /u:unattend.txt /s:f:\winXP\i386,其中f:\winXP\i386为I386所在的绝对路径。(注:有些网友反映光盘安装出现很多问题,我试验之后的确有他们所提的问题,为了不再“误导”更多网友,故把光盘安装方法取消,等出了解决办法之后才贴上,望谅!)

自动安装文件还有很多其他的作用,如自动填入序列号等,大家可以自己去查阅资料,祝大家都能方便的安装WINDOWS,另上面如有不对的地方也请提出,谢谢!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12417004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存