Browse Source

同步Moka仓库修改。

Jeff Wang 3 years ago
parent
commit
0e569ac179

File diff suppressed because it is too large
+ 636 - 255
FactoryTool_CShare/Business/CommonMethod.cs


+ 9 - 6
FactoryTool_CShare/MOKA Factory Tools.csproj

@@ -172,8 +172,8 @@
     <EmbeddedResource Include="Views\CreateDBManually.zh-CN.resx">
       <DependentUpon>CreateDBManually.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Views\OperationPanel.zh-CN.resx">
-      <DependentUpon>OperationPanel.cs</DependentUpon>
+    <EmbeddedResource Include="Views\Main.zh-CN.resx">
+      <DependentUpon>Main.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="Views\Upgrade.resx">
       <DependentUpon>Upgrade.cs</DependentUpon>
@@ -185,10 +185,6 @@
       <DependentUpon>Main.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="Views\Main.zh-CN.resx">
-      <DependentUpon>Main.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
     <EmbeddedResource Include="Views\Login.resx">
       <DependentUpon>Login.cs</DependentUpon>
       <SubType>Designer</SubType>
@@ -211,6 +207,10 @@
       <DependentUpon>OperationPanel.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="Views\OperationPanel.zh-CN.resx">
+      <DependentUpon>OperationPanel.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -224,6 +224,9 @@
     <EmbeddedResource Include="Views\Verify.resx">
       <DependentUpon>Verify.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Views\Verify.zh-CN.resx">
+      <DependentUpon>Verify.cs</DependentUpon>
+    </EmbeddedResource>
     <None Include="app.config" />
     <None Include="app.manifest" />
     <None Include="Config.json" />

+ 1 - 1
FactoryTool_CShare/Properties/AssemblyInfo.cs

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
 //通过使用 "*",如下所示:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.1.0.1")]
+[assembly: AssemblyVersion("3.0.8.0")]
 [assembly: AssemblyFileVersion("1.0.0.1")]

+ 20 - 0
FactoryTool_CShare/Views/Main.cs

@@ -230,6 +230,7 @@ namespace MOKA_Factory_Tools
                                     }
                                     operationPanel1.DeleteIntptr += new OperationPanel.DisplayUpdateDelegate(DeleteIntptr);
                                     operationPanel1.SNKeyDownEven += new OperationPanel.SNKeyDown(SNKeyDownEven);
+                                    operationPanel1.AutoKeyRequire += new OperationPanel.AutoKeyRequireDelegate(AutoKeyRequire);
                                     IntPtr intPtr = operationPanel1.Handle;
                                     Dictionary<IntPtr, Point> part1 = new Dictionary<IntPtr, Point>();
                                     part1.Add(intPtr, (Point)new Size(operationPanel1.Right, operationPanel1.Top));
@@ -364,6 +365,7 @@ namespace MOKA_Factory_Tools
                                                 }
                                                 operationPanel1.DeleteIntptr += new OperationPanel.DisplayUpdateDelegate(DeleteIntptr);
                                                 operationPanel1.SNKeyDownEven += new OperationPanel.SNKeyDown(SNKeyDownEven);
+                                                operationPanel1.AutoKeyRequire += new OperationPanel.AutoKeyRequireDelegate(AutoKeyRequire);
                                                 IntPtr intPtr = operationPanel1.Handle;
                                                 Dictionary<IntPtr, Point> part1 = new Dictionary<IntPtr, Point>();
                                                 part1.Add(intPtr, (Point)new Size(operationPanel1.Right, operationPanel1.Top));
@@ -464,6 +466,7 @@ namespace MOKA_Factory_Tools
                             }
                             operationPanel1.DeleteIntptr += new OperationPanel.DisplayUpdateDelegate(DeleteIntptr);
                             operationPanel1.SNKeyDownEven += new OperationPanel.SNKeyDown(SNKeyDownEven);
+                            operationPanel1.AutoKeyRequire += new OperationPanel.AutoKeyRequireDelegate(AutoKeyRequire);
                             IntPtr intPtr = operationPanel1.Handle;
                             Dictionary<IntPtr, Point> part1 = new Dictionary<IntPtr, Point>();
                             part1.Add(intPtr, (Point)new Size(operationPanel1.Right, operationPanel1.Top));
@@ -611,6 +614,7 @@ namespace MOKA_Factory_Tools
                     }
                     operationPanel1.DeleteIntptr += new OperationPanel.DisplayUpdateDelegate(DeleteIntptr);
                     operationPanel1.SNKeyDownEven += new OperationPanel.SNKeyDown(SNKeyDownEven);
+                    operationPanel1.AutoKeyRequire += new OperationPanel.AutoKeyRequireDelegate(AutoKeyRequire);
                     IntPtr intPtr = operationPanel1.Handle;
                     Dictionary<IntPtr, Point> part1 = new Dictionary<IntPtr, Point>();
                     part1.Add(intPtr, (Point)new Size(operationPanel1.Right, operationPanel1.Top));
@@ -1242,6 +1246,22 @@ namespace MOKA_Factory_Tools
             }
         }
 
+        private void AutoKeyRequire(IntPtr intPtr, string key, string keytype)
+        {
+            Task.Run(() =>
+            {
+                var a = ((Dictionary<IntPtr, Point>)formlocationmsg[0]).First();
+                if (a.Key == intPtr)
+                {
+                    ;//start autokey require
+                    if (CommonMethod.AutoGetKeyStatus(midList1.host, key, keytype, ErrorDB))
+                    {
+                        CommonMethod.AutoGetKey(midList1.host, OrderText.Text.Trim(), key, keytype, ErrorDB);
+                    }
+                }
+            });
+        }
+
         private void SNKeyDownEven(IntPtr intPtr)
         {
             this.KeyDownEvent(formlocationmsg, intPtr);

+ 280 - 64
FactoryTool_CShare/Views/Main.resx

@@ -327,6 +327,144 @@
   <data name="&gt;&gt;SHOPList.ZOrder" xml:space="preserve">
     <value>9</value>
   </data>
+  <data name="&gt;&gt;BarcodeWrite.Name" xml:space="preserve">
+    <value>BarcodeWrite</value>
+  </data>
+  <data name="&gt;&gt;BarcodeWrite.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinCheckBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;BarcodeWrite.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;BarcodeWrite.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;UsinglocalIDCheck.Name" xml:space="preserve">
+    <value>UsinglocalIDCheck</value>
+  </data>
+  <data name="&gt;&gt;UsinglocalIDCheck.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinCheckBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;UsinglocalIDCheck.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;UsinglocalIDCheck.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;skinLabel8.Name" xml:space="preserve">
+    <value>skinLabel8</value>
+  </data>
+  <data name="&gt;&gt;skinLabel8.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinLabel, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinLabel8.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;skinLabel8.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;skinLabel7.Name" xml:space="preserve">
+    <value>skinLabel7</value>
+  </data>
+  <data name="&gt;&gt;skinLabel7.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinLabel, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinLabel7.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;skinLabel7.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;BarCodeLengthText.Name" xml:space="preserve">
+    <value>BarCodeLengthText</value>
+  </data>
+  <data name="&gt;&gt;BarCodeLengthText.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;BarCodeLengthText.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;BarCodeLengthText.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="&gt;&gt;BarCodeKeyCodeText.Name" xml:space="preserve">
+    <value>BarCodeKeyCodeText</value>
+  </data>
+  <data name="&gt;&gt;BarCodeKeyCodeText.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinWaterTextBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;BarCodeKeyCodeText.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;BarCodeKeyCodeText.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="&gt;&gt;BarcodeLimit.Name" xml:space="preserve">
+    <value>BarcodeLimit</value>
+  </data>
+  <data name="&gt;&gt;BarcodeLimit.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinCheckBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;BarcodeLimit.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;BarcodeLimit.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="&gt;&gt;skinLabel6.Name" xml:space="preserve">
+    <value>skinLabel6</value>
+  </data>
+  <data name="&gt;&gt;skinLabel6.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinLabel, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinLabel6.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;skinLabel6.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="&gt;&gt;PID_Num.Name" xml:space="preserve">
+    <value>PID_Num</value>
+  </data>
+  <data name="&gt;&gt;PID_Num.Type" xml:space="preserve">
+    <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;PID_Num.Parent" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;PID_Num.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <data name="skinGroupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 117</value>
+  </data>
+  <data name="skinGroupBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
+    <value>4, 3, 4, 3</value>
+  </data>
+  <data name="skinGroupBox1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
+    <value>4, 3, 4, 3</value>
+  </data>
+  <data name="skinGroupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>349, 218</value>
+  </data>
+  <data name="skinGroupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>7</value>
+  </data>
+  <data name="skinGroupBox1.Text" xml:space="preserve">
+    <value>Param:</value>
+  </data>
+  <data name="&gt;&gt;skinGroupBox1.Name" xml:space="preserve">
+    <value>skinGroupBox1</value>
+  </data>
+  <data name="&gt;&gt;skinGroupBox1.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinGroupBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinGroupBox1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;skinGroupBox1.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
   <data name="BarcodeWrite.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -606,35 +744,86 @@
   <data name="&gt;&gt;PID_Num.ZOrder" xml:space="preserve">
     <value>8</value>
   </data>
-  <data name="skinGroupBox1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 117</value>
+  <data name="&gt;&gt;skinLabel3.Name" xml:space="preserve">
+    <value>skinLabel3</value>
   </data>
-  <data name="skinGroupBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
+  <data name="&gt;&gt;skinLabel3.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinLabel, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinLabel3.Parent" xml:space="preserve">
+    <value>skinGroupBox2</value>
+  </data>
+  <data name="&gt;&gt;skinLabel3.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;TVBaud.Name" xml:space="preserve">
+    <value>TVBaud</value>
+  </data>
+  <data name="&gt;&gt;TVBaud.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinComboBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;TVBaud.Parent" xml:space="preserve">
+    <value>skinGroupBox2</value>
+  </data>
+  <data name="&gt;&gt;TVBaud.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;TVCOM.Name" xml:space="preserve">
+    <value>TVCOM</value>
+  </data>
+  <data name="&gt;&gt;TVCOM.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinComboBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;TVCOM.Parent" xml:space="preserve">
+    <value>skinGroupBox2</value>
+  </data>
+  <data name="&gt;&gt;TVCOM.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;skinLabel2.Name" xml:space="preserve">
+    <value>skinLabel2</value>
+  </data>
+  <data name="&gt;&gt;skinLabel2.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinLabel, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinLabel2.Parent" xml:space="preserve">
+    <value>skinGroupBox2</value>
+  </data>
+  <data name="&gt;&gt;skinLabel2.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="skinGroupBox2.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Microsoft YaHei UI, 10pt, style=Bold</value>
+  </data>
+  <data name="skinGroupBox2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 44</value>
+  </data>
+  <data name="skinGroupBox2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
     <value>4, 3, 4, 3</value>
   </data>
-  <data name="skinGroupBox1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
+  <data name="skinGroupBox2.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
     <value>4, 3, 4, 3</value>
   </data>
-  <data name="skinGroupBox1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>349, 218</value>
+  <data name="skinGroupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>349, 67</value>
   </data>
-  <data name="skinGroupBox1.TabIndex" type="System.Int32, mscorlib">
-    <value>7</value>
+  <data name="skinGroupBox2.TabIndex" type="System.Int32, mscorlib">
+    <value>8</value>
   </data>
-  <data name="skinGroupBox1.Text" xml:space="preserve">
-    <value>Param:</value>
+  <data name="skinGroupBox2.Text" xml:space="preserve">
+    <value>Serial Setting:</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox1.Name" xml:space="preserve">
-    <value>skinGroupBox1</value>
+  <data name="&gt;&gt;skinGroupBox2.Name" xml:space="preserve">
+    <value>skinGroupBox2</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox1.Type" xml:space="preserve">
+  <data name="&gt;&gt;skinGroupBox2.Type" xml:space="preserve">
     <value>CCWin.SkinControl.SkinGroupBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox1.Parent" xml:space="preserve">
+  <data name="&gt;&gt;skinGroupBox2.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox1.ZOrder" xml:space="preserve">
-    <value>8</value>
+  <data name="&gt;&gt;skinGroupBox2.ZOrder" xml:space="preserve">
+    <value>7</value>
   </data>
   <data name="skinLabel3.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
@@ -762,38 +951,95 @@
   <data name="&gt;&gt;skinLabel2.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name="skinGroupBox2.Font" type="System.Drawing.Font, System.Drawing">
-    <value>Microsoft YaHei UI, 10pt, style=Bold</value>
+  <data name="&gt;&gt;WBPath.Name" xml:space="preserve">
+    <value>WBPath</value>
   </data>
-  <data name="skinGroupBox2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 44</value>
+  <data name="&gt;&gt;WBPath.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinWaterTextBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
   </data>
-  <data name="skinGroupBox2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
+  <data name="&gt;&gt;WBPath.Parent" xml:space="preserve">
+    <value>skinGroupBox3</value>
+  </data>
+  <data name="&gt;&gt;WBPath.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <data name="&gt;&gt;skinButton1.Name" xml:space="preserve">
+    <value>skinButton1</value>
+  </data>
+  <data name="&gt;&gt;skinButton1.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinButton, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinButton1.Parent" xml:space="preserve">
+    <value>skinGroupBox3</value>
+  </data>
+  <data name="&gt;&gt;skinButton1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;WriteWB.Name" xml:space="preserve">
+    <value>WriteWB</value>
+  </data>
+  <data name="&gt;&gt;WriteWB.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinCheckBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;WriteWB.Parent" xml:space="preserve">
+    <value>skinGroupBox3</value>
+  </data>
+  <data name="&gt;&gt;WriteWB.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;WBInit.Name" xml:space="preserve">
+    <value>WBInit</value>
+  </data>
+  <data name="&gt;&gt;WBInit.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinCheckBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;WBInit.Parent" xml:space="preserve">
+    <value>skinGroupBox3</value>
+  </data>
+  <data name="&gt;&gt;WBInit.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="&gt;&gt;skinLabel5.Name" xml:space="preserve">
+    <value>skinLabel5</value>
+  </data>
+  <data name="&gt;&gt;skinLabel5.Type" xml:space="preserve">
+    <value>CCWin.SkinControl.SkinLabel, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
+  </data>
+  <data name="&gt;&gt;skinLabel5.Parent" xml:space="preserve">
+    <value>skinGroupBox3</value>
+  </data>
+  <data name="&gt;&gt;skinLabel5.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="skinGroupBox3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 341</value>
+  </data>
+  <data name="skinGroupBox3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
     <value>4, 3, 4, 3</value>
   </data>
-  <data name="skinGroupBox2.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
+  <data name="skinGroupBox3.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
     <value>4, 3, 4, 3</value>
   </data>
-  <data name="skinGroupBox2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>349, 67</value>
+  <data name="skinGroupBox3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>349, 90</value>
   </data>
-  <data name="skinGroupBox2.TabIndex" type="System.Int32, mscorlib">
-    <value>8</value>
+  <data name="skinGroupBox3.TabIndex" type="System.Int32, mscorlib">
+    <value>9</value>
   </data>
-  <data name="skinGroupBox2.Text" xml:space="preserve">
-    <value>Serial Setting:</value>
+  <data name="skinGroupBox3.Text" xml:space="preserve">
+    <value>WB Param:</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox2.Name" xml:space="preserve">
-    <value>skinGroupBox2</value>
+  <data name="&gt;&gt;skinGroupBox3.Name" xml:space="preserve">
+    <value>skinGroupBox3</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox2.Type" xml:space="preserve">
+  <data name="&gt;&gt;skinGroupBox3.Type" xml:space="preserve">
     <value>CCWin.SkinControl.SkinGroupBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox2.Parent" xml:space="preserve">
+  <data name="&gt;&gt;skinGroupBox3.Parent" xml:space="preserve">
     <value>$this</value>
   </data>
-  <data name="&gt;&gt;skinGroupBox2.ZOrder" xml:space="preserve">
-    <value>7</value>
+  <data name="&gt;&gt;skinGroupBox3.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
   <data name="WBPath.Location" type="System.Drawing.Point, System.Drawing">
     <value>72, 55</value>
@@ -945,36 +1191,6 @@
   <data name="&gt;&gt;skinLabel5.ZOrder" xml:space="preserve">
     <value>4</value>
   </data>
-  <data name="skinGroupBox3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>12, 341</value>
-  </data>
-  <data name="skinGroupBox3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
-    <value>4, 3, 4, 3</value>
-  </data>
-  <data name="skinGroupBox3.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
-    <value>4, 3, 4, 3</value>
-  </data>
-  <data name="skinGroupBox3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>349, 90</value>
-  </data>
-  <data name="skinGroupBox3.TabIndex" type="System.Int32, mscorlib">
-    <value>9</value>
-  </data>
-  <data name="skinGroupBox3.Text" xml:space="preserve">
-    <value>WB Param:</value>
-  </data>
-  <data name="&gt;&gt;skinGroupBox3.Name" xml:space="preserve">
-    <value>skinGroupBox3</value>
-  </data>
-  <data name="&gt;&gt;skinGroupBox3.Type" xml:space="preserve">
-    <value>CCWin.SkinControl.SkinGroupBox, CSkin, Version=16.1.14.3, Culture=neutral, PublicKeyToken=null</value>
-  </data>
-  <data name="&gt;&gt;skinGroupBox3.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name="&gt;&gt;skinGroupBox3.ZOrder" xml:space="preserve">
-    <value>6</value>
-  </data>
   <data name="skinLabel4.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>

+ 1313 - 106
FactoryTool_CShare/Views/OperationPanel.cs

@@ -61,6 +61,11 @@ namespace MOKA_Factory_Tools
         //扫描回车触发事件
         public event SNKeyDown SNKeyDownEven;
 
+        //自动key提取委托
+        public delegate void AutoKeyRequireDelegate(IntPtr intPtr, string key, string keytype);
+        //自动key提取事件
+        public event AutoKeyRequireDelegate AutoKeyRequire;
+
         //定义一个委托  调用Verify窗口;
         delegate void ShowVerifyCallback(string strMsg);
 
@@ -864,7 +869,7 @@ namespace MOKA_Factory_Tools
                         keyInfo.Hashkey.data = jObject["hash"].Value<string>();
                         keyInfo.YouTube_KEY.data = jObject["youtubekey"].Value<string>();
                         keyInfo.ACASKey_Data.data = jObject["acaskey_data"].Value<string>();
-                        //keyInfo.ACASKey_Tool.data = jObject["acaskey_tool"].Value<string>();
+                        keyInfo.ACASKey_Tool.data = jObject["acaskey_tool"].Value<string>();
                         keyInfo.DAK.data = jObject["dak"].Value<string>();
                         keyInfo.FVP.data = jObject["FVP"].Value<string>();
 
@@ -1592,7 +1597,7 @@ namespace MOKA_Factory_Tools
                 reportdata += "cikey=" + keyInfo.CI_plus.data + "&";
 
             if (WriteAttestation.Checked)
-                reportdata += "attestationmd5=" + keyInfo.Attestation.md5+ "&";
+                reportdata += "attestationmd5=" + keyInfo.AttestationMD5.data + "&";
 
             if (WriteMGK.Checked)
                 reportdata += "mgk=" + keyInfo.MGK.data + "&";
@@ -1618,8 +1623,8 @@ namespace MOKA_Factory_Tools
             if (WriteEDIDName.Checked)
                 reportdata += "EDIDModeName=" + keyInfo.EDIDModelName.data + "&";
 
-            //if (WriteACASKey.Checked)
-            //    reportdata += "acas_tool=" + keyInfo.ACASKey_Tool.data + "&";
+            if (WriteACASKey.Checked)
+                reportdata += "acas_tool=" + keyInfo.ACASKey_Tool.data + "&";
 
             if (WriteACASKey.Checked)
                 reportdata += "acas_data=" + keyInfo.ACASKey_Data.data + "&";
@@ -1692,8 +1697,6 @@ namespace MOKA_Factory_Tools
             string error = "";
             // 报错信息;
             string ErrMsg = "";
-            string psn = "";
-            string devicecode = "";
             //进工厂
             if (!TVPort.IsOpen)
             {
@@ -2153,67 +2156,275 @@ namespace MOKA_Factory_Tools
                 // 计算获取全部key耗时;
                 Stopwatch watch = new Stopwatch();
                 watch.Start();
-                // 只用一个接口获取所有Key;             
-                if ( midListNow.keytype.ContainsKey("DSN") )
+                if (WriteDID.Checked)
                 {
-                    // 读取dvicecode
-                    if (SerialCMD.GetFireTVDevcieCode(TVPort, out result, out data, out error, SerailDelay))
+                    if (CommonMethod.GetKeys(midListNow.host, "DeviceID", SN, "devicetype=tcl_unknown_model", errorDBNow, out string did, out error, orderNow, out string md5))
                     {
-                        devicecode = Encoding.ASCII.GetString(data);
-                        if (devicecode == "N/A")
+                        keyInfo.DID.data = did;
+                        Log.WriteGetKeyLog("\r\nDeviceID=" + keyInfo.DID);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetDIDError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteMac.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "MAC", SN, midListNow.keytype["MAC"], errorDBNow, out string mac, out error, orderNow, out string md5))
+                    {
+                        keyInfo.Mac.data = mac;
+                        Log.WriteGetKeyLog("\r\nMac=" + keyInfo.Mac);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetMacError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteHDCP.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "HDCP_KEY", SN, midListNow.keytype["HDCP_KEY"], errorDBNow, out string hdcp, out error, orderNow, out string md5))
+                    {
+                        keyInfo.HDCP.data = hdcp;
+                        Log.WriteGetKeyLog("\r\nHDCP=" + keyInfo.HDCP);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetHDCPError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteHDCP22.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "HDCP2.2_KEY", SN, midListNow.keytype["HDCP2.2_KEY"], errorDBNow, out string hdcp22, out error, orderNow, out string md5))
+                    {
+                        keyInfo.HDCP22.data = hdcp22;
+                        Log.WriteGetKeyLog("\r\nHDCP22=" + keyInfo.HDCP22);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetHDCP22Error, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteESN.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "NETFILX_ESN", SN, midListNow.keytype["NETFILX_ESN"], errorDBNow, out string esn, out error, orderNow, out string md5))
+                    {
+                        keyInfo.ESN.data = esn;
+                        Log.WriteGetKeyLog("\r\nESN=" + keyInfo.ESN);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetESNError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteWiDi.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "WiDi", SN, midListNow.keytype["WiDi"], errorDBNow, out string widi, out error, orderNow, out string md5))
+                    {
+                        keyInfo.WiDi.data = widi;
+                        Log.WriteGetKeyLog("\r\nWiDi=" + keyInfo.WiDi);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetWiDiError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteCiplus.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "CI_PLUS_KEY", SN, midListNow.keytype["CI_PLUS_KEY"], errorDBNow, out string ci, out error, orderNow, out string md5))
+                    {
+                        keyInfo.CI_plus.data = ci;
+                        Log.WriteGetKeyLog("\r\nCI_plus=" + keyInfo.CI_plus);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetCiError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteWidevine.Checked)
+                {
+                    if (CommonMethod.GetWidevineAnAttestationKey(
+                        midListNow.host,
+                        SN,
+                        midListNow.keytype["Widevine_KEY"],
+                        errorDBNow,
+                        out bool isAndroidTV,
+                        out string widevine,
+                        out string attestation,
+                        out error,
+                        orderNow,
+                        out string md5))
+                    {
+                        keyInfo.Widevine.data = widevine;
+                        Log.WriteGetKeyLog("\r\nWidevine=" + keyInfo.Widevine);
+
+                        if (isAndroidTV)
                         {
-                            ErrMsg = string.Format("Device code format error!\r\n{0}", devicecode);
-                            Log.WriteErrorLog(ErrMsg);
-                            goto end;
+                            keyInfo.Attestation.data = attestation;
+                            keyInfo.AttestationMD5.data = md5;
+                            Log.WriteGetKeyLog("\r\nAttestationMD5=" + keyInfo.AttestationMD5);
                         }
                     }
                     else
                     {
-                        ErrMsg = string.Format("{0}     Get Device Code Error", SN);
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetWidevineError, error);
                         Log.WriteErrorLog(ErrMsg);
                         goto end;
                     }
-
-                    // 读取psn的值;
-                    if (SerialCMD.ReadFireTVPSN(TVPort, out result, out data, out error, SerailDelay))
+                }
+                if (WriteMGK.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "MGK_KEY", SN, midListNow.keytype["MGK_KEY"], errorDBNow, out string mgk, out error, orderNow, out string md5))
                     {
-                        psn = keyInfo._PSN.data = Encoding.ASCII.GetString(data);
+                        keyInfo.MGK.data = mgk;
+                        Log.WriteGetKeyLog("\r\nMGK=" + keyInfo.MGK);
                     }
                     else
                     {
-                        ErrMsg = string.Format("Failed to read PSN when requesting DSN !\r\n{0}", devicecode);
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetMGKError, error);
                         Log.WriteErrorLog(ErrMsg);
                         goto end;
                     }
                 }
-
-                // 部分订单无key,只有Roku信息;
-                if (midListNow.keytype.Count() != 0)
+                if (WriteFairplay.Checked)
                 {
-                    if (!CommonMethod.GetIDMKeys(midListNow.host, SN, orderNow, psn, devicecode, errorDBNow, out keyInfo, out error))
+                    if (CommonMethod.GetKeys(midListNow.host, "Fairplay_KEY", SN, midListNow.keytype["Fairplay_KEY"], errorDBNow, out string fairplay, out error, orderNow, out string md5))
+                    {
+                        keyInfo.Fairplay.data = fairplay;
+                        Log.WriteGetKeyLog("\r\nFairplay=" + keyInfo.Fairplay);
+                    }
+                    else
                     {
-                        ErrMsg = string.Format("{0} GetIDMKeys Failed!\r\n{1}", SN, error);
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetFairplayError, error);
                         Log.WriteErrorLog(ErrMsg);
                         goto end;
                     }
                 }
-                else
+                if (WriteWifiMac.Checked)
                 {
-                    Log.WriteInfoLog("mid type is null, don't query idm keys");
+                    if (CommonMethod.GetKeys(midListNow.host, "MAC", "WiFi_MAC" + SN, midListNow.keytype["MAC"], errorDBNow, out string mac, out error, orderNow, out string md5))
+                    {
+                        keyInfo.WiFi_MAC.data = mac;
+                        Log.WriteGetKeyLog("\r\nWiFi_MAC=" + keyInfo.WiFi_MAC);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetMacError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
                 }
-
-                if (midListNow.keytype.ContainsKey("DSN"))
+                if (WriteBTMac.Checked)
                 {
-                    // 预防切了pid后,deviceCode变化了;
-                    if (keyInfo.DSN.data.IndexOf(devicecode) == -1)
+                    if (CommonMethod.GetKeys(midListNow.host, "MAC", "BT_MAC" + SN, midListNow.keytype["MAC"], errorDBNow, out string mac, out error, orderNow, out string md5))
                     {
-                        ErrMsg = string.Format("The device code [{0}] is not included in the DSN [{1}]!\r\n", devicecode, keyInfo.DSN.data);
+                        keyInfo.BT_MAC.data = mac;
+                        Log.WriteGetKeyLog("\r\nBT_MAC=" + keyInfo.BT_MAC);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetMacError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteECP.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "ECP_KEY", SN, midListNow.keytype["ECP_KEY"], errorDBNow, out string ecp, out error, orderNow, out string md5))
+                    {
+                        keyInfo.ECP.data = ecp;
+                        Log.WriteGetKeyLog("\r\nECP_KEY=" + keyInfo.ECP);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetECPError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteLEK.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "LEK", SN, midListNow.keytype["LEK"], errorDBNow, out string lek, out error, orderNow, out string md5))
+                    {
+                        keyInfo.LEK.data = lek;
+                        Log.WriteGetKeyLog("\r\nLEK=" + keyInfo.LEK);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetLEKError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WritePEK.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "PEK", SN, midListNow.keytype["PEK"], errorDBNow, out string pek, out error, orderNow, out string md5))
+                    {
+                        keyInfo.PEK.data = pek;
+                        Log.WriteGetKeyLog("\r\nPEK=" + keyInfo.PEK);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetPEKError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WritePlayready.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "PlayReady_key", SN, midListNow.keytype["PlayReady_key"], errorDBNow, out string playready, out error, orderNow, out string md5))
+                    {
+                        keyInfo.Playready.data = playready;
+                        Log.WriteGetKeyLog("\r\nPlayReady_key=" + keyInfo.Playready);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetPlayreadyError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteHash.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "Hashkey", SN, midListNow.keytype["Hashkey"], errorDBNow, out string hash, out error, orderNow, out string md5))
+                    {
+                        keyInfo.Hashkey.data = hash;
+                        Log.WriteGetKeyLog("\r\nHashkey=" + keyInfo.Hashkey);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetHashkeyError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteYouTube.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "YouTube_KEY", SN, midListNow.keytype["YouTube_KEY"], errorDBNow, out string youtube, out error, orderNow, out string md5))
+                    {
+                        keyInfo.YouTube_KEY.data = youtube;
+                        Log.WriteGetKeyLog("\r\nYouTube_KEY=" + keyInfo.YouTube_KEY);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetYouTubekeyError, error);
                         Log.WriteErrorLog(ErrMsg);
                         goto end;
                     }
                 }
-
-                #region EDID屏抄写是从MID中获取值;
                 if (WriteEDIDPID.Checked)
                 {
                     keyInfo.EDIDPid.data = midListNow.keytype["edid_pid"];
@@ -2222,7 +2433,40 @@ namespace MOKA_Factory_Tools
                 {
                     keyInfo.EDIDModelName.data = midListNow.keytype["edid_model_name"];
                 }
-                #endregion
+                if (WriteACASKey.Checked)
+                {
+                    if (CommonMethod.GetAcasKey(midListNow.host, "ACAS_KEY", SN, midListNow.keytype["ACAS_KEY"], errorDBNow, orderNow, out string acaskey_data, out string acaskey_datamd5, out string acaskey_tool, out string acaskey_toolmd5, out error))
+                    {
+                        keyInfo.ACASKey_Data.data = acaskey_data;
+                        keyInfo.ACASKey_DataMd5.data = acaskey_datamd5;
+
+                        keyInfo.ACASKey_Tool.data = acaskey_tool;
+                        keyInfo.ACASKey_ToolMd5.data = acaskey_toolmd5;
+
+                        Log.WriteGetKeyLog("\r\nACAS_KEY_DATA=" + keyInfo.ACASKey_Data.data + "\r\nACAS_KEY_MD5=" + keyInfo.ACASKey_DataMd5);
+                        Log.WriteGetKeyLog("\r\nACAS_KEY_TOOL=" + keyInfo.ACASKey_Tool.data + "\r\nACAS_KEY_TOOLMD5=" + keyInfo.ACASKey_ToolMd5);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetACASKeyError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
+                if (WriteDAK.Checked)
+                {
+                    if (CommonMethod.GetKeys(midListNow.host, "DAK", SN, midListNow.keytype["DAK"], errorDBNow, out string hash, out error, orderNow, out string md5))
+                    {
+                        keyInfo.DAK.data = hash;
+                        Log.WriteGetKeyLog("\r\nDAK=" + keyInfo.DAK);
+                    }
+                    else
+                    {
+                        ErrMsg = String.Format("{0}\r\n{1}", LResource.GetDAKKeyError, error);
+                        Log.WriteErrorLog(ErrMsg);
+                        goto end;
+                    }
+                }
                 watch.Stop();
                 Log.WriteInfoLog(string.Format("Get All Keys Elapsed={0}", watch.Elapsed.TotalMilliseconds));
             }
@@ -3083,6 +3327,7 @@ namespace MOKA_Factory_Tools
                 {
                     ErrMsg = string.Format("Widevine format error!\r\n{0}", keyInfo.Widevine.data);
                     Log.WriteErrorLog(ErrMsg);
+                    //MessageBox.Show(LResource.WidevineFormatError + "\r\n" + keyInfo.Widevine);
                     goto end;
                 }
                 byte[] WidevineData = SerialInit.HexToByte(keyInfo.Widevine.data);
@@ -3258,6 +3503,7 @@ namespace MOKA_Factory_Tools
                                         goto end;
                                     }
                                 }
+
                             }
                         }
                         else
@@ -4527,60 +4773,126 @@ namespace MOKA_Factory_Tools
                 }
                 else
                 {// 如果是G客户,要在抄写其他key前时行fsn+psn查重处理;
-                    if (!CommonMethod.IsNumberAndWord(keyInfo.DSN.data))
+                    // 计算函数耗时;
+                    Stopwatch watch = new Stopwatch();
+                    watch.Start();
+                    if (SN == null)
                     {
-                        ErrMsg = string.Format("DSN format error!\r\n{0}", keyInfo.DSN.data);
-                        Log.WriteErrorLog(ErrMsg);
+                        MessageBox.Show("Please scan to trigger testing");
                         goto end;
                     }
-                    byte[] DSNData = System.Text.Encoding.ASCII.GetBytes(keyInfo.DSN.data);
-                    Log.WriteInfoLog("Write DSN...");
-                    if (SerialCMD.SetFireTVDSN(TVPort, DSNData, out result, out data, out error, SerailDelay))
+                    if (SN.Trim().Length == 0)
                     {
-                        SetsuccessStatus(m_writeDSN);
-                        Log.WriteInfoLog("Check DSN...");
-                        if (cfg_writecheck.DSNCheckcheck ? SerialCMD.CheckFireTVDSN(TVPort, out result, out data, out error, SerailDelay) : true)
+                        MessageBox.Show("Please scan to trigger testing");
+                        goto end;
+                    }
+                    Log.WriteInfoLog("Read FireTV Device Code...\r\n");
+                    if (SerialCMD.GetFireTVDevcieCode(TVPort, out result, out data, out error, SerailDelay))
+                    {
+                        string devicecode = Encoding.ASCII.GetString(data);
+                        if (devicecode == "N/A")
                         {
-                            SetsuccessStatus(m_checkDSN);
-                            Log.WriteInfoLog("Read DSN...");
-                            if (cfg_readcheck.DSNReadcheck ? SerialCMD.GetFireTVDSN(TVPort, out result, out data, out error, SerailDelay) : true)
+                            ErrMsg = string.Format("Device code format error!\r\n{0}", devicecode);
+                            Log.WriteErrorLog(ErrMsg);
+                            goto end;
+                        }
+
+                        // 先读取psn的值;
+                        byte[] result_psn;
+                        byte[] data_psn;
+                        string error_psn;
+                        if (SerialCMD.ReadFireTVPSN(TVPort, out result_psn, out data_psn, out error_psn, SerailDelay))
+                        {
+                            string psn = keyInfo._PSN.data = Encoding.ASCII.GetString(data_psn);
+                            if (CommonMethod.GetFireTVDsn(midListNow.host, orderNow, Encoding.ASCII.GetString(data), SN, psn, out string dsn, out error_psn, errorDBNow))
                             {
-                                if (SerialInit.BytesCompare_Base64(data, DSNData))
+                                // 预防切了pid后,deviceCode变化了;
+                                if ( dsn.IndexOf(devicecode) == -1 )
                                 {
-                                    SetsuccessStatus(m_readDSN);
-                                    //DSN读取别对成功
+                                    ErrMsg = string.Format("The device code [{0}] is not included in the DSN [{1}]!\r\n", devicecode, dsn);
+                                    Log.WriteErrorLog(ErrMsg);
+                                    goto end;
                                 }
-                                else
+
+                                keyInfo.DSN.data = dsn;
+                                if (!CommonMethod.IsNumberAndWord(keyInfo.DSN.data))
                                 {
-                                    SetfailStatus(m_readDSN);
-                                    ErrMsg = string.Format("{0}  contrast DSN fail!", SN);
+                                    ErrMsg = string.Format("DSN format error!\r\n{0}", keyInfo.DSN.data);
                                     Log.WriteErrorLog(ErrMsg);
                                     goto end;
                                 }
-                            }
-                            else
-                            {
-                                SetfailStatus(m_readDSN);
-                                ErrMsg = string.Format("{0}  read DSN fail!", SN);
-                                Log.WriteErrorLog(ErrMsg);
-                                goto end;
-                            }
-                        }
-                        else
-                        {
-                            SetfailStatus(m_checkDSN);
-                            ErrMsg = string.Format("{0}  check DSN fail!", SN);
-                            Log.WriteErrorLog(ErrMsg);
-                            goto end;
-                        }
-                    }
-                    else
-                    {
-                        SetfailStatus(m_writeDSN);
-                        ErrMsg = string.Format("{0}  Write DSN fail!", SN);
+                                byte[] DSNData = System.Text.Encoding.ASCII.GetBytes(keyInfo.DSN.data);
+                                Log.WriteInfoLog("Write DSN...");
+                                if (SerialCMD.SetFireTVDSN(TVPort, DSNData, out result, out data, out error, SerailDelay))
+                                {
+                                    SetsuccessStatus(m_writeDSN);
+                                    Log.WriteInfoLog("Check DSN...");
+                                    if (cfg_writecheck.DSNCheckcheck ? SerialCMD.CheckFireTVDSN(TVPort, out result, out data, out error, SerailDelay) : true)
+                                    {
+                                        SetsuccessStatus(m_checkDSN);
+                                        Log.WriteInfoLog("Read DSN...");
+                                        if (cfg_readcheck.DSNReadcheck ? SerialCMD.GetFireTVDSN(TVPort, out result, out data, out error, SerailDelay) : true)
+                                        {
+                                            if (SerialInit.BytesCompare_Base64(data, DSNData))
+                                            {
+                                                SetsuccessStatus(m_readDSN);
+                                                //DSN读取别对成功
+                                            }
+                                            else
+                                            {
+                                                SetfailStatus(m_readDSN);
+                                                ErrMsg = string.Format("{0}  contrast DSN fail!", SN);
+                                                Log.WriteErrorLog(ErrMsg);
+                                                goto end;
+                                            }
+                                        }
+                                        else
+                                        {
+                                            SetfailStatus(m_readDSN);
+                                            ErrMsg = string.Format("{0}  read DSN fail!", SN);
+                                            Log.WriteErrorLog(ErrMsg);
+                                            goto end;
+                                        }
+                                    }
+                                    else
+                                    {
+                                        SetfailStatus(m_checkDSN);
+                                        ErrMsg = string.Format("{0}  check DSN fail!", SN);
+                                        Log.WriteErrorLog(ErrMsg);
+                                        goto end;
+                                    }
+                                }
+                                else
+                                {
+                                    SetfailStatus(m_writeDSN);
+                                    ErrMsg = string.Format("{0}  Write DSN fail!", SN);
+                                    Log.WriteErrorLog(ErrMsg);
+                                    goto end;
+                                }
+                            }
+                            else
+                            {
+                                ErrMsg = string.Format("错误的PSN {0}", error_psn);
+                                Log.WriteErrorLog(ErrMsg);
+                                goto end;
+                            }
+                        }
+                        else
+                        {
+                            ErrMsg = string.Format("Failed to read PSN when requesting DSN !\r\n{0}", devicecode);
+                            Log.WriteErrorLog(ErrMsg);
+                            goto end;
+                        }
+                    }
+                    else
+                    {
+                        ErrMsg = string.Format("{0}     Get Device Code Error", SN);
                         Log.WriteErrorLog(ErrMsg);
                         goto end;
                     }
+
+                    watch.Stop();
+                    Log.WriteInfoLog(string.Format("Write DSN Elapsed={0}", watch.Elapsed.TotalMilliseconds));
                 }
 
                 keyInfo.DSN.result = true;
@@ -4589,7 +4901,7 @@ namespace MOKA_Factory_Tools
             #region 小米FireTV功能;
             if (FunctionSettingNow.MITVEnable)
             {
-#if true
+#if false
                 // 读取PSN;
                 byte[] result_psn;
                 byte[] data_psn;
@@ -4676,7 +4988,7 @@ namespace MOKA_Factory_Tools
                     }
                 }                
             }
-            #endregion
+#endregion
 
             // 生成IDM报文;
             keycontent = GenerateReportInfo();
@@ -4695,7 +5007,7 @@ namespace MOKA_Factory_Tools
                 }
             }
 
-            #region 波兰工厂DHA功能-抄写所有Key后执行Trigger和Check指令;
+#region 波兰工厂DHA功能-抄写所有Key后执行Trigger和Check指令;
             if (FunctionSettingNow.DHA == true)
             {
                 Log.WriteInfoLog("Start to Trigger DHA...");
@@ -4822,7 +5134,7 @@ namespace MOKA_Factory_Tools
                 CommonMethod.ExportSNACASID(orderNow, SN, Encoding.ASCII.GetString(data));
             }
 
-            #region 小米FireTV功能;
+#region 小米FireTV功能;
             if (FunctionSettingNow.MITVEnable)
             {
                 if (!ReportMIInfo(out error))
@@ -4833,12 +5145,12 @@ namespace MOKA_Factory_Tools
                     goto end;
                 }
             }
-            #endregion
+#endregion
 
             Thread.Sleep(FunctionSettingNow.Wait_after_completion);
             SetsuccessStatus(ResultStatus);
         end:
-            #region 只有惠州工厂才启用G客户防呆措施;
+#region 只有惠州工厂才启用G客户防呆措施;
             if (FunctionSettingNow.NTF)
             {
                 string strLastResult = "";
@@ -4924,7 +5236,7 @@ namespace MOKA_Factory_Tools
                     CommonMethod.GeneratKaylaData(FunctionSettingNow.Line, FunctionSettingNow.Station, OrderText.Text, SN, startTime, DateTime.Now, returnObject, keyInfo, TestResult != 0 ? true : false);
                 }
             }
-            #endregion
+#endregion
 
             if (TestResult == 0)
             {
@@ -4977,119 +5289,120 @@ namespace MOKA_Factory_Tools
         /// <returns></returns>
         public bool UpdateKeys(Dictionary<string, string> keys, bool autokey)
         {
+            GetOrderRemainKeyCount(orderNow);
             if (keys.ContainsKey("DeviceID"))
             {
                 if (cfg_writedone.DIDWrite_YesNo)
                     SetCheckboxStatus(WriteDID, true);
-                UpdateKeyCountOnline("DeviceID", midListNow.clienttype, autokey);
+                UpdateKeyCount("DeviceID", midListNow.clienttype, autokey);
             }
             if (keys.ContainsKey("MAC"))
             {
                 if (cfg_writedone.MacWrite_YesNo)
                     SetCheckboxStatus(WriteMac, true);
-                UpdateKeyCountOnline("MAC", keys["MAC"], autokey);
+                UpdateKeyCount("MAC", keys["MAC"], autokey);
             }
             if (keys.ContainsKey("HDCP_KEY"))
             {
                 if (cfg_writedone.HDCPWrite_YesNo)
                     SetCheckboxStatus(WriteHDCP, true);
-                UpdateKeyCountOnline("HDCP_KEY", keys["HDCP_KEY"], autokey);
+                UpdateKeyCount("HDCP_KEY", keys["HDCP_KEY"], autokey);
             }
             if (keys.ContainsKey("CI_PLUS_KEY"))
             {
                 if (cfg_writedone.CI_plusWrite_YesNo)
                     SetCheckboxStatus(WriteCiplus, true);
-                UpdateKeyCountOnline("CI_PLUS_KEY", keys["CI_PLUS_KEY"], autokey);
+                UpdateKeyCount("CI_PLUS_KEY", keys["CI_PLUS_KEY"], autokey);
             }
             if (keys.ContainsKey("WiDi"))
             {
                 if (cfg_writedone.WiDiWrite_YesNo)
                     SetCheckboxStatus(WriteWiDi, true);
-                UpdateKeyCountOnline("WiDi", keys["WiDi"], autokey);
+                UpdateKeyCount("WiDi", keys["WiDi"], autokey);
             }
             if (keys.ContainsKey("Widevine_KEY"))
             {
                 if (cfg_writedone.WidevineWrite_YesNo)
                     SetCheckboxStatus(WriteWidevine, true);
-                UpdateKeyCountOnline("Widevine_KEY", keys["Widevine_KEY"], autokey);
+                UpdateKeyCount("Widevine_KEY", keys["Widevine_KEY"], autokey);
             }
             if (keys.ContainsKey("HDCP2.2_KEY"))
             {
                 if (cfg_writedone.HDCP22Write_YesNo)
                     SetCheckboxStatus(WriteHDCP22, true);
-                UpdateKeyCountOnline("HDCP2.2_KEY", keys["HDCP2.2_KEY"], autokey);
+                UpdateKeyCount("HDCP2.2_KEY", keys["HDCP2.2_KEY"], autokey);
             }
             if (keys.ContainsKey("NETFILX_ESN"))
             {
                 if (cfg_writedone.ESNWrite_YesNo)
                     SetCheckboxStatus(WriteESN, true);
-                UpdateKeyCountOnline("NETFILX_ESN", keys["NETFILX_ESN"], autokey);
+                UpdateKeyCount("NETFILX_ESN", keys["NETFILX_ESN"], autokey);
             }
             if (keys.ContainsKey("Attestation_key"))
             {
                 if (cfg_writedone.AttestationWrite_YesNo)
                     SetCheckboxStatus(WriteAttestation, true);
-                UpdateKeyCountOnline("Attestation_key", keys["Attestation_key"], autokey);
+                UpdateKeyCount("Attestation_key", keys["Attestation_key"], autokey);
             }
             if (keys.ContainsKey("MGK_KEY"))
             {
                 if (cfg_writedone.MGKWrite_YesNo)
                     SetCheckboxStatus(WriteMGK, true);
-                UpdateKeyCountOnline("MGK_KEY", keys["MGK_KEY"], autokey);
+                UpdateKeyCount("MGK_KEY", keys["MGK_KEY"], autokey);
             }
             if (keys.ContainsKey("Fairplay_KEY"))
             {
                 if (cfg_writedone.FairplayWrite_YesNo)
                     SetCheckboxStatus(WriteFairplay, true);
-                UpdateKeyCountOnline("Fairplay_KEY", keys["Fairplay_KEY"], autokey);
+                UpdateKeyCount("Fairplay_KEY", keys["Fairplay_KEY"], autokey);
             }
             if (keys.ContainsKey("ECP_KEY"))
             {
                 if (cfg_writedone.ECPWrite_YesNo)
                     SetCheckboxStatus(WriteECP, true);
-                UpdateKeyCountOnline("ECP_KEY", keys["ECP_KEY"], autokey);
+                UpdateKeyCount("ECP_KEY", keys["ECP_KEY"], autokey);
             }
             if (keys.ContainsKey("WiFi_MAC"))
             {
                 if (cfg_writedone.WifiMacWrite_YesNo)
                     SetCheckboxStatus(WriteWifiMac, true);
-                UpdateKeyCountOnline("WiFi_MAC", keys["WiFi_MAC"], autokey);
+                UpdateKeyCount("WiFi_MAC", keys["WiFi_MAC"], autokey);
             }
             if (keys.ContainsKey("BT_MAC"))
             {
                 if (cfg_writedone.BTMacWrite_YesNo)
                     SetCheckboxStatus(WriteBTMac, true);
-                UpdateKeyCountOnline("BT_MAC", keys["BT_MAC"], autokey);
+                UpdateKeyCount("BT_MAC", keys["BT_MAC"], autokey);
             }
             if (keys.ContainsKey("LEK"))
             {
                 if (cfg_writedone.LEKWrite_YesNo)
                     SetCheckboxStatus(WriteLEK, true);
-                UpdateKeyCountOnline("LEK", keys["LEK"], false);
+                UpdateKeyCount("LEK", keys["LEK"], false);
             }
             if (keys.ContainsKey("PEK"))
             {
                 if (cfg_writedone.PEKWrite_YesNo)
                     SetCheckboxStatus(WritePEK, true);
-                UpdateKeyCountOnline("PEK", keys["PEK"], false);
+                UpdateKeyCount("PEK", keys["PEK"], false);
             }
             if (keys.ContainsKey("PlayReady_key"))
             {
                 if (cfg_writedone.PlayreadyWrite_YesNo)
                     SetCheckboxStatus(WritePlayready, true);
-                UpdateKeyCountOnline("PlayReady_key", keys["PlayReady_key"], false);
+                UpdateKeyCount("PlayReady_key", keys["PlayReady_key"], false);
             }
             if (keys.ContainsKey("Hashkey"))
             {
                 if (cfg_writedone.HashWrite_YesNo)
                     SetCheckboxStatus(WriteHash, true);
-                UpdateKeyCountOnline("Hashkey", keys["Hashkey"], false);
+                UpdateKeyCount("Hashkey", keys["Hashkey"], false);
             }
             if (keys.ContainsKey("YouTube_KEY"))
             {
                 if (cfg_writedone.YouTubeWrite_YesNo)
                     SetCheckboxStatus(WriteYouTube, true);
-                UpdateKeyCountOnline("YouTube_KEY", keys["YouTube_KEY"], false);
+                UpdateKeyCount("YouTube_KEY", keys["YouTube_KEY"], false);
             }
             if (keys.ContainsKey("DSN"))
             {
@@ -5110,35 +5423,929 @@ namespace MOKA_Factory_Tools
             {
                 if (cfg_writedone.ACASKeyWrite_YesNo)
                     SetCheckboxStatus(WriteACASKey, true);
-                UpdateKeyCountOnline("ACAS_KEY", keys["ACAS_KEY"], false);
+                UpdateKeyCount("ACAS_KEY", keys["ACAS_KEY"], false);
             }
             if (keys.ContainsKey("DAK"))
             {
                 if (cfg_writedone.DAKWrite_YesNo)
                     SetCheckboxStatus(WriteDAK, true);
-                UpdateKeyCountOnline("DAK", keys["DAK"], false);
+                UpdateKeyCount("DAK", keys["DAK"], false);
             }
             if (keys.ContainsKey("FVP"))
             {
                 if (cfg_writedone.FVPWrite_YesNo)
                     SetCheckboxStatus(WriteFVP, true);
-                UpdateKeyCountOnline("FVP", keys["FVP"], false);
+                UpdateKeyCount("FVP", keys["FVP"], false);
             }
             return true;
         }
 
 
         /// <summary>
-        /// 在线获取key数量,更新Keycount
+        /// 获取key数量,更新Keycount
         /// </summary>
         /// <param name="key">key种类</param>
         /// <param name="keytype">key的具体类型</param>
         /// <returns></returns>
-        public bool UpdateKeyCountOnline(string key, string keytype, bool autokey)
+        public bool UpdateKeyCount(string key, string keytype, bool autokey)
         {
+            string url = midListNow.host;
+            string url1;
+            string count;
+            string code;
+            string desc;
+            HttpHelper http = new HttpHelper();
+            HttpItem item = new HttpItem()
+            {
+                Encoding = Encoding.Default,
+                Method = "post",
+                ContentType = "application/x-www-form-urlencoded"
+            };
+            switch (key)
+            {
+                case "DeviceID":
+                    {
+                        url1 = url + "/statdeviceid.do?";
+                        item.URL = url1;
+                        item.Postdata = "devicetype=tcl_unknown_model";
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetDeviceID count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(DIDCount, count, 2);
+                                else
+                                    SetKeyCountStatus(DIDCount, count, 0);
+                                if (autokey && WriteDID.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, "tcl_unknown_model");
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, "tcl_unknown_model");
+                                }
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse DID count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(DIDCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get DID count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(DIDCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "MAC":
+                    {
+                        url1 = url + "/statmac.do?";
+                        item.URL = url1;
+                        item.Postdata = "typeString=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetMac count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(MacCount, count, 2);
+                                else
+                                    SetKeyCountStatus(MacCount, count, 0);
+                                if (autokey && WriteMac.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse Mac count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(MacCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get Mac count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(MacCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "HDCP_KEY":
+                    {
+                        url1 = url + "/stathdcpkey.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetHDCP_KEY count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(HDCPCount, count, 2);
+                                else
+                                    SetKeyCountStatus(HDCPCount, count, 0);
+                                if (autokey && WriteHDCP.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse hdcp count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(HDCPCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get hdcp count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(HDCPCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "CI_PLUS_KEY":
+                    {
+                        url1 = url + "/statcikey.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetCI_PLUS_KEY count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(CICount, count, 2);
+                                else
+                                    SetKeyCountStatus(CICount, count, 0);
+                                if (autokey && WriteCiplus.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parses ciplus count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(CICount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get ciplus count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(CICount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "WiDi":
+                    {
+                        url1 = url + "/statwidi.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetWiDi count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(WidiCount, count, 2);
+                                else
+                                    SetKeyCountStatus(WidiCount, count, 0);
+                                if (autokey && WriteWiDi.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse widi count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(WidiCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get widi count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(WidiCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "Widevine_KEY":
+                    {
+                        url1 = url + "/statWidevineAndAttestation.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetWidevine_KEY count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(WideVineCount, count, 2);
+                                else
+                                    SetKeyCountStatus(WideVineCount, count, 0);
+                                if (autokey && WriteWidevine.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse widevine count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(WideVineCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get widevine count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(WideVineCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "HDCP2.2_KEY":
+                    {
+                        url1 = url + "/stathdcpkey2.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetHDCP2.2_KEY count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(HDCP22Count, count, 2);
+                                else
+                                    SetKeyCountStatus(HDCP22Count, count, 0);
+                                if (autokey && WriteHDCP22.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse hdcp22 count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(HDCP22Count, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get hdcp22 count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(HDCP22Count, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "NETFILX_ESN":
+                    {
+                        url1 = url + "/statnetfilxesn.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetNETFILX_ESN count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(ESNCount, count, 2);
+                                else
+                                    SetKeyCountStatus(ESNCount, count, 0);
+                                if (autokey && WriteESN.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse esn count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(ESNCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get esn count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(ESNCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "Attestation_key":
+                    {
+                        url1 = url + "/statWidevineAndAttestation.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetAttestation_key count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(AttestationCount, count, 2);
+                                else
+                                    SetKeyCountStatus(AttestationCount, count, 0);
+                                if (autokey && WriteAttestation.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parses attestation count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(AttestationCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get ciplus count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(AttestationCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "MGK_KEY":
+                    {
+                        url1 = url + "/statmgk.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetMGK count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(MGKCount, count, 2);
+                                else
+                                    SetKeyCountStatus(MGKCount, count, 0);
+                                if (autokey && WriteMGK.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse MGK count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(MGKCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get MGK count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(MGKCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "Fairplay_KEY":
+                    {
+                        url1 = url + "/statfairplay.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetFairplay_KEY count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(FairplayCount, count, 2);
+                                else
+                                    SetKeyCountStatus(FairplayCount, count, 0);
+                                if (autokey && WriteFairplay.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse Fairplay count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(FairplayCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get Fairplay count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(FairplayCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "ECP_KEY":
+                    {
+                        url1 = url + "/statecp.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetECP_KEY count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(ECPCount, count, 2);
+                                else
+                                    SetKeyCountStatus(ECPCount, count, 0);
+                                if (autokey && WriteECP.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse ECP count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(ECPCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get ECP count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(ECPCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "WiFi_MAC":
+                    {
+                        url1 = url + "/statmac.do?";
+                        item.URL = url1;
+                        item.Postdata = "typeString=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetWifiMac count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(WifiMacCount, count, 2);
+                                else
+                                    SetKeyCountStatus(WifiMacCount, count, 0);
+                                if (autokey && WriteWifiMac.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse WifiMac count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(WifiMacCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get WifiMac count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(WifiMacCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "BT_MAC":
+                    {
+                        url1 = url + "/statmac.do?";
+                        item.URL = url1;
+                        item.Postdata = "typeString=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetBTMac count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(BTMacCount, count, 2);
+                                else
+                                    SetKeyCountStatus(BTMacCount, count, 0);
+                                if (autokey && WriteBTMac.Checked)
+                                {
+                                    int keycount = Convert.ToInt32(count.Replace(",", ""));
+                                    if (availableCount != "unknow")
+                                    {
+                                        if (Convert.ToInt32(availableCount) > keycount)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                        else if (keycount < 500)
+                                            AutoKeyRequire(this.Handle, key, keytype);
+                                    }
+                                    else if (keycount < 500)
+                                        AutoKeyRequire(this.Handle, key, keytype);
+                                }
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse BTMac count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(BTMacCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get BTMac count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(BTMacCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "LEK":
+                    {
+                        url1 = url + "/statlek.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetLEK count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(LEKCount, count, 2);
+                                else
+                                    SetKeyCountStatus(LEKCount, count, 0);
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse LEK count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(LEKCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get LEK count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(LEKCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "PEK":
+                    {
+                        url1 = url + "/statpek.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetPEK count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(PEKCount, count, 2);
+                                else
+                                    SetKeyCountStatus(PEKCount, count, 0);
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse PEK count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(PEKCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get PEK count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(PEKCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "PlayReady_key":
+                    {
+                        url1 = url + "/statplayready.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetPlayReady_key count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(PlayreadyCount, count, 2);
+                                else
+                                    SetKeyCountStatus(PlayreadyCount, count, 0);
+
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse PlayReady_key count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(PlayreadyCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get PlayReady_key count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(PlayreadyCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "Hashkey":
+                    {
+                        url1 = url + "/stathash.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetHashkey count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(HashCount, count, 2);
+                                else
+                                    SetKeyCountStatus(HashCount, count, 0);
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse Hashkey count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(HashCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get Hashkey count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(HashCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "YouTube_KEY":
+                    {
+                        url1 = url + "/statYoutubeKey.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetYoutubehkey count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(YouTubeCount, count, 2);
+                                else
+                                    SetKeyCountStatus(YouTubeCount, count, 0);
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse Youtube key count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(YouTubeCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get Youtube key count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(YouTubeCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "ACAS_KEY": // 获取ACAS KEY数量;
+                    {
+                        url1 = url + "/statAcasKey.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetACASkey count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(ACASKeyCount, count, 2);
+                                else
+                                    SetKeyCountStatus(ACASKeyCount, count, 0);
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse ACAS key count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(ACASKeyCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get ACAS key count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(ACASKeyCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                case "DAK":
+                    {
+                        url1 = url + "/statdak.do?";
+                        item.URL = url1;
+                        item.Postdata = "type=" + keytype;
+                        HttpResult result = http.GetHtml(item);
+                        if (result.StatusCode == System.Net.HttpStatusCode.OK)
+                        {
+                            Log.WriteGetKeyLog("\r\nGetDAK count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                            if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                            {
+                                if (count == "0")
+                                    SetKeyCountStatus(DAKCount, count, 2);
+                                else
+                                    SetKeyCountStatus(DAKCount, count, 0);
+                            }
+                            else
+                            {
+                                CommonMethod.ReportErrormsg("Fail to parse DAK count", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                                SetKeyCountStatus(DAKCount, code + "Error", 1);
+                            }
+                        }
+                        else
+                        {
+                            CommonMethod.ReportErrormsg("Fail to get DAK count", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                            SetKeyCountStatus(DAKCount, result.StatusDescription, 1);
+                            return false;
+                        }
+                        break;
+                    }
+                default:
+                    {
+                        break;
+                    }
+            }
             return true;
         }
 
+
+        /// <summary>
+        /// 获取订单可用key余量
+        /// </summary>
+        /// <param name="order">订单号</param>
+        /// <returns></returns>
+        public bool GetOrderRemainKeyCount(string order)
+        {
+            string url = midListNow.host;
+            string url1;
+            string count;
+            string code;
+            string desc;
+            if (!CommonMethod.HTTPChecker(url))
+                return false;
+            HttpHelper http = new HttpHelper();
+            HttpItem item = new HttpItem()
+            {
+                Encoding = Encoding.Default,
+                Method = "post",
+                ContentType = "application/x-www-form-urlencoded",
+                Timeout = 3000
+            };
+            url1 = url + "/getAvailableKeyCount.do?";
+            item.URL = url1;
+            item.Postdata = "ordernum=" + order;
+            HttpResult result = http.GetHtml(item);
+            if (result.StatusCode == System.Net.HttpStatusCode.OK)
+            {
+                Log.WriteGetKeyLog("\r\nGetOrderRemainKeyCount count:\r\n" + item.URL + "\r\n" + item.Postdata + "\r\n" + result.Html);
+                if (Xmlconfig.KeyCountXml(result.Html, "response", "count", out code, out desc, out count))
+                {
+                    availableCount = count.Replace(",", "");
+                }
+                else
+                {
+                    availableCount = "unknow";
+                    CommonMethod.ReportErrormsg("Fail to parse GetOrderRemainKeyCount", desc + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                }
+            }
+            else
+            {
+                availableCount = "unknow";
+                CommonMethod.ReportErrormsg("Fail to get GetOrderRemainKeyCount", result.StatusDescription + "\r\n" + result.Html + "\r\nAddress: " + item.URL + "\r\nPostdata: " + item.Postdata, errorDBNow);
+                return false;
+            }
+            return true;
+        }
+
+
         /// <summary>
         /// 按键触发在线抄写
         /// 注意:此按键的作用是给不需要输入SN号的工厂使用;

File diff suppressed because it is too large
+ 161 - 164
FactoryTool_CShare/Views/OperationPanel.resx


+ 150 - 31
FactoryTool_CShare/Views/OperationPanel.zh-CN.resx

@@ -117,15 +117,12 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="BtnRefresh.Location" type="System.Drawing.Point, System.Drawing">
-    <value>213, 170</value>
-  </data>
   <data name="BtnRefresh.Text" xml:space="preserve">
     <value>刷新</value>
   </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="ProductMsg_Text.Location" type="System.Drawing.Point, System.Drawing">
-    <value>273, 128</value>
+    <value>256, 127</value>
   </data>
   <data name="ProductMsg_Text.Size" type="System.Drawing.Size, System.Drawing">
     <value>35, 17</value>
@@ -133,21 +130,74 @@
   <data name="ProductMsg_Text.Text" xml:space="preserve">
     <value>其他:</value>
   </data>
+  <data name="BtnOtherView.Location" type="System.Drawing.Point, System.Drawing">
+    <value>298, 124</value>
+  </data>
+  <data name="BtnOtherView.Size" type="System.Drawing.Size, System.Drawing">
+    <value>62, 23</value>
+  </data>
   <data name="BtnOtherView.Text" xml:space="preserve">
     <value>预览</value>
   </data>
-  <data name="BtnClickstart.Location" type="System.Drawing.Point, System.Drawing">
-    <value>278, 170</value>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="OSDNote.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="OSDNote.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
+  <data name="OSDNote.Location" type="System.Drawing.Point, System.Drawing">
+    <value>232, 64</value>
+  </data>
+  <data name="OSDNote.Size" type="System.Drawing.Size, System.Drawing">
+    <value>18, 17</value>
+  </data>
+  <data name="OSDNote.Text" xml:space="preserve">
+    <value>--</value>
+  </data>
+  <data name="SHOPNote.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="SHOPNote.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="BtnClickstart.Size" type="System.Drawing.Size, System.Drawing">
-    <value>91, 23</value>
+  <data name="SHOPNote.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 64</value>
+  </data>
+  <data name="SHOPNote.Size" type="System.Drawing.Size, System.Drawing">
+    <value>18, 17</value>
+  </data>
+  <data name="SHOPNote.Text" xml:space="preserve">
+    <value>--</value>
   </data>
   <data name="BtnClickstart.Text" xml:space="preserve">
-    <value>单击测试</value>
+    <value>点击测试</value>
+  </data>
+  <data name="skinLabel25.Location" type="System.Drawing.Point, System.Drawing">
+    <value>233, 85</value>
+  </data>
+  <data name="BtnWBView.Location" type="System.Drawing.Point, System.Drawing">
+    <value>298, 81</value>
+  </data>
+  <data name="BtnWBView.Size" type="System.Drawing.Size, System.Drawing">
+    <value>62, 23</value>
   </data>
   <data name="BtnWBView.Text" xml:space="preserve">
     <value>预览</value>
   </data>
+  <data name="ProjectIDNote.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 211</value>
+  </data>
+  <data name="SoftwareVersionNote.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 169</value>
+  </data>
+  <data name="ClientTypeNote.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 127</value>
+  </data>
+  <data name="skinLabel11.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 190</value>
+  </data>
   <data name="skinLabel11.Size" type="System.Drawing.Size, System.Drawing">
     <value>36, 17</value>
   </data>
@@ -155,40 +205,55 @@
     <value>屏ID:</value>
   </data>
   <data name="ProjectIDText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>44, 191</value>
+    <value>44, 190</value>
   </data>
   <data name="WBPathText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>55, 86</value>
+    <value>58, 85</value>
   </data>
   <data name="ChannelText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 23</value>
+    <value>295, 22</value>
   </data>
   <data name="ChannelText.Size" type="System.Drawing.Size, System.Drawing">
-    <value>68, 17</value>
+    <value>50, 17</value>
   </data>
   <data name="ChannelText.Text" xml:space="preserve">
-    <value>使用默认值</value>
+    <value>ChlText</value>
   </data>
   <data name="BaudText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>174, 23</value>
+    <value>168, 22</value>
+  </data>
+  <data name="BaudText.Size" type="System.Drawing.Size, System.Drawing">
+    <value>50, 17</value>
+  </data>
+  <data name="BaudText.Text" xml:space="preserve">
+    <value>115200</value>
   </data>
   <data name="OSDText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>299, 44</value>
+    <value>295, 43</value>
   </data>
   <data name="OrderText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>45, 233</value>
+    <value>47, 232</value>
   </data>
   <data name="SVText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>69, 149</value>
+    <value>67, 148</value>
   </data>
   <data name="ClientTypeText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>69, 107</value>
+    <value>70, 106</value>
   </data>
   <data name="SHOPText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>70, 44</value>
+    <value>69, 43</value>
   </data>
   <data name="COMText.Location" type="System.Drawing.Point, System.Drawing">
-    <value>54, 23</value>
+    <value>52, 22</value>
+  </data>
+  <data name="COMText.Size" type="System.Drawing.Size, System.Drawing">
+    <value>59, 17</value>
+  </data>
+  <data name="COMText.Text" xml:space="preserve">
+    <value>COM255</value>
+  </data>
+  <data name="skinLabel9.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 232</value>
   </data>
   <data name="skinLabel9.Size" type="System.Drawing.Size, System.Drawing">
     <value>35, 17</value>
@@ -196,18 +261,27 @@
   <data name="skinLabel9.Text" xml:space="preserve">
     <value>订单:</value>
   </data>
+  <data name="skinLabel8.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 148</value>
+  </data>
   <data name="skinLabel8.Size" type="System.Drawing.Size, System.Drawing">
     <value>59, 17</value>
   </data>
   <data name="skinLabel8.Text" xml:space="preserve">
     <value>软件版本:</value>
   </data>
+  <data name="skinLabel7.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 106</value>
+  </data>
   <data name="skinLabel7.Size" type="System.Drawing.Size, System.Drawing">
     <value>59, 17</value>
   </data>
   <data name="skinLabel7.Text" xml:space="preserve">
     <value>客户机型:</value>
   </data>
+  <data name="skinLabel6.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 85</value>
+  </data>
   <data name="skinLabel6.Size" type="System.Drawing.Size, System.Drawing">
     <value>47, 17</value>
   </data>
@@ -215,7 +289,7 @@
     <value>白平衡:</value>
   </data>
   <data name="skinLabel5.Location" type="System.Drawing.Point, System.Drawing">
-    <value>236, 44</value>
+    <value>230, 43</value>
   </data>
   <data name="skinLabel5.Size" type="System.Drawing.Size, System.Drawing">
     <value>61, 17</value>
@@ -223,6 +297,9 @@
   <data name="skinLabel5.Text" xml:space="preserve">
     <value>OSD语言:</value>
   </data>
+  <data name="skinLabel4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 43</value>
+  </data>
   <data name="skinLabel4.Size" type="System.Drawing.Size, System.Drawing">
     <value>59, 17</value>
   </data>
@@ -230,7 +307,7 @@
     <value>出厂语言:</value>
   </data>
   <data name="skinLabel3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>238, 23</value>
+    <value>232, 22</value>
   </data>
   <data name="skinLabel3.Size" type="System.Drawing.Size, System.Drawing">
     <value>59, 17</value>
@@ -239,7 +316,7 @@
     <value>频道信息:</value>
   </data>
   <data name="skinLabel2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>126, 23</value>
+    <value>119, 22</value>
   </data>
   <data name="skinLabel2.Size" type="System.Drawing.Size, System.Drawing">
     <value>47, 17</value>
@@ -247,14 +324,41 @@
   <data name="skinLabel2.Text" xml:space="preserve">
     <value>波特率:</value>
   </data>
+  <data name="skinLabel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>7, 22</value>
+  </data>
   <data name="skinLabel1.Size" type="System.Drawing.Size, System.Drawing">
     <value>47, 17</value>
   </data>
   <data name="skinLabel1.Text" xml:space="preserve">
-    <value>串口号:</value>
+    <value>端口号:</value>
+  </data>
+  <data name="skinGroupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>5, 95</value>
   </data>
   <data name="skinGroupBox1.Text" xml:space="preserve">
-    <value>基本信息</value>
+    <value>基本信息:</value>
+  </data>
+  <data name="skinLabel10.Font" type="System.Drawing.Font, System.Drawing">
+    <value>微软雅黑, 20pt, style=Bold</value>
+  </data>
+  <data name="skinLabel10.Location" type="System.Drawing.Point, System.Drawing">
+    <value>9, 49</value>
+  </data>
+  <data name="skinLabel10.Size" type="System.Drawing.Size, System.Drawing">
+    <value>69, 36</value>
+  </data>
+  <data name="skinLabel10.Text" xml:space="preserve">
+    <value>条码</value>
+  </data>
+  <data name="skinPanel1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>3, 31</value>
+  </data>
+  <data name="skinPanel1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>366, 238</value>
+  </data>
+  <data name="skinLabel15.Location" type="System.Drawing.Point, System.Drawing">
+    <value>238, 16</value>
   </data>
   <data name="skinLabel15.Size" type="System.Drawing.Size, System.Drawing">
     <value>32, 17</value>
@@ -263,16 +367,16 @@
     <value>检查</value>
   </data>
   <data name="skinLabel16.Location" type="System.Drawing.Point, System.Drawing">
-    <value>301, 19</value>
+    <value>288, 16</value>
   </data>
   <data name="skinLabel16.Size" type="System.Drawing.Size, System.Drawing">
     <value>56, 17</value>
   </data>
   <data name="skinLabel16.Text" xml:space="preserve">
-    <value>读取比</value>
+    <value>读取比</value>
   </data>
   <data name="skinLabel13.Location" type="System.Drawing.Point, System.Drawing">
-    <value>102, 19</value>
+    <value>100, 16</value>
   </data>
   <data name="skinLabel13.Size" type="System.Drawing.Size, System.Drawing">
     <value>32, 17</value>
@@ -280,20 +384,35 @@
   <data name="skinLabel13.Text" xml:space="preserve">
     <value>数量</value>
   </data>
+  <data name="skinLabel12.Location" type="System.Drawing.Point, System.Drawing">
+    <value>10, 16</value>
+  </data>
   <data name="skinLabel12.Size" type="System.Drawing.Size, System.Drawing">
     <value>57, 17</value>
   </data>
   <data name="skinLabel12.Text" xml:space="preserve">
     <value>MID类型</value>
   </data>
+  <data name="skinLabel14.Location" type="System.Drawing.Point, System.Drawing">
+    <value>166, 16</value>
+  </data>
   <data name="skinLabel14.Size" type="System.Drawing.Size, System.Drawing">
     <value>32, 17</value>
   </data>
   <data name="skinLabel14.Text" xml:space="preserve">
     <value>抄写</value>
   </data>
+  <data name="skinGroupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>372, 269</value>
+  </data>
   <data name="skinGroupBox2.Text" xml:space="preserve">
-    <value>MID功能</value>
+    <value>MID 功能:</value>
+  </data>
+  <data name="SNText.Location" type="System.Drawing.Point, System.Drawing">
+    <value>88, 44</value>
+  </data>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>382, 638</value>
   </data>
   <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>

Some files were not shown because too many files changed in this diff