歡迎蒞臨 Power Hammer の VB 部落 ! J 裡會放一些 VB .Net Oracle Crystal Report 等相關資訊分享給大家囉..
Friday, October 24, 2008 #
關於 HTML Unicode 轉換
在網頁原碼中常會見到 &#XXXXX 格式的字元 , 稱為 Unicode HTML 碼由於編碼之故 , 非 Big5 字元集中的文字 , 如 GB2312 碼或日文字元等,無法正常的顯示,而這些對應不到的文字,就需編碼轉換成 Unicode HTML, 就如同在文字檔中使用簡體字或日文字,需存成UTF-8或Unicode等編碼格式,對於這種 Unicode HTML 格式的字 , IE 等瀏覽器會自行解析成對應的字元但若由程式抓取網頁內容存檔,亦或存入資料庫,則需轉換還原成正確的文字
<< VB.Net >>
Imports System.Text Public Class Form1 Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click Dim htm As String = "" ' HTML Code htm = "蓝色部落中的" & _ "强力鎯头的" & _ "VB部落" MessageBox.Show(HTML2Unicode(htm)) htm = "あいしてる" MessageBox.Show(HTML2Unicode(htm)) htm = "どうぞ よろしく" MessageBox.Show(HTML2Unicode(htm)) ' Unicode Text Dim unc As String = "" unc = "蓝色部落中的强力鎯头的VB部落" MessageBox.Show(Unicode2HTML(unc)) unc = "あいしてる" MessageBox.Show(Unicode2HTML(unc)) End Sub Private Function HTML2Unicode(ByVal htm As String) As String Dim sb As New StringBuilder htm = htm.Replace(" ", "").Replace("&#", "") For Each s As String In htm.Split(";") If s.Length > 0 Then If s.StartsWith("x") Then sb.Append(ChrW(Int("&H" & s.Substring(1)))) Else sb.Append(ChrW(Int(s))) End If End If Next Return sb.ToString End Function Private Function Unicode2HTML(ByVal unc As String) As String Dim sb As New StringBuilder For Each c As Char In unc.ToCharArray() sb.Append("&#" & AscW(c) & ";") Next Return sb.ToString End Function End Class
<< C# .Net >>
private void button1_Click(object sender, EventArgs e) { String htm = "强力鎯头"; MessageBox.Show(HTML2Unicode(htm)); htm="どうぞ よろしく"; MessageBox.Show(HTML2Unicode(htm)); string unc = ""; unc = "蓝色部落中的强力鎯头的VB部落"; MessageBox.Show(Unicode2HTML(unc)); unc = "あいしてる"; MessageBox.Show(Unicode2HTML(unc)); } private string HTML2Unicode(string htm) { StringBuilder sb = new StringBuilder(); htm = htm.Replace(" ", "").Replace("&#", ""); foreach (string s in htm.Split(";".ToCharArray())) { if ((s.Length > 0)) { if (s.StartsWith("x")) { sb.Append(((char)Convert.ToInt32(s.Substring(1), 16)).ToString()); } else { sb.Append(Convert.ToChar(Convert.ToInt32(s))); } } } return sb.ToString(); } private string Unicode2HTML(string unc) { StringBuilder sb = new StringBuilder(); foreach (char c in unc.ToCharArray()) { sb.Append(("&#" + (Int32)c + ";")); } return sb.ToString(); }
編碼器參考:
http://timc.idv.tw/classic/timc.idv.tw/scripts/unicode.htm
http://www.csie.ntu.edu.tw/~piaip/unihtml/
http://www.unicodetools.com/unicode/convert-to-html.php
VB.Net 播放 MP3 或 MIDI 音樂
一般 WAV 可用 My.Computer.Audio.Play(location) 播放
Public Class Form1 ' 宣告 API Private Declare Function mciSendStringA Lib "winmm.dll" _ (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _ ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click PlayMidiFile("C:\死了都要愛.mp3") ' 播放 MP3 音樂 '或 'PlayMidiFile("C:\頑皮豹.mid") ' 播放 MIDI 音樂 End Sub Private Sub Button2_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button2.Click StopMidi() ' 停止播放 End Sub Private Sub Button3_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button3.Click PauseMidi() ' 暫停播放 End Sub Private Sub Button4_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button4.Click ContinueMidi() ' 繼續播放 End Sub Private Function PlayMidiFile(ByVal MusicFile As String) As Boolean If System.IO.File.Exists(MusicFile) Then mciSendStringA("stop music", "", 0, 0) mciSendStringA("close music", "", 0, 0) mciSendStringA("open " & MusicFile & " alias music", "", 0, 0) PlayMidiFile = mciSendStringA("play music", "", 0, 0) = 0 End If End Function Private Function StopMidi() As Boolean StopMidi = mciSendStringA("stop music", "", 0, 0) = 0 mciSendStringA("close music", "", 0, 0) End Function Private Function PauseMidi() As Boolean Return mciSendStringA("pause music", "", 0, 0) = 0 End Function Private Function ContinueMidi() As Boolean Return mciSendStringA("play music", "", 0, 0) = 0 End Function End Class
關於 RGB Color 轉 Hex Color
Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click ' RGB Color 轉 Hex Color MessageBox.Show(RGB_2_HEX(195, 20, 0)) MessageBox.Show(RGB2HEX(195, 20, 0)) End Sub ' 方法1 Private Function RGB_2_HEX(ByVal R As Byte, ByVal G As Byte, ByVal B As Byte) As String Return "#" & Hex(Color.FromArgb(R, G, B).ToArgb).Substring(2) End Function ' 方法2 Private Function RGB2HEX(ByVal R As Byte, ByVal G As Byte, ByVal B As Byte) As String Return "#" & Convert.ToString(Color.FromArgb(R, G, B).ToArgb, 16).Substring(2) End Function
private void button1_Click(object sender, EventArgs e) { // RGB Color 轉 16 進位 Hex Color MessageBox.Show(RGB_2_HEX(195, 20, 0)); MessageBox.Show(RGB2HEX(195, 20, 0)); } // 方法1 private string RGB_2_HEX(byte R, byte G, byte B) { return "#" + String.Format("{0:X}",Color.FromArgb(R, G, B).ToArgb()).Substring(2); } // 方法2 private string RGB2HEX(byte R, byte G, byte B) { return "#" + Convert.ToString(Color.FromArgb(R, G, B).ToArgb(), 16).Substring(2); }
Thursday, October 23, 2008 #
如何過濾重複的陣列元素
<< VB.Net 2005 >>
Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click ' 一整數陣列 Dim ary() As Integer = {1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3} ary = DistinctArray(ary) ' 過濾重複的陣列元素 For Each i As Integer In ary ' 底下顯示過濾後的陣列 MessageBox.Show(i) Next End Sub Private Function DistinctArray(ByRef Ary() As Integer) As Integer() ' 使用 List 泛型類別 Dim lst As New List(Of Integer) ' 用 Contains 方法,判斷某元素是否在 List 中,不存在則新增進 List 中。 For Each i As Integer In Ary If Not lst.Contains(i) Then lst.Add(i) Next Return lst.ToArray ' 將 List 的元素複製到新的陣列並回傳 End Function
<< VB.Net 2008 >>
' 方法 1 Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click Dim ary() As Integer = {1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3} ' 使用預設的相等比較子來比較值,以便從序列傳回獨特的項目。 For Each i As Integer In ary.Distinct.ToArray() MessageBox.Show(i) Next End Sub ' 方法 2 Private Sub Button2_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button2.Click Dim ary() As Integer = {1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3} 'IEnumerable 泛型介面 Dim ienum As IEnumerable(Of Integer) = ary ' Enumerable類別.Distinct 方法移除重複項目的序列 For Each i As Integer In ienum.Distinct MessageBox.Show(i) Next End Sub
Wednesday, October 22, 2008 #
VB.Net 如何互轉 System.Drawing.Image 與 OLE StdPicture
方法 1 : Call OleCreatePictureIndirect API
Imports System.Drawing Imports System.Runtime.InteropServices Public Class Form1 ' 宣告引用 API <DllImport("OLEPRO32.DLL", PreserveSig:=False)> _ Private Shared Function OleCreatePictureIndirect _ (ByRef pPictDesc As PicDesc, ByRef riid As Guid, ByVal fOwn As Boolean) As _ <MarshalAs(UnmanagedType.IUnknown)> Object End Function ' 宣告結構 Private Structure PicDesc Friend SizeOfStruct As Integer Friend PicType As Integer Friend Hbitmap As IntPtr Friend Hpal As IntPtr Friend Padding As Integer Friend Sub New(ByVal hBmp As IntPtr) Hbitmap = hBmp SizeOfStruct = Marshal.SizeOf(Me.GetType) PicType = 1 Hpal = IntPtr.Zero Padding = 0 End Sub End Structure ' 取得 StdPicture Private Function GetStdPic(ByRef img As Image) _ As <MarshalAs(UnmanagedType.IUnknown)> Object ' 呼叫 API OleCreatePictureIndirect 轉 IPicture Return OleCreatePictureIndirect( _ New PicDesc(New Bitmap(img).GetHbitmap), _ New Guid("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"), True) End Function Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click Dim img As Image = Image.FromFile("C:\Genius.jpg") ' 讀入 JPG 圖檔 PictureBox1.Image = img MessageBox.Show(img.GetType.ToString) Dim pic As Object = GetStdPic(img) ' StdPicture MessageBox.Show(TypeName(pic) & " (" & pic.GetType.ToString & ")") End Sub
方法 2 : 引用 Microsoft.VisualBasic.Compatibility
請先加入參考 Microsoft.VisualBasic.Compatibility
Imports Microsoft.VisualBasic.Compatibility Public Class Form1 Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click Dim img As Image = Image.FromFile("C:\Genius.jpg") ' 讀 JPG 圖檔進 Image 物件 MessageBox.Show(img.GetType.ToString) ' 將 Image 物件 轉 OLE IPicture 物件 Dim pic As Object = VB6.ImageToIPicture(img) ' StdPicture MessageBox.Show(TypeName(pic) & " (" & pic.GetType.ToString & ")") ' 將 OLE IPicture 物件 轉 Image 物件 PictureBox1.Image = VB6.IPictureToImage(pic) End Sub End Class
Tuesday, October 21, 2008 #
VB.Net 如何鎖定鍵盤及滑鼠
Sample 中, 按下 Button 後 , 鍵盤及滑鼠將被鎖住10秒
Public Class Form1 Private Declare Function BlockInput Lib "user32" _ (ByVal fBlock As Integer) As Integer Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click BlockInput(True) ' 鎖 System.Threading.Thread.Sleep(10000) ' 等10秒 BlockInput(False) ' 開 End Sub End Class
Monday, October 20, 2008 #
VB 如何取得硬碟序號
'自訂型態 Private Type IDEREGS bFeaturesReg As Byte bSectorCountReg As Byte bSectorNumberReg As Byte bCylLowReg As Byte bCylHighReg As Byte bDriveHeadReg As Byte bCommandReg As Byte bReserved As Byte End Type Private Type DRIVERSTATUS bDriveError As Byte bIDEStatus As Byte bReserved(1 To 2) As Byte dwReserved(1 To 2) As Long End Type Private Type SENDCMDOUTPARAMS cBufferSize As Long DStatus As DRIVERSTATUS bBuffer(1 To 512) As Byte End Type Private Type SENDCMDINPARAMS cBufferSize As Long irDriveRegs As IDEREGS bDriveNumber As Byte bReserved(1 To 3) As Byte dwReserved(1 To 4) As Long End Type 'API宣告 Private Declare Function CreateFileA Lib "Kernel32" _ (ByVal lpFileName As String, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ ByVal lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long Private Declare Sub RtlZeroMemory Lib "Kernel32" _ (dest As Any, ByVal numBytes As Long) Private Declare Function DeviceIoControl Lib "Kernel32" _ (ByVal hDevice As Long, _ ByVal dwIoControlCode As Long, _ lpInBuffer As Any, _ ByVal nInBufferSize As Long, _ lpOutBuffer As Any, _ ByVal nOutBufferSize As Long, _ lpBytesReturned As Long, _ ByVal lpOverlapped As Long) As Long Private Declare Function CloseHandle Lib "Kernel32" _ (ByVal hObject As Long) As Long Private Declare Sub RtlMoveMemory Lib "Kernel32" _ (Destination As Any, Source As Any, ByVal Length As Long) Private Sub Command1_Click() MsgBox "硬碟序號 : " & Get_HD_SNo(0) ' 第一顆硬碟 MsgBox "硬碟序號 : " & Get_HD_SNo(1) ' 第二顆硬碟 MsgBox "硬碟序號 : " & Get_HD_SNo(2) ' 第三顆硬碟 .. End Sub ' 取得硬碟序號 Private Function Get_HD_SNo(DrvIdx As Byte) As String Dim ParaIn As SENDCMDINPARAMS Dim ParaOut As SENDCMDOUTPARAMS Dim Sno As String Dim h As Long Dim intLp As Integer If Len(Environ("OS")) > 0 Then h = CreateFileA("\\.\PhysicalDrive" & DrvIdx, -1073741824, 3, 0, 3, 0, 0) Else h = CreateFileA("\\.\Smartvsd", 0, 0, 0, 1, 0, 0) End If If h = 0 Then Exit Function RtlZeroMemory ParaIn, Len(ParaIn) RtlZeroMemory ParaOut, Len(ParaOut) With ParaIn .bDriveNumber = DrvIdx .cBufferSize = 512 With .irDriveRegs .bDriveHeadReg = IIf(DrvIdx And 1, 176, 160) .bCommandReg = 236 .bSectorCountReg = 1 .bSectorNumberReg = 1 End With End With DeviceIoControl h, 508040, ParaIn, Len(ParaIn), ParaOut, Len(ParaOut), 0, 0 For intLp = 21 To 40 Step 2 If ParaOut.bBuffer(intLp + 1) = 0 Then Exit For Sno = Sno & Chr(ParaOut.bBuffer(intLp + 1)) If ParaOut.bBuffer(intLp) > 0 Then Sno = Sno & Chr(ParaOut.bBuffer(intLp)) Next CloseHandle h Get_HD_SNo = Trim(Sno) End Function
以上為 VB6 語法 , VB.Net 則需改寫
其他相關參考 :
如何取得 硬碟 及 主機板 序號
C# 取得 硬碟機 序號 ( 物理 / 邏輯 磁碟)
Sunday, October 12, 2008 #
使用 VB 或 Script 設定 IE 網頁檢查更新版本
前段時間朋友問到的問題 , 他們開發的網頁系統遇到IE中網頁更新設定被改掉問題
希望透過 Script 的來調整 IE網頁檢查更新版本設定, 底下整理供網友參考
參數設定說明:
每次造訪網頁時
3
每次啟動 Internet Explorer 時
2
自動
4
無
0
先引用 Imports Microsoft.Win32
Dim key As String key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" Dim RegKey As RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(key, True) RegKey.SetValue("SyncMode5", 3) ' 設定每次造訪網頁時更新
<< VB6 >>
Dim WshShell As Object Dim strKey As String Set WshShell = CreateObject("WScript.Shell") strKey = "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\SyncMode5" WshShell.RegWrite strKey, 4 ' 設定自動更新
<< VBScript >> *.VBS
Dim wmi, reg, p, k Set wmi = GetObject("winmgmts:") ' 關掉正開啟中的 IE For Each p In wmi.InstancesOf("Win32_Process") If p.Name = "iexplore.exe" Then p.Terminate Next Set reg = GetObject("winmgmts:\\.\root\default:StdRegProv") k = "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" reg.SetDWORDValue &H80000001, k, "SyncMode5", 2 ' 設定每次啟動 Internet Explorer 時更新
另外也可存成 Reg 檔 , 再用 Shell 函數呼叫執行 , 如 Shell ”RegEdit /s SyncMode.reg”
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]"SyncMode5"="4"
PS : 程式執行後需重新開啟 IE
Friday, August 01, 2008 #
<內容特色>這是一本以Visual Basic為主要語法所撰寫的ASP.NET入門書,全書分成六個部份,從網站的概念開始,詳細說明Visual Basic以及物件導向程式設計模型,逐步討論各種ASP.NET元素與相關的程式運作機制,資料庫存取技術的整合,同時納入ASP.NET 3.5內建的AJAX全新控制項,最後一併說明了Silverlight這項嶄新的RIA開發技術。本書以教學為導向,著重觀念的理解,透過適當的範例,剖析各種ASP.NET重要概念,讓讀者能夠經由各章精心安排的課程,一窺ASP.NET技術全貌,並且在完成課程內容的閱讀之後建立強固的基礎。
<章節目錄>CH01.先瞭解Web應用程式是怎麼回事CH02.HTML與網站設計CH03.初探ASP.NET-站在巨人的肩上向世界說HelloCH04.Visual Basic與後置程式碼檔案-活化ASP.NET網頁CH05.結構化程式設計與網頁驅動事件 - 擁抱ASP.NET的靈魂CH06.控制項- 網頁介面的組成元素CH07.ASP.NET網頁與版面設計控制項 - 視覺化介面組成設計CH08.類別-探索ASP.NET網站的構成核心CH09.物件導向程式設計-邁向專業的關鍵CH10.運用.NET Framework類別庫-快速開發網頁功能CH11.檔案上傳與網路硬碟-網站目錄架構操作功能實作CH12.導入資料庫-建立支援資料庫存取的動態網頁CH13.資料控制項-網頁與資料的完美結合CH14.ADO.NET-資料庫動態網頁的靈魂CH15.DataSet與資料繫結-ADO.NET資 料處理的重量級物件CH16.會員管理-網站授權與驗證機制的快速整合CH17.XML與Web Services-資料處理的進一步延伸CH18.ASP.NET AJAX-網頁介面再進化CH19.Silverlight程式設計-ASP.NET的 CH20.網路相簿-一個完整的範例RIA革命
<光碟內容>DVD:Microsoft Visual Studio Express Editions安裝光碟CD:各章節範例檔
Wednesday, March 26, 2008 #
新書介紹 - Microsoft LINQ 最佳實務講座
書籍介紹
開發思維 • 專家角度 • 務實本質
專為開發人員打造的重量級鉅獻,探觸Visual Studio 2008最完整的技術。
LINQ是.NET Framework 3.5不容忽視的新成員,它將資料查詢技術提升至更高的層次。
Microsoft LINQ 最佳實務講座 最將帶領你以嶄新的眼光,學習如何使用LINQ存取資料庫與物件。
本書共分四大篇,涵蓋瞭解LINQ所需的知識與相關討論,且提供完整的LINQ技術全方位學習導引,
從LINQ的核心精神、發展軌跡、類別庫的運用,直到各種異質資料來源的查詢維護操作,
逐步探索LINQ的面貌。
內容特色
■ LINQ全方位剖析
引領讀者探索LINQ技術的輪廓,從基礎概念進入LINQ實際的範例操作,
完整說明C#語法新增功能與LINQ的關係,以及LINQ查詢運算式。
■ LINQ to Objects
LINQ的核心在於整合程式語言的查詢方法子句與標準資料查詢方法成員,這些成員的數量不多,
只要掌握它們,便可輕易跨越LINQ門檻,將其運用於應用程式的開發。
■ LINQ to XML
XML已是被廣泛採用的標準文件格式,當今開發工具均提供XML完整支援。更進一步的,
LINQ發展了一組專門用來對應XML文件的API-LINQ to XML,
以統一的語法提供存取XML文件所需的功能,
讓C#與VB.NET操作XML文件變得更簡單。
■ LINQ to ADO.NET
將分別從SQL與ADO.NET兩個方向來探討LINQ與關聯式資料庫查詢的整合應用,
開發人員可根據需求,針對各種異質資料來源進行混合查詢等應用,以簡化資料存取功能的設計工作。
目錄
第1章 LINQ概況
1-1 LINQ與IEnumerable<T>
1-2 IEnumerable<T>介面與Enumerable類別
1-3 查詢運算子與運算式
1-4 LINQ的幾個部分
1-5 LINQ與程式語言的整合
1-6 物件化的資料查詢模型
1-7 LINQ的另外一個重點-集合物件資料存取
第2章 LINQ查詢與C# 3.0
2-1 列舉集合與泛型
2-2 IEnumerable<T>與System.Linq命名空間
2-3 LINQ查詢運算式
2-4 C# 3.0新增功能
2-5 Lambda運算式
2-6 擴充方法
2-7 型別推論
2-8 物件初始化與匿名型別
第3章 LINQ查詢運算式與Enumerable擴充方法 I
3-1 Enumerable擴充方法
3-2 投影作業
3-3 資料篩選運算
3-4 排序運算
3-5 群組與關聯
3-6 篩選檔案系統搜尋應用
第4章 LINQ查詢運算式與