2007/10/31

隱藏資料夾 & 隱藏自己的電腦

隱藏資料夾

要想讓其他用戶無法通過網路芳鄰直接來訪問某個資料夾(例如「我的共享」資料夾),我們可以將其「隱藏」起來,具體方法如下:

右擊資料夾圖示,選項彈出快捷功能表中的「共用和安全」,在開啟的視窗中選項「共享」標籤,選項「共享該檔案夾」,在「共享名」後面的文本項中輸入共用資料夾名並在資料夾名後增加一個半形的「$」字元,最後按下「確定」儲存設定。

如果沒有在上面的視窗中給共享檔案名增加「$」符,也可以右擊該共用資料夾,選項「重新命名」將這個共享的檔案名稱後增加一個半形的「$」字元(例如「我的共享$」)。

經過這樣的操作之後,其他用戶開啟網路芳鄰時,在網路芳鄰列表中將不會看到該共用資料夾了。

如果你希望某個用戶去訪問你的這個共用資料夾,只要告訴他這個共用資料夾的絕對路徑即可,此路徑為「\\你的電腦名稱\我的共享$」,只要將其輸入到檔案總管的位址欄中並Enter鍵即可訪問了,注意:後面的「$」是必不可少的,如果少了該字元將訪問不成功。

隱藏自己的電腦

上面的方法是在區域網路內隱藏一個特定的資料夾,如果你想將自己的電腦也隱藏起來,請看:

按下「開始→執行」,在開啟的「執行」對話視窗中輸入「cmd」開啟指令行視窗,輸入「net config server /hidden:yes」,再Enter鍵就可以了,這樣,別人就無法從網路芳鄰中直接看到你的電腦,只有通過在檔案總管位址欄中輸入「\\電腦名稱」 才來訪問你的電腦。

不過,通過上面的方法只能對當前有效,以後每次重新啟動系統後要重新執行該指令才行,如果希望將自己的電腦從網路芳鄰中永久隱藏,可以通過修改註冊表來達到目的:

開啟註冊表編輯器,在左側視窗中展開「HKEY_LOCAL_MACHINE\

SYSTEM\CurrentControlSet\Services\lanmanserver\Parameters」,在右側視窗中找到DWORD檔案檔案類型值改為「1」,按「F5」重新整理註冊表即可。

回首頁

2007/10/30

別讓 MsgBox 中斷了一些 Background 的處理作業


在 VB 中,一旦您呼叫了 MsgBox,您正在執行的一些 Background 的處理作業,例如計數器或時鐘...等,都會停下來,直到您回應了 MsgBox 之后,一切才會恢复正常!或許您并不希望如此,這也有可能造成一些不必要的錯誤!

要解決這個問題,您必須使用 Windows API 去呼叫 MessageBox Function,它的使用方法、外觀和 MsgBox 的結果完全相同,但是它卻不會中斷一些 Background 的處理作業!

在以下的范例中,您要在 Form 中加入一個 Label、二個 CommandButton 及一個 Timer,不更改任何屬性。

'在聲明區中加入以下聲明:

Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

'加入以下程序碼:

Private Sub Command1_Click()
MsgBox "計時器停掉了!", 64, "VB 的訊息框"
End Sub

Private Sub Command2_Click()
MessageBox Me.hwnd, "注意!計時器還在跑!", "API 的訊息框", 64
End Sub

Private Sub Form_Load()
Timer1.Interval = 1000
Label1.Caption = "目前的時間是:" & Time
End Sub

Private Sub Timer1_Timer()
Label1.Caption = "目前的時間是:" & Time
End Sub

2007/10/25

VB程式中跳下一個駐點的方法

Private Sub Text3_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
        '檢查是否為數值 and 檢查是否按下"Enter" 
        If IsNumeric(Text3(Index).Text) = False And KeyCode = 13 Then
                a = MsgBox("Input Error", , "Error")
        Else
                If KeyCode = 13 Then
                        SendKeys "{TAB}" '傳送"Tab"鍵值
                End If
        End If
End Sub
 

VB程式中使用滑鼠滾倫


 說明

由於VB自訂的事件中,並沒有這項訊息,於是只好自己攔截WM_MOUSEWHEEL這個訊息了

程式

'以下在.Bas
Option Explicit

'用以告訴系統當這個視窗的msg事件發生時 執行lpPrevWndFunc
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'lpPrevWndFunc執行函數的位址
'hwnd 就是視窗的hwnd屬性
'Msg就是訊息 例如按下滑鼠右鍵 最大化....
'wParam,lParam會因Msg不同而有不同的用途

'用以設定視窗的程序
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
'hwnd 就是所要設定視窗的hwnd屬性
'nIndex 是要設定的程序
'dwNewLong  所指定的程序(nIndex)所要執行的動作

Public Const GWL_WNDPROC = (-4)
Public Const WM_MOUSEWHEEL = &H20A
Public PrevWndProc As Long

Function WndProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim t(0 To 1) As Integer
If uMsg = WM_MOUSEWHEEL Then '如果是滾輪
    If wParam < 0 Then 'backward
        Form1.Top = Form1.Top + 10
    Else 'forforward
        Form1.Top = Form1.Top - 10
    End If
Else
    WndProc = CallWindowProc(PrevWndProc, hwnd, uMsg, wParam, lParam)
    '其他訊息用原來的回呼函數處理
End If
End Function

'以下在Form1中
Option Explicit
Private Sub Form_Load()
PrevWndProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
'設定新的回呼函式 以攔截訊息
'note: 傳回值PrevWndProc是原來視窗的回呼函數
'WndProc函數放在模組 因為AddressOf只能取得模組下函數的位址
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim lResult As Long
lResult = SetWindowLong(Me.hwnd, GWL_WNDPROC, PrevWndProc)
'結束時歸還原來的回呼函數 不然會當機
End Sub

相關資訊

  WM_MOUSEWHEEL

  SetWindowLong

  CallWindowProc

文件出處

  Honey  

2007/04/24

使用EXCEL計算貸款金額

使用PMT公式計算貸款的每月繳款金額,=PMT(月利率 rate , 總期數 nper, 貸款金額 pv),
月利率rate、總期數nper、貸款金額pv都是正數,正數表示領到金額,PMT算出的數字會是負數,
而負數表示要付出金錢。

如果希望知道繳了一年12期之後,還剩下多少貸款金額尚未償還,
可以利用PMT加上FV兩個公式來合併計算,首先,計算出每期的繳款金額,
然後利用FV,=FV(月利率 rate , 繳費幾期之後 nper, 每期繳款 pmt, 貸款金額 pv),
FV會算出負數,而負數表示還剩下多少貸款金額尚未償還。

想知道每期繳款中,有多少是繳付本金,有多少是繳付利息,
可以分別使用PPMT與IPMT這兩個公式,=PPMT(月利率 rate,
哪一期 per , 總期數 nper, 貸款金額 pv),PPMT會算出負數,
而負數表示那期繳款中,償還本金的金額。同格式,IPMT表示那期繳款中,
償還利息的金額。

2007/03/13

VB中各種進制的轉換

'-------------------------------------------

' 用途:將十進制轉化為二進制
' 輸入:Dec(十進制數)
' 輸入數據類型:Long
' 輸出:DEC_to_BIN(二進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647,輸出最大數為1111111111111111111111111111111(31個1)
'-------------------------------------------
Public Function DEC_to_BIN(Dec As Long) As String
DEC_to_BIN = ""
Do While Dec > 0
DEC_to_BIN = Dec Mod 2 & DEC_to_BIN
Dec = Dec \ 2
Loop
End Function
'-------------------------------------------
' 用途:將二進制轉化為十進制
' 輸入:Bin(二進制數)
' 輸入數據類型:String
' 輸出:BIN_to_DEC(十進制數)
' 輸出數據類型:Long
' 輸入的最大數為1111111111111111111111111111111(31個1),輸出最大數為2147483647
'-------------------------------------------
Public Function BIN_to_DEC(ByVal Bin As String) As Long
Dim i As Long
For i = 1 To Len(Bin)
BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))
Next i
End Function
'-------------------------------------------
' 用途:將十六進制轉化為二進制
' 輸入:Hex(十六進制數)
' 輸入數據類型:String
' 輸出:HEX_to_BIN(二進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function HEX_to_BIN(ByVal Hex As String) As String
Dim i As Long
Dim B As String

Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, i, 1)
Case "0": B = B & "0000"
Case "1": B = B & "0001"
Case "2": B = B & "0010"
Case "3": B = B & "0011"
Case "4": B = B & "0100"
Case "5": B = B & "0101"
Case "6": B = B & "0110"
Case "7": B = B & "0111"
Case "8": B = B & "1000"
Case "9": B = B & "1001"
Case "A": B = B & "1010"
Case "B": B = B & "1011"
Case "C": B = B & "1100"
Case "D": B = B & "1101"
Case "E": B = B & "1110"
Case "F": B = B & "1111"
End Select
Next i
While Left(B, 1) = "0"
B = Right(B, Len(B) - 1)
Wend
HEX_to_BIN = B
End Function
'-------------------------------------------
' 用途:將二進制轉化為十六進制
' 輸入:Bin(二進制數)
' 輸入數據類型:String
' 輸出:BIN_to_HEX(十六進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function BIN_to_HEX(ByVal Bin As String) As String
Dim i As Long
Dim H As String
If Len(Bin) Mod 4 <> 0 Then
Bin = String(4 - Len(Bin) Mod 4, "0") & Bin
End If

For i = 1 To Len(Bin) Step 4
Select Case Mid(Bin, i, 4)
Case "0000": H = H & "0"
Case "0001": H = H & "1"
Case "0010": H = H & "2"
Case "0011": H = H & "3"
Case "0100": H = H & "4"
Case "0101": H = H & "5"
Case "0110": H = H & "6"
Case "0111": H = H & "7"
Case "1000": H = H & "8"
Case "1001": H = H & "9"
Case "1010": H = H & "A"
Case "1011": H = H & "B"
Case "1100": H = H & "C"
Case "1101": H = H & "D"
Case "1110": H = H & "E"
Case "1111": H = H & "F"
End Select
Next i
While Left(H, 1) = "0"
H = Right(H, Len(H) - 1)
Wend
BIN_to_HEX = H
End Function
'-------------------------------------------
' 用途:將十六進制轉化為十進制
' 輸入:Hex(十六進制數)
' 輸入數據類型:String
' 輸出:HEX_to_DEC(十進制數)
' 輸出數據類型:Long
' 輸入的最大數為7FFFFFFF,輸出的最大數為2147483647
'-------------------------------------------
Public Function HEX_to_DEC(ByVal Hex As String) As Long
Dim i As Long
Dim B As Long

Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, Len(Hex) - i + 1, 1)
Case "0": B = B + 16 ^ (i - 1) * 0
Case "1": B = B + 16 ^ (i - 1) * 1
Case "2": B = B + 16 ^ (i - 1) * 2
Case "3": B = B + 16 ^ (i - 1) * 3
Case "4": B = B + 16 ^ (i - 1) * 4
Case "5": B = B + 16 ^ (i - 1) * 5
Case "6": B = B + 16 ^ (i - 1) * 6
Case "7": B = B + 16 ^ (i - 1) * 7
Case "8": B = B + 16 ^ (i - 1) * 8
Case "9": B = B + 16 ^ (i - 1) * 9
Case "A": B = B + 16 ^ (i - 1) * 10
Case "B": B = B + 16 ^ (i - 1) * 11
Case "C": B = B + 16 ^ (i - 1) * 12
Case "D": B = B + 16 ^ (i - 1) * 13
Case "E": B = B + 16 ^ (i - 1) * 14
Case "F": B = B + 16 ^ (i - 1) * 15
End Select
Next i
HEX_to_DEC = B
End Function
'-------------------------------------------
' 用途:將十進制轉化為十六進制
' 輸入:Dec(十進制數)
' 輸入數據類型:Long
' 輸出:DEC_to_HEX(十六進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647,輸出最大數為7FFFFFFF
'-------------------------------------------
Public Function DEC_to_HEX(Dec As Long) As String
Dim a As String
DEC_to_HEX = ""
Do While Dec > 0
a = CStr(Dec Mod 16)
Select Case a
Case "10": a = "A"
Case "11": a = "B"
Case "12": a = "C"
Case "13": a = "D"
Case "14": a = "E"
Case "15": a = "F"
End Select
DEC_to_HEX = a & DEC_to_HEX
Dec = Dec \ 16
Loop
End Function
'-------------------------------------------
' 用途:將十進制轉化為八進制
' 輸入:Dec(十進制數)
' 輸入數據類型:Long
' 輸出:DEC_to_OCT(八進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647,輸出最大數為17777777777
'-------------------------------------------
Public Function DEC_to_OCT(Dec As Long) As String
DEC_to_OCT = ""
Do While Dec > 0
DEC_to_OCT = Dec Mod 8 & DEC_to_OCT
Dec = Dec \ 8
Loop
End Function
'-------------------------------------------
' 用途:將八進制轉化為十進制
' 輸入:Oct(八進制數)
' 輸入數據類型:String
' 輸出:OCT_to_DEC(十進制數)
' 輸出數據類型:Long
' 輸入的最大數為17777777777,輸出的最大數為2147483647
'-------------------------------------------
Public Function OCT_to_DEC(ByVal Oct As String) As Long
Dim i As Long
Dim B As Long

For i = 1 To Len(Oct)
Select Case Mid(Oct, Len(Oct) - i + 1, 1)
Case "0": B = B + 8 ^ (i - 1) * 0
Case "1": B = B + 8 ^ (i - 1) * 1
Case "2": B = B + 8 ^ (i - 1) * 2
Case "3": B = B + 8 ^ (i - 1) * 3
Case "4": B = B + 8 ^ (i - 1) * 4
Case "5": B = B + 8 ^ (i - 1) * 5
Case "6": B = B + 8 ^ (i - 1) * 6
Case "7": B = B + 8 ^ (i - 1) * 7
End Select
Next i
OCT_to_DEC = B
End Function
'-------------------------------------------
' 用途:將二進制轉化為八進制
' 輸入:Bin(二進制數)
' 輸入數據類型:String
' 輸出:BIN_to_OCT(八進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function BIN_to_OCT(ByVal Bin As String) As String
Dim i As Long
Dim H As String
If Len(Bin) Mod 3 <> 0 Then
Bin = String(3 - Len(Bin) Mod 3, "0") & Bin
End If

For i = 1 To Len(Bin) Step 3
Select Case Mid(Bin, i, 3)
Case "000": H = H & "0"
Case "001": H = H & "1"
Case "010": H = H & "2"
Case "011": H = H & "3"
Case "100": H = H & "4"
Case "101": H = H & "5"
Case "110": H = H & "6"
Case "111": H = H & "7"
End Select
Next i
While Left(H, 1) = "0"
H = Right(H, Len(H) - 1)
Wend
BIN_to_OCT = H
End Function
'-------------------------------------------
' 用途:將八進制轉化為二進制
' 輸入:Oct(八進制數)
' 輸入數據類型:String
' 輸出:OCT_to_BIN(二進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function OCT_to_BIN(ByVal Oct As String) As String
Dim i As Long
Dim B As String

For i = 1 To Len(Oct)
Select Case Mid(Oct, i, 1)
Case "0": B = B & "000"
Case "1": B = B & "001"
Case "2": B = B & "010"
Case "3": B = B & "011"
Case "4": B = B & "100"
Case "5": B = B & "101"
Case "6": B = B & "110"
Case "7": B = B & "111"
End Select
Next i
While Left(B, 1) = "0"
B = Right(B, Len(B) - 1)
Wend
OCT_to_BIN = B
End Function
'-------------------------------------------
' 用途:將八進制轉化為十六進制
' 輸入:Oct(八進制數)
' 輸入數據類型:String
' 輸出:OCT_to_HEX(十六進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function OCT_to_HEX(ByVal Oct As String) As String
Dim Bin As String
Bin = OCT_to_BIN(Oct)
OCT_to_HEX = BIN_to_HEX(Bin)
End Function
'-------------------------------------------
' 用途:將十六進制轉化為八進制
' 輸入:Hex(十六進制數)
' 輸入數據類型:String
' 輸出:HEX_to_OCT(八進制數)
' 輸出數據類型:String
' 輸入的最大數為2147483647個字符
'-------------------------------------------
Public Function HEX_to_OCT(ByVal Hex As String) As String
Dim Bin As String
Hex = UCase(Hex)
Bin = HEX_to_BIN(Hex)
HEX_to_OCT = BIN_to_OCT(Bin)
End Function


VB自帶函數:
十進制轉八進制:Oct(num)
十六進制轉八進制:oct("&H" &amp; num)
十進制轉十六進制:hex(num)
八進制轉十六進制:hex("&O" & num)

十六進制轉換為十進制
Dim str As String
str = Text2.Text
Text10.Text = CLng("&H" & str)

2007/03/06

新版Blogger試用!!

HI~體驗一下 "部落格" 試試新版Blog功能
雖然有一陣子沒用了,還是試用一下^^