Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用javascript ActiveX对象触发System.Windows.Forms dll 我正在开发一个C++自定义向导,它包含一个由下拉控件组成的1页UI。 我想用机器上安装的所有输入语言填充这个下拉控件。 (输入语言是区域性/键盘布局对,用于确定键盘上的物理键如何映射或打印到语言中的字符。)_C#_Javascript_Jquery_C++ - Fatal编程技术网

C# 使用javascript ActiveX对象触发System.Windows.Forms dll 我正在开发一个C++自定义向导,它包含一个由下拉控件组成的1页UI。 我想用机器上安装的所有输入语言填充这个下拉控件。 (输入语言是区域性/键盘布局对,用于确定键盘上的物理键如何映射或打印到语言中的字符。)

C# 使用javascript ActiveX对象触发System.Windows.Forms dll 我正在开发一个C++自定义向导,它包含一个由下拉控件组成的1页UI。 我想用机器上安装的所有输入语言填充这个下拉控件。 (输入语言是区域性/键盘布局对,用于确定键盘上的物理键如何映射或打印到语言中的字符。),c#,javascript,jquery,c++,C#,Javascript,Jquery,C++,我正试图得到这个列表&我已经找到了一种用C#来做的方法 不,我想使用javascript实现与自定义向导使用的.js相同的功能 我尝试了下面的操作,但得到了js运行时错误:“Automation Server无法创建对象” var obj=新的ActiveXObject(“System.Windows.Forms”); //获取已安装语言的列表。 for(obj.Windows.Forms.InputLanguage.InstalledInputLanguages中的var lang) { 文

我正试图得到这个列表&我已经找到了一种用C#来做的方法

不,我想使用javascript实现与自定义向导使用的.js相同的功能 我尝试了下面的操作,但得到了js运行时错误:“Automation Server无法创建对象”


var obj=新的ActiveXObject(“System.Windows.Forms”);
//获取已安装语言的列表。
for(obj.Windows.Forms.InputLanguage.InstalledInputLanguages中的var lang)
{
文件。书写(“”+lang.Culture.EnglishName+“”);
}
我尝试过这样做,因为我参考了其他文章,其中显示了使用javascript ActiveX对象触发c#dll。

有人能帮我吗

问候,,
Deepthi

由于没有注册为
System.Windows.Forms
的COM对象,因此无法使用此代码执行所需操作。但你联系到的问题正是你想要的

您有两个选项来实现这一点,选择其中一个取决于您是希望在Javascript端使用文化名称,还是希望在整个
InputLanguage
类中使用文化名称。我想第一种方法对你来说已经足够了。对于第二个,您应该定义一个接口和一个新类,其中包含Javascript中所需的
InputLanguage
的所有属性

在界面
IHello
中,更改以下内容:

[DispId(1)]
string GetLanguages();
public string GetLanguages()
{
    string[] langNames =InputLanguage.InstalledInputLanguages
            .OfType<InputLanguage>()
            .Select(lang => string.Format("{0}", lang.Culture.EnglishName))
            .ToArray(); 

    // This is a simple Join, just to give you the idea
    // You better use a proper serialization like JSON
    return string.Join(";", langNames);
}
在类
CHello
中,更改以下内容:

[DispId(1)]
string GetLanguages();
public string GetLanguages()
{
    string[] langNames =InputLanguage.InstalledInputLanguages
            .OfType<InputLanguage>()
            .Select(lang => string.Format("{0}", lang.Culture.EnglishName))
            .ToArray(); 

    // This is a simple Join, just to give you the idea
    // You better use a proper serialization like JSON
    return string.Join(";", langNames);
}
公共字符串GetLanguages()
{
字符串[]langNames=InputLanguage.InstalledInputLanguages
第()类
.Select(lang=>string.Format(“{0}”,lang.Culture.EnglishName))
.ToArray();
//这是一个简单的连接,只是给你一个想法
//最好使用像JSON这样的适当序列化
返回字符串。Join(“;”,langNames);
}
以及您的javascript代码(假设您降低了安全级别,或者为ActiveX签名):


myAx1=新的ActiveXObject(“csharpAx.CHello”);
如果(myAx1!=null)
{
//获取已安装语言的列表。
for(obj.GetLanguages().split(“;”)中的var lang)
{
文件。写入(“”+
朗+
'');
}
}

“谢谢”。但是我的动机是使用JavaScript并获得所有输入的安装语言的列表并填充我的下拉控件。我不想添加任何新的类/接口,因为我已经说过我正在开发一个C++定制向导,它只使用Debug .HTM& Debug .js文件与UI交互。
 <script type="text/javascript">

 myAx1 = new ActiveXObject("csharpAx.CHello");
 if(myAx1 != null)
 {
 // Gets the list of installed languages.
     for (var lang in obj.GetLanguages().split(";"))
     {
         document.write('<option value="' + 
         lang + 
         '">' + 
         lang + 
         '</option>');
     }
 }
 </script>