假设我已经知道密码。无论如何我可以在 C Sharp 中添加一个密码参数来与要求输入密码的 actionscript 客户端进行通信。我想在 C Sharp 中编码密码,这样当我登录客户端时它会自动输入密码。
user1666862
问问题
60 次
1 回答
0
由于 Flash 的构建方式,当您使用 Flash Player 或 Flash Lite 时,这 (AFAIK) 是不可能的。但是,您可以使用 Adobe AIR 完成类似的操作,Adobe AIR 用于桌面和移动应用程序,使用 Flash 平台。为了采用以下方法,您需要为“扩展桌面”发布 AIR 应用程序。
为了让它工作,你的 C Sharp 程序需要是命令行的。输入一些命令行提示符(如“READY”)后,需要在一行中输出密码。
您需要使用 NativeProcess(文档)从 Adobe AIR 应用程序启动您的 C Sharp 程序。
以下代码是我自己的工作类的修改版本。我对错误不做任何保证,因为我删除了几个专有元素。前两个需要作为自定义类存在于同一个包中。保存它们的文件夹必须与所讨论的 .FLA 处于同一级别,并且与包名称具有相同的名称。
自定义事件类:
package myCustomPackage
{
import flash.events.Event;
public class NativeProcessEvent extends Event
{
public static const ON_RECEIVE:String = "onReceive";
public var customMessage:String = "";
public function NativeProcessEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false):void
{
super(type, bubbles, cancelable);
}
}
}
NATIVEPROCESS CLASS(进行通信):
package myCustomPackage
{
import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.events.ProgressEvent;
import flash.utils.ByteArray;
import flash.filesystem.File;
import flash.events.EventDispatcher;
import myCustomPackage.NativeProcessEvent
public class nativeProcessChannel extends EventDispatcher
{
var startup:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = new File();
var process:NativeProcess = new NativeProcess();
private var mEvt:NativeProcessEvent;
var buffer:Array = [];
//Constructor
public function nativeProcessChannel()
{
file = File.applicationDirectory.resolvePath("mypasswordprogram.exe");
if(file.exists && NativeProcess.isSupported)
{
startup.executable = file;
process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, addToBuffer);
process.start(startup);
}
else if(!file.exists)
{
trace("ERROR: Cannot find program.");
}
else
{
trace("ERROR: NativeProcess not supported.");
}
}
//Sends a line of input to the command line.
public function send(msg:String):void
{
process.standardInput.writeUTFBytes(msg + "\n");
}
function addToBuffer(event:ProgressEvent):void
{
var bytes:ByteArray = new ByteArray();
process.standardOutput.readBytes(bytes, 0, process.standardOutput.bytesAvailable);
buffer.push(bytes.toString());
mEvt = new NativeProcessEvent("onReceive");
mEvt.customMessage = "NativeProcess message received.";
dispatchEvent(mEvt);
}
//Receives a line of output from the command line
public function receive():String
{
var r:String = "";
if(buffer.length > 0)
{
r = buffer[0]
buffer.splice(0,1);
}
return r;
}
//This closes the connection, freeing memory.
public function close():void
{
process.exit();
}
}
}
执行:
import myCustomPackage.NativeProcessClass;
import myCustomPackage.NativeProcessEvent;
var myProcess:NativeProcessClass = new NativeProcessClass();
myProcess.addEventListener(NativeProcessEvent.ON_RECEIVE, continueGetPassword);
//This function is necessary so you can reuse the NativeProcess channel.
public function reconnect()
{
myProcess = new NativeProcessClass();
myProcess.addEventListener(NativeProcessEvent.ON_RECEIVE, continueGetPassword);
}
public function getPassword()
{
myProcess.send("READY");
}
public function continueGetPassword()
{
var password:String = myProcess.receive();
//You now have the password from your c-sharp program. Do with it what you like!
myProcess.close()
reconnect();
}
据我所知,由于其安全限制,没有其他方法可以使用 Flash 连接到另一个程序。Adobe AIR 中的扩展桌面是唯一没有沙盒的基于 Flash 的平台。
希望这会有所帮助(并对任何代码错误表示歉意。)
于 2014-01-04T00:46:04.073 回答