这听起来像是您尝试使用 Adobe Flash 作为您的界面;然后将某些变量传回 C#。
一个例子是这样的:
在闪存中;创建一个按钮... Actionscript:
on (press) {
fscommand("Yo","dude");
}
然后 Visual Studio 你只需要添加 COM 对象引用:Shockwave Flash Object
然后将嵌入设置为true;
然后在 Visual Studio 中,您应该能够转到属性;找到 fs 命令。fs 命令将允许您物理连接 Flash 电影中的值。
AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent
收集;然后只需使用e.command
ande.arg
例如让收集的项目做一些事情。
然后将其添加到 EventHandler;
lbl_Result.Text="The "+e.args.ToString()+" "+e.command.ToString()+" was clicked";
并且繁荣它正在将其数据从 Flash 传输到 Visual Studio。不需要任何疯狂的困难插座。
附带说明;如果你在 Visual Studio 中有 Flash,关键是要确保它的“嵌入设置为真”。这将保存 Flash 对象中的所有路径引用;以避免任何错误的路径。
我不确定这是否是您寻求的答案;或回答您的问题。但是没有关于你的目标/错误的更多细节。我帮不了你。
希望这可以帮助。第一部分实际上应该向您展示将 Shockwave 嵌入 Visual Studio 的最佳方式。
确保添加正确的参考:
- 在您的项目中打开“解决方案资源管理器”
- 右键单击“添加参考”
- 转到“COM 对象”
找到合适的对象;
COM Objects:
Shockwave ActiveX
Flash Accessibility
Flash Broker
Shockwave Flash
希望有帮助。
听起来您没有正确嵌入它;所以你可以打电话给它。如果我稍微弄错了;或者这就是你的意思:
如果您遇到困难,Ryk 不久前有帖子;使用嵌入 YouTube 视频的方法:
<% MyYoutubeUtils.ShowEmebddedVideo("<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gtNlQodFMi8&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/gtNlQodFMi8&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>") %>
或者...
public static string ShowEmbeddedVideo(string youtubeObject)
{
var xdoc = XDocument.Parse(youtubeObject);
var returnObject = string.Format("<object type=\"{0}\" data=\{1}\"><param name=\"movie\" value=\"{1}\" />",
xdoc.Root.Element("embed").Attribute("type").Value,
xdoc.Root.Element("embed").Attribute("src").Value);
return returnObject;
}
你可以在这里找到线程:https://stackoverflow.com/questions/2547101/purify-embedding-youtube-videos-method-in-c-sharp
如果我的帖子显得支离破碎,我深表歉意;但我不知道是引用、变量、方法还是嵌入给你带来了困难。真的希望这会有所帮助;或者给我更多细节,我会相应地调整我的回复。
C# 到 ActionScript 的通信:
import flash.external.ExternalInterface;
ExternalInterface.addCallback("loadAndPlayVideo", null, loadAndPlayVideo);
function loadAndPlayVideo(uri:String):void
{
videoPlayer.contentPath = uri;
}
然后在 C# 中;添加 ActiveX 控件的实例并将内容添加到构造函数中。
private AxShockwaveFlash flashPlayer;
public FLVPlayer ()
{
// Add Error Handling; to condense I left out.
flashPlayer.LoadMovie(0, Application.StartupPath + "\\player.swf");
}
fileDialog = new OpenFileDialog();
fileDialog.Filter = "*.flv|*.flv";
fileDialog.Title = "Select a Flash Video File...";
fileDialog.Multiselect = false;
fileDialog.RestoreDirectory = true;
if (fileDialog.ShowDialog() == DialogResult.OK)
{
flashPlayer.CallFunction("<invoke" + " name=\"loadAndPlayVideo\" returntype=\"xml"> <arguements><string>" + fileDialog.FileName + "</string></arguements></invoke>");
}
与 C# 的 ActionScript 通信:
import flash.external.ExternalInterface;
ExternalInterface.call("ResizePlayer", videoPlayer.metadata.width, videoPlayer.metadata.height);
flashPlayer.FlashCall += new _IShockwaveFlashEvents_FlashCallEventHandler(flashPlayer_FlashCall);
然后应该出现 XML:
<invoke name="ResizePlayer" returntype="xml">
<arguements>
<number> 320 </number>
<number> 240 </number>
</arguments>
</invoke>
然后在事件处理程序中解析 XML 并在本地调用 C# 函数。
XmlDocument document = new XmlDocument();
document.LoadXML(e.request);
XmlNodeList list = document.GetElementsByTagName("arguements");
ResizePlayer(Convert.ToInt32(list[0].FirstChild.InnerText), Convert.ToInt32(list[0].ChildNodes[1].InnerText));
现在他们都在来回传递数据。这是一个基本的例子;但是通过使用 ActionScript Communication,您应该不会在使用本机 API 时遇到任何问题。
希望这更有帮助。您可以通过实用程序类扩展该想法以供重用。显然上面的代码有一些限制;但希望它为您指明正确的方向。是你试图去的那个方向吗?还是我仍然没有抓住重点?
创建一个新的 Flash 电影;在 ActionScript 3 中。然后在最初的第一帧;应用以下内容:
Security.allowDomain("www.youtube.com");
var my_player:Object;
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"))
my_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
function onLoaderInit(e:Event):void{
addChild(my_loader);
my_player = my_loader.content;
my_player.addEventListener("onReady", onPlayerReady);
}
function onPlayerReady(e:Event):void{
my_player.setSize(640,360);
my_player.loadVideoById("_OBlgSz8sSM",0);
}
那么该脚本到底在做什么呢?它利用本机 API 并使用 ActionScript 通信。所以下面我将分解每一行。
Security.allowDomain("www.youtube.com");
如果没有这条线,YouTube 将不会与该对象进行交互。
var my_player:Object;
您不能只是将电影加载到电影中;所以我们将创建一个变量 Object。您必须加载包含对这些代码的访问权限的特殊 .swf。下面; 就是这样做的。这样您就可以访问 API。
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
我们现在根据他们的文档引用 Google API。
my_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
但是为了实际使用我们的对象;我们需要等待它完全初始化。所以事件监听器会等待;所以我们知道什么时候可以向它传递命令。
该onLoaderInit
函数将在初始化时触发。然后它的第一个任务是my_loader
显示列表,以便显示视频。
这addChild(my_loader);
是将加载一个;将my_player = my_loader.content;
存储一个引用以便于访问对象。
虽然它已经初始化了;您必须等待更远...您曾经my_player.addEventListener("onReady", onPlayerReady);
等待并侦听那些自定义事件。这将允许稍后的函数处理。
现在播放器已准备好进行基本配置;
function onPlayerReady(e:Event):void{
my_player.setSize(640,360);
}
上面的函数开始了非常基本的操作。然后最后一行my_player.loadVideoById("_OBlgSz8sSM",0);
是引用特定的视频。
然后在你的舞台上;您可以创建两个按钮并应用:
play_btn.addEventListener(MouseEvent.CLICK, playVid);
function playVid(e:MouseEvent):void {
my_player.playVideo();
}
pause_btn.addEventListener(MouseEvent.CLICK, pauseVid);
function pauseVid(e:MouseEvent):void {
my_player.pauseVideo();
}
这将为您提供播放和暂停功能。您可以使用我们的一些附加项目:
loadVideoById()
cueVideoById()
playVideo()
pauseVideo()
stopVideo()
mute()
unMute()
请记住,在完全初始化之前不能使用或调用它们。但是使用它;使用较早的方法应该允许您布局目标并实际在两者之间传递变量以进行操作。
希望这会有所帮助。