HTA全解析:給VBS和JS一個強大的交互界面

来源:http://www.cnblogs.com/vitrox/archive/2016/01/16/5135642.html
-Advertisement-
Play Games

用HTML界面來強化VBS和JS本地腳本的交互能力與友好性!!!


用HTML界面來強化VBS和JS本地腳本的交互能力與友好性!!!【詳見代碼註釋】

1.JScript版

  1 <Html>
  2 <Head>
  3 <Title>HTA Test</Title>
  4 <HTA:APPLICATION 
  5   ApplicationName="HTA_Test"
  6   Border="Thick"
  7   BorderStyle="Raized"
  8   Caption="Yes"
  9   ContextMenu="No"
 10   Icon="E:\文檔\圖標\Unclassified ICO\2WAY.ICO"
 11   Id="Test"
 12   InnerBoder="Yes"
 13   Navigable="Yes"
 14   MaximizeButton="No"
 15   MinimizeButton="No"
 16   Scroll="Yes"
 17   ScrollFlat="No"
 18   Selection="Yes"
 19   ShowInTaskbar="Yes"
 20   SingleInstance="No"
 21   SysMenu="Yes"
 22   Version="1.0" 
 23   WindowState="Normal" />
 24 </Head>
 25 <Script language="JScript">
 26 //=====================================================
 27 //HTA是HTML Application的縮寫(HTML應用程式),直接將HTML
 28 //保存成HTA的格式,就成了一個獨立的應用軟體,也可以嵌入
 29 //<HTA:APPLICATION>元素來增強對該應用程式的控制
 30 //=====================================================
 31 //以下是<HTA:APPLICATION>元素可用屬性,可用來設置HTA視窗
 32 //的各種細節:
 33 //1.記住HTA:APPLICATION這個APPLICATION不可少,且這裡必須全
 34 //  大寫,否則以下屬性無效
 35 //2.ApplicationName:string=>設置HTA程式的名稱,在
 36 //  SingleInstance屬性設置為"Yes"時有用
 37 //3.Border:enum=>設置HTA視窗的邊框類型,預設值Thick
 38 //  所有允許的值:    Thick    粗邊框
 39 //                    Dialog    對話框【大小不可調整】
 40 //                    None    無邊框【無標題欄】
 41 //                    Thin    窄邊框
 42 //4.BorderSytle:enum=>設置HTA視窗的邊框風格,預設值是Normal
 43 //  所有允許的值:    Normal    普通
 44 //                    Complex    凹凸格式組合邊框
 45 //                    Raised    凸出的3D邊框
 46 //                    Static    3D邊框格式
 47 //                    Sunken    凹進的3D邊框
 48 //5.Caption:Yes/No=>設置HTA視窗是否顯示標題,預設值為Yes
 49 //6.CommandLine:string=>此屬性保存了HTA程式的啟動參數,參數可以
 50 //  在Script塊中通過<Id>.CommandLine來引用,如本程式則是
 51 //  Test.CommandLine。它的各個參數之間以空格分隔;包含空格的
 52 //  參數請在調用時,用引號引起來,否則會被當成多個參數;第一個
 53 //  參數總是HTA程式的文件路徑;其參數需要自己手動解析;因為這個
 54 //  屬性的存在,你可以方便地使用VBS總調用各種HTA界面,而後通過
 55 //  Window_OnUnload來記錄下結果,以方便總調程式獲取HTA交互結果
 56 //7.ContextMenu:Yes/No=>是否顯示右鍵上下文菜單
 57 //8.Icon:stirng=>設置應用程式的圖標文件路徑
 58 //9.InnerBorder:Yes/No=>是否顯示內部邊框的3D邊界
 59 //10.Navigable:Yes/No=>是否在本視窗載入新Navigate的鏈接
 60 //11.MaximizeButton:Yes/No=>是否顯示最大化按鈕,預設值Yes
 61 //12.MinimizeButton:Yes/No=>是否顯示最小化按鈕,預設值Yes
 62 //13.Scroll:Yes/No=>是否顯示垂直滾動條,預設值是Yes
 63 //14.ScrollFlat:Yes/No=>設置滾動條是3D或者平面的
 64 //15.Selection:Yes/No=>設置內容是否可以被滑鼠或鍵盤選中
 65 //16.ShowInTaskbar:Yes/No=>是否在任務欄顯示任務圖標,預設值Yes
 66 //17.SingleInstance:Yes/No=>設置此HTA程式是否同時只能有一個
 67 //   運行實例【進程】,預設值No。當第二次啟動同一個HTA程式時,
 68 //   mshta.exe通過上面ApplicaitonName來區分是否名稱已占用
 69 //18.SysMenu:Yes/No=>是否允許顯示標題欄右鍵菜單,預設值是Yes
 70 //19.Version:string=>設置應用程式的版本,如"1.0",預設值為""
 71 //20.WindowState:enum=>設置HTA視窗的顯示類型,預設值為Normal
 72 //   所有允許的值:    Normal        常規
 73 //                    Minimize    最小化
 74 //                    Maximize    最大化
 75 //用js對以上所有屬性進行只讀訪問時,一定要使用駱駝命名法
 76 //=====================================================
 77 //參見Microsoft HTML Object Library庫
 78 //1.以下事件是可以正常發生的,參見HTMLWindow2這個類的事件成
 79 //  員【它們以on為首碼】,有事件圖標標識的事件成員都可以被
 80 //  HTA宿主程式捕獲到該事件的消息,其它的以on為首碼的事件成
 81 //  員無法被捕獲到。
 82 //2.可以通過IHTMLWindow2介面定義的其它方法屬性來操縱HTA程式
 83 //  的視窗。
 84 //3.HTA中仍然可以使用Scripting.FileSystemObject對象來對文件
 85 //  系統進行讀寫操作,可利用Window_OnUnload事件來收集HTA表單
 86 //  的數據,記錄為文本,方便常規的VBS腳本程式通過GUI界面來進
 87 //  行交互,提升交互體驗與使用的方便性。
 88 //4.HTA中腳本宿主對象WScript/WshArguments/WshNamed/WshUnnamed
 89 //  對象是無法使用的,其它的如WshShell/WshEnvironment/
 90 //  WshShortcut/WshSpecialFolders/WshUrlShortcut/WshNetwork
 91 //  對象等依然可用
 92 //5.HTA視窗程式的每一個事件成員可以有一個IHTMLEventObj類型
 93 //  的參數,參數的type屬性會包含事件名稱字元串,是只讀的
 94 //-----------------------------------------------------
 95 //HTA視窗的列印控制事件
 96 // window.onafterprint=function()
 97 // {
 98 //    此事件在HTA視窗的列印工作完成之後發生
 99     // alert("OnAfterPrint");
100 // }
101 // window.onbeforeprint=function()
102 // {
103 //    此事件在HTA視窗的列印工作開始之前發生
104     // alert("OnBeforePrint");
105 // }
106 //-----------------------------------------------------
107 // window.onblur=function()
108 // {
109 //    此事件在將鍵盤焦點從HTA視窗移開時發生
110     // alert("OnBlur");
111 // }
112 // window.onerror=function()
113 // {
114 //    此事件在HTA程式出現錯誤時發生
115     // alert("OnError");
116 // }
117 // window.onfocus=function()
118 // {
119 //    此事件在HTA視窗獲得焦點時發生
120     // alert("OnFocus");
121 // }
122 // window.onhelp=function()
123 // {
124 //    此事件在HTA視窗有焦點時按下F1幫助鍵時發生
125     // alert("OnHelp");
126 // }
127 //-----------------------------------------------------
128 //HTA視窗的載入與銷毀事件
129 function GetArgs(cmdArgs)
130 {
131 //本函數解析命令行參數
132 //1.左引號前面必須是空格,否則引號應視作參數內容,而非邊界
133 //2.右引號後面必須是空格,否則引號應視作參數內容,而非邊界
134 //3.最後面的那個參數,如果引號邊界沒有配對,即無右引號,那麼
135 //  最後的那個參數的左引號當重新認定為內容,而非邊界
136 //4.多個空格間隔兩個參數,防止後面的空格間隔符被歸入內容中
137 //5.防止命令行參數最後有多個無意義空格的情況
138     var args=new Array(''),isComplete=true
139     for(var i=0;i<cmdArgs.length;i++)
140     {
141         var c=cmdArgs.charAt(i);
142         if(c=='"')
143             if(isComplete)
144                 if(i==0)
145                     isComplete=!isComplete;
146                 else
147                     if(cmdArgs.charAt(i-1)==" ")
148                         isComplete=!isComplete;
149                     else
150                         args[args.length-1]+=c;
151             else 
152                 if(i==cmdArgs.length-1)
153                     isComplete=!isComplete;
154                 else
155                     if(cmdArgs.charAt(i+1)==" ")
156                         isComplete=!isComplete;
157                     else
158                         args[args.length-1]+=c;
159 
160         else
161             if(c==" "&&isComplete&&args[args.length-1]!="")
162                 args.push('')
163             else
164                 args[args.length-1]+=c;
165     }
166     if(!isComplete)
167     {
168         var arg='"'+args.pop();
169         if(arg.indexOf(" ")!=-1)
170             args=args.concat(arg.split(" "));
171     }
172     if(args[args.length-1]=="")
173         args.pop();
174     return args
175 }
176 window.onload=function()
177 {
178     //此事件在HTA視窗被成功載入後發生
179     var width=300,height=300
180     this.resizeTo(width,height);
181     this.moveTo((this.screen.availWidth-width)/2,
182         (this.screen.availHeight-height)/2);
183     alert("OnLoad");
184     //讓我們來看看本程式接收到哪些命令行參數
185     //你可以命令行執行HTATest.hta "hello world" 32
186     alert("Test.CommandLine: "+Test.commandLine);
187     alert("ApplicationName = "+Test.applicationName);
188     //其它屬性也可只讀訪問,切記使用Id名來引用各個屬性
189     var args=GetArgs(Test.commandLine);
190     for(var i=0;i<args.length;i++) 
191         alert(args[i]);
192 }
193 // window.onbeforeunload=function()
194 // {
195 //    此事件在HTA視窗被銷毀前發生
196     // alert("OnBeforeUnload" );
197 // }
198 window.onunload=function()
199 {
200     //此事件在HTA視窗被銷毀時發生,切記alert不再可用
201     var ws=new ActiveXObject("WScript.Shell")
202     ws.Popup("OnUnload");
203     //-------------------------------------
204     dPath=ws.SpecialFolders("Desktop")
205     pPath=ws.SpecialFolders("Programs")
206     //-------------------------------------
207     var sc=ws.CreateShortcut(dPath+"\\Programs.lnk")
208     sc.TargetPath=pPath
209     sc.WindowStyle=3
210     sc.Hotkey="Ctrl+Alt+j"
211     sc.Save();
212     //-------------------------------------
213     var sc=ws.CreateShortcut(dPath+"\\baidu.url")
214     sc.TargetPath="http://www.baidu.com"
215     sc.Save();
216     //-------------------------------------
217     var fso=new ActiveXObject("Scripting.FileSystemObject")
218     var txt=fso.CreateTextFile("Output.txt")
219     var nt=new ActiveXObject("WScript.Network")
220     txt.WriteLine("Domain = "+nt.UserDomain);
221     txt.WriteLine("Computer Name = "+nt.ComputerName);
222     txt.WriteLine("User Name = " + nt.UserName );
223     txt.WriteLine("=====================================");
224     var oDrives=nt.EnumNetworkDrives();
225     var oPrinters=nt.EnumPrinterConnections();
226     txt.WriteLine("Network drive mappings:");
227     for(var i=0;i<oDrives.length;i+=2)
228         txt.WriteLine("Drive【"+oDrives.item(i)+"】="+
229             oDrives.item(i+1));
230     txt.WriteLine("=====================================");
231     txt.WriteLine("Network printer mappings:");
232     for(var i=0;i<oPrinters.length;i+=2)
233         txt.WriteLine("Port【"+oPrinters.item(i)+"】="+
234             oPrinters.item(i+1));
235     txt.WriteLine("=====================================");
236     txt.Close();
237     ws.Run("Notepad.exe Output.txt")
238 }
239 //-----------------------------------------------------
240 // window.onresize=function()
241 // {
242 //    此事件在HTA視窗的大小改變時發生
243     // alert("OnResize");
244 // }
245 // window.onscroll=function() 
246 // {
247 //    此事件在對HTA視窗執行滾動操作時發生
248     // alert("OnScroll");
249 // }
250 //=====================================================
251 </Script>
252 <Body bgcolor="green">
253 </Body>
254 </Html>

2.VBScript版

<Html>
<Head>
<Title>HTA Test</Title>
<HTA:APPLICATION 
  ApplicationName="HTA_Test"
  Border="Thick"
  BorderStyle="Raized"
  Caption="Yes"
  ContextMenu="No"
  Icon="E:\文檔\圖標\Unclassified ICO\2WAY.ICO"
  Id="Test"
  InnerBoder="Yes"
  Navigable="Yes"
  MaximizeButton="No"
  MinimizeButton="No"
  Scroll="Yes"
  ScrollFlat="No"
  Selection="Yes"
  ShowInTaskbar="Yes"
  SingleInstance="No"
  SysMenu="Yes"
  Version="1.0" 
  WindowState="Normal" />
</Head>
<Script language="VBScript">
'=====================================================
'HTA是HTML Application的縮寫(HTML應用程式),直接將HTML
'保存成HTA的格式,就成了一個獨立的應用軟體,也可以嵌入
'<HTA:APPLICATION>元素來增強對該應用程式的控制
'=====================================================
'以下是<HTA:APPLICATION>元素可用屬性,可用來設置HTA視窗
'的各種細節:
'1.記住HTA:APPLICATION這個APPLICATION不可少,且這裡必須全
'  大寫,否則以下屬性無效
'2.ApplicationName:string=>設置HTA程式的名稱,在
'  SingleInstance屬性設置為"Yes"時有用
'3.Border:enum=>設置HTA視窗的邊框類型,預設值Thick
'  所有允許的值:    Thick    粗邊框
'                    Dialog    對話框【大小不可調整】
'                    None    無邊框【無標題欄】
'                    Thin    窄邊框
'4.BorderSytle:enum=>設置HTA視窗的邊框風格,預設值是Normal
'  所有允許的值:    Normal    普通
'                    Complex    凹凸格式組合邊框
'                    Raised    凸出的3D邊框
'                    Static    3D邊框格式
'                    Sunken    凹進的3D邊框
'5.Caption:Yes/No=>設置HTA視窗是否顯示標題,預設值為Yes
'6.CommandLine:string=>此屬性保存了HTA程式的啟動參數,參數可以
'  在Script塊中通過<Id>.CommandLine來引用,如本程式則是
'  Test.CommandLine。它的各個參數之間以空格分隔;包含空格的
'  參數請在調用時,用引號引起來,否則會被當成多個參數;第一個
'  參數總是HTA程式的文件路徑;其參數需要自己手動解析;因為這個
'  屬性的存在,你可以方便地使用VBS總調用各種HTA界面,而後通過
'  Window_OnUnload來記錄下結果,以方便總調程式獲取HTA交互結果
'7.ContextMenu:Yes/No=>是否顯示右鍵上下文菜單
'8.Icon:stirng=>設置應用程式的圖標文件路徑
'9.InnerBorder:Yes/No=>是否顯示內部邊框的3D邊界
'10.Navigable:Yes/No=>是否在本視窗載入新Navigate的鏈接
'11.MaximizeButton:Yes/No=>是否顯示最大化按鈕,預設值Yes
'12.MinimizeButton:Yes/No=>是否顯示最小化按鈕,預設值Yes
'13.Scroll:Yes/No=>是否顯示垂直滾動條,預設值是Yes
'14.ScrollFlat:Yes/No=>設置滾動條是3D或者平面的
'15.Selection:Yes/No=>設置內容是否可以被滑鼠或鍵盤選中
'16.ShowInTaskbar:Yes/No=>是否在任務欄顯示任務圖標,預設值Yes
'17.SingleInstance:Yes/No=>設置此HTA程式是否同時只能有一個
'   運行實例【進程】,預設值No。當第二次啟動同一個HTA程式時,
'   mshta.exe通過上面ApplicaitonName來區分是否名稱已占用
'18.SysMenu:Yes/No=>是否允許顯示標題欄右鍵菜單,預設值是Yes
'19.Version:string=>設置應用程式的版本,如"1.0",預設值為""
'20.WindowState:enum=>設置HTA視窗的顯示類型,預設值為Normal
'   所有允許的值:    Normal        常規
'                    Minimize    最小化
'                    Maximize    最大化
'=====================================================
'參見Microsoft HTML Object Library庫
'1.以下事件是可以正常發生的,參見HTMLWindow2這個類的事件成
'  員【它們以on為首碼】,有事件圖標標識的事件成員都可以被
'  HTA宿主程式捕獲到該事件的消息,其它的以on為首碼的事件成
'  員無法被捕獲到。
'2.可以通過IHTMLWindow2介面定義的其它方法屬性來操縱HTA程式
'  的視窗。
'3.HTA中仍然可以使用Scripting.FileSystemObject對象來對文件
'  系統進行讀寫操作,可利用Window_OnUnload事件來收集HTA表單
'  的數據,記錄為文本,方便常規的VBS腳本程式通過GUI界面來進
'  行交互,提升交互體驗與使用的方便性。
'4.HTA中腳本宿主對象WScript/WshArguments/WshNamed/WshUnnamed
'  對象是無法使用的,其它的如WshShell/WshEnvironment/
'  WshShortcut/WshSpecialFolders/WshUrlShortcut/WshNetwork
'  對象等依然可用
'5.HTA視窗程式的每一個事件成員可以有一個IHTMLEventObj類型
'  的參數,參數的type屬性會包含事件名稱字元串,是只讀的
'-----------------------------------------------------
'HTA視窗的列印控制事件
'Sub Window_OnAfterPrint
    '此事件在HTA視窗的列印工作完成之後發生
'    MsgBox "OnAfterPrint"
'End Sub
'Sub Window_OnBeforePrint
    '此事件在HTA視窗的列印工作開始之前發生
'    MsgBox "OnBeforePrint"
'End Sub
'-----------------------------------------------------
'Sub Window_OnBlur
    '此事件在將鍵盤焦點從HTA視窗移開時發生
'    MsgBox "OnBlur"
'End Sub
'Sub Window_OnError
    '此事件在HTA程式出現錯誤時發生
'    MsgBox "OnError"
'End Sub
'Sub Window_OnFocus
    '此事件在HTA視窗獲得焦點時發生
'    MsgBox "OnFocus"
'End Sub
'Sub Window_OnHelp
    '此事件在HTA視窗有焦點時按下F1幫助鍵時發生
'    MsgBox "OnHelp"
'End Sub
'-----------------------------------------------------
'HTA視窗的載入與銷毀事件
Function GetArgs(cmdArgs)
'本函數解析命令行參數
'1.左引號前面必須是空格,否則引號應視作參數內容,而非邊界
'2.右引號後面必須是空格,否則引號應視作參數內容,而非邊界
'3.最後面的那個參數,如果引號邊界沒有配對,即無右引號,那麼
'  最後的那個參數的左引號當重新認定為內容,而非邊界
'4.多個空格間隔兩個參數,防止後面的空格間隔符被歸入內容中
'5.防止命令行參數最後有多個無意義空格的情況
    Dim args(),isComplete,c,args2,i,index
    isComplete=True
    ReDim args(0)
    For i=1 To Len(cmdArgs)
        c=Mid(cmdargs,i,1)
        If c=Chr(34) Then
            If isComplete Then
                If i=1 Then
                    isComplete=Not isComplete
                Else
                    If Mid(cmdArgs,i-1,1)=" " Then
                        isComplete=Not isComplete
                    Else
                        args(UBound(args))=args(UBound(args))+c
                    End If
                End If        
            Else 
                If i=Len(cmdArgs) Then
                    isComplete=Not isComplete
                Else
                    If Mid(cmdArgs,i+1,1)=" " Then
                        isComplete=Not isComplete
                    Else
                        args(UBound(args))=args(UBound(args))+c
                    End If
                End If        
            End If
        Else 
            If c=" " And isComplete=True Then
                If args(UBound(args))<>"" Then
                    ReDim Preserve args(UBound(args)+1) 
                End If 
            Else
                args(UBound(args))=args(UBound(args))+c
            End if
        End If
    Next
    If isComplete=False Then
        args(UBound(args))=Chr(34)+args(UBound(args))
        If InStr(args(UBound(args))," ")<>0 Then
            args2=Split(args(UBound(args)))
            index=UBound(args)
            ReDim Preserve args(UBound(args2)+index)
            For i=index To UBound(args2)+index
                args(i)=args2(i-index)
            Next
        End If
    End If
    If args(UBound(args))="" Then
        ReDim Preserve args(UBound(args)-1)
    End If
    GetArgs=args
End Function

Sub Window_OnLoad
    '此事件在HTA視窗被成功載入後發生
    Dim width,height
    width=300:height=300
    Me.ResizeTo width,height
    Me.MoveTo (Me.screen.AvailWidth-width)/2, _
        (Me.screen.AvailHeight-height)/2
    MsgBox "OnLoad"
    '讓我們來看看本程式接收到哪些命令行參數
    Dim item
    MsgBox "Test.CommandLine: " & Test.CommandLine
    For Each item In GetArgs(Test.CommandLine)
        MsgBox item
    Next
End Sub
'Sub Window_OnBeforeUnload
'    此事件在HTA視窗被銷毀前發生
'    MsgBox "OnBeforeUnload" 
'End Sub
Sub Window_OnUnload
    '此事件在HTA視窗被銷毀時發生
    MsgBox "OnUnload"
    Set ws=CreateObject("WScript.Shell")
    '-------------------------------------
    dPath=ws.SpecialFolders("Desktop")
    pPath=ws.SpecialFolders("Programs")
    '-------------------------------------
    Set sc=ws.CreateShortcut(dPath & "\所有程式.lnk")
    sc.TargetPath=pPath
    sc.WindowStyle=3
    sc.Hotkey="Ctrl+Alt+j"
    sc.save
    '-------------------------------------
    Set sc=ws.CreateShortcut(dPath & "\百度.url")
    sc.TargetPath="http://www.baidu.com"
    sc.save
    '-------------------------------------
    Set fso=CreateObject(<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、簡介 二、安裝 http://www.cnblogs.com/jadeboy/p/5132423.html 三、其他 1)Windows下效率必備軟體 http://www.jeffjade.com/2015/10/19/2015-10-18-Efficacious-win-software/#
  • Hacker Typer 讓你也能像電影中的黑客那樣寫代碼咯~~~
  • 2016-01-16 之前只是大概瞭解過c#語言,感覺掌握不牢靠.現在開始系統學習C#.現以該博客作為學習筆記,方便後續查看.C# 目標:系統掌握c#知識 時間:30天 範圍:C#基礎,Winform應用,C#高級,SQL及.net網頁.
  • WPF預設程式啟動:新建project後自動生成的App.xaml中指定程式啟動方式(StartupUri="MainWindow.xaml"),如下代碼所示,啟動MainWindow頁面 WPF用Main函數方式啟動程式:自己寫Main函數作為啟動點1.在WPF自動生成的App.cs文件中寫M.....
  • lock與C#多線程 lock 關鍵字將語句塊標記為臨界區,方法是獲取給定對象的互斥鎖,執行語句,然後釋放該鎖。簡單講就類似於 你去銀行辦理業務,一個櫃臺一次只能操作以為客戶,而如果你要到這個櫃臺辦理業務就必須等前面的人的業務完成,而彼此之間不會有交集。下麵通過具體的代碼來深入說明: using ....
  • PHP是動態類型的Web開發的腳本語言,PHP以頁面文件作為載入和運行的單元,PHP現在有了Composer作為開發包管理。1.使用Composer管理依賴自從.NET開發用了Nuget管理程式集依賴,我就再也離不開它了,幸虧Java中也有Maven管理jar包,雖然開源中國的鏡像太慢但還有ibib...
  • 1、對於LinkedBlockingQueue需要掌握以下幾點創建入隊(添加元素)出隊(刪除元素)2、創建Node節點內部類與LinkedBlockingQueue的一些屬性 static class Node { E item;//節點封裝的數據 /** ...
  • 介紹Sublime編輯器 Sublime Text 3官方版是Sublime Text2的升級版。Sublime Text是一款流行的文本編輯器軟體,有點類似於TextMate,跨平臺,可運行在Linux,Windows和Mac OS X。也是許多程式員喜歡使用的一款文本編輯器軟體。 Sublime...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...