2012-03-09 5 views
3

C#のフォームでAwesomium WebControlを使用していますが、USBデバイスが接続されているという情報をブラウザに渡そうとしています。私はUSBを持っています何らかの理由で私はJSObject()を構築することはできません。デバイスあたりの値が入力されています。ここAwesomium JSObjectはどのように動作しますか?

を焼成するコードデバイスがコンピュータに接続されている

JSObject js_obj; 

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

JSValue[] js_arr = new JSValue[allDrives.Count()]; 

int count = 0; 

foreach (DriveInfo drive in allDrives) 
{ 
    if (drive.IsReady == true) 
    { 
     if (drive.DriveType == DriveType.Removable) 
     { 
      js_obj = new JSObject(); 
      js_obj["Id"] = new JSValue(""); 
      js_obj["TimeAdded"] = new JSValue(""); 
      js_obj["DriveLetters"] = new JSValue(drive.VolumeLabel); 
      js_obj["Port"] = new JSValue(""); 
      js_arr[count] = new JSValue(js_obj); 
      count++; 
     } 
    } 
} 

this.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr); 

であるが、私はthis.Browser.CallJavascriptFunction("DiskDetector", "DeviceAdded", js_arr); js_arrにブレークポイントを追加すると、すべての値がヌル

である場合と4のアレイであります

私は問題が私のJSObjectの使用と設定値JSObjectはIDisposableを拡張すると私はすべての( "キー"、 "値")を追加する必要があると思う;しかし方法は私のために使用しないでください

+0

'js_arr [count] = new JSValue(js_obj);'にブレークポイントを設定して呼び出されるかどうかを確認します。 –

+0

おかげさまで、どうもありがとうございました。今日は約5時間、良い昨日は8時間働いていて、WMIで窓が何か間違っているようにループに入っていないとは思っていませんでした。 –

+0

@ M.Babcock WMIで問題があることを記入して回答してください。USBデバイスはいつも来るとは限りませんが、リムーバブルデバイスとは固定されていますが、オブジェクトがまだJSで動作していないJS –

答えて

5

ではなく、DriveTypeDriveType.Fixedであることがあります。


ちょうど私が何かを見逃していなかったことを確認するためには、私はまた、私はそれを得ることができるかどうかを確認するためにあなたのコード(マイナスあなた Removable条件と実際のドライブ文字を取得する代わりに drive.VolumeLabeldrive.Nameを参照)を撮影しました動作するように:

JSObject js_obj; 

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

JSValue[] js_arr = new JSValue[allDrives.Count()]; 

int count = 0; 

foreach (DriveInfo drive in allDrives) 
{ 
    if (drive.IsReady == true) 
    { 
     js_obj = new JSObject(); 
     js_obj["Id"] = new JSValue(""); 
     js_obj["TimeAdded"] = new JSValue(""); 
     js_obj["DriveLetters"] = new JSValue(drive.Name); 
     js_obj["Port"] = new JSValue(""); 
     js_arr[count] = new JSValue(js_obj); 
     count++; 
    } 
} 

foreach (var js_val in js_arr) 
{ 
    if (js_val == null) 
     continue; 

    Trace.WriteLine(js_val.GetObject()["DriveLetters"].ToString()); 
} 

そして、それは出力:

C:\ 
S:\ 
T:\ 
Y:\ 
Z:\ 

私が期待したように。私はまだそれがあなたのために働いていない理由を確信していませんが、これはJSObjectの使用が正しいことを証明します。

関連する問題