반응형

* VBNET API 이용 인터넷 연결 상태 체크 (internet Connect State Check) 예제...

 

메인 화면

 

전체 소스 코드

Form1.vb

 

Public Class Form1

    Private Declare Function InternetGetConnectedState Lib "wininet.dll" _
   (ByRef lpdwFlags As Int32, ByVal dwReserved As Int32) As Boolean

    Private Enum ConnectionStates
        Modem = &H1
        LAN = &H2
        Proxy = &H4
        RasInstalled = &H10
        Offline = &H20
        Configured = &H40
    End Enum


    Dim thMain As System.Threading.Thread
    Dim bCheck As Boolean = False

    '폼이 로드 되면...
    '아래와 같이 Form_Load 이벤트로 해도 상관 없음.
    'Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    'End Sub
    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        CheckForIllegalCrossThreadCalls = False

        thMain = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf Thread_Tick))

        '백그라운드 스레드로 지정
        thMain.IsBackground = True
        bCheck = True
        button1.Text = "Internet Connect Check Start"
        thMain.Start()

        MyBase.OnLoad(e)
    End Sub


    Protected Overrides Sub OnClosed(ByVal e As System.EventArgs)

        If Not thMain Is Nothing Then

            If bCheck Then '스레드가 돌고 있으면...
                '스레드 강제 종료...
                thMain.Abort()
            Else '스레드가 일시정지 상태로 대기 하고 있으면...
                '대기 중인 스레드 종료...
                thMain.Interrupt()
            End If

            thMain = Nothing
        End If

        '가비지 콜렉트 실행
        GC.Collect()

        MyBase.OnClosed(e)
    End Sub


    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

        If Not bCheck Then

            bCheck = True
            '일시정지된 스레드 다시 시작
            thMain.Resume()
            button1.Text = "Internet Connect Check Start"

        Else

            bCheck = False
            '스레드 일시정지
            thMain.Suspend()
            button1.Text = "Internet Connect Check Stop"

        End If

    End Sub

    Public Shared Function Get_InternetConnectedState() As Boolean
        Dim lngFlags As Long

        lngFlags = 0
        Get_InternetConnectedState = False

        If InternetGetConnectedState(lngFlags, 0) Then
            'connected.
            Get_InternetConnectedState = True

        Else
            'not connected.
            Get_InternetConnectedState = False
        End If

    End Function



    Sub Thread_Tick()

        While (True)

            If Get_InternetConnectedState() Then
                label1.Text = "인터넷 연결이 되어 있습니다."
            Else
                label1.Text = "인터넷 연결이 끊어 졌습니다."
            End If

            System.Threading.Thread.Sleep(1000)
        End While

    End Sub
    
End Class

API 선언

* 예제 결과

 

 

반응형
반응형

* VBNET 텍스트 파일 읽기 (txt File Read) 한글 깨짐 방지 예제...

 

메인화면

전체 소스코드

Form1.vb

 

Public Class Form1

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

        Dim ofd As OpenFileDialog = New OpenFileDialog

        ofd.Filter = "텍스트 파일(*.txt) | *.txt"

        If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            label1.Text = ofd.FileName

            '한글 깨짐
            'Using sr As System.IO.StreamReader = New System.IO.StreamReader(label1.Text)
            '1 첫번째 방법...
            'Using sr As System.IO.StreamReader = New System.IO.StreamReader(label1.Text, System.Text.Encoding.Default)
            '2 두번째 방법...
            Using sr As System.IO.StreamReader = New System.IO.StreamReader(label1.Text, System.Text.Encoding.GetEncoding(949))
                textBox1.Text = sr.ReadToEnd()
            End Using

        End If

    End Sub
End Class

 

 

*예제 결과

 

기본 파일 위치만 지정 했을 경우

 

파일 기본 위치 및 엔코딩 까지 지정했을 경우

 

 


https://kdsoft-zeros.tistory.com/34

 

[VBNET] File Create Delete Read Write Ex

* VBNET 파일 예제 Form1.vb Public Class Form1 Dim strCheckFolder As String = "" Dim strFileName As String = "Test.txt" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventA..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET API 를 이용한 컨트롤 (Control ) 모서리 둥글게 하기 예제...

 

메인화면

 

전체 소스 코드

Form1.vb

Public Class Form1

    Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
    Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long


    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

        '라벨의 크기를 전달 하고 15 정도로 모서리를 둥글게 한다.
        Dim ip As IntPtr = CreateRoundRectRgn(0, 0, label1.Width, label1.Height, 15, 15)
        Dim i As Integer = SetWindowRgn(label1.Handle, ip, True)

        '텍스트박스 크기를 전달 15 정도로 모서리를 둥글게 한다.
        Dim ip2 As IntPtr = CreateRoundRectRgn(0, 0, textBox1.Width, textBox1.Height, 15, 15)
        Dim i2 As Integer = SetWindowRgn(textBox1.Handle, ip2, True)

    End Sub
End Class

* 예제 결과

 

결과 화면

 

Button 클릭 시 위 그림의 빨간 테두리 안에 컨트롤들의 모서리가 둥글게 변하는 모습을 보실 수 있습니다.

 

https://kdsoft-zeros.tistory.com/124

 

[C#] [API] 컨트롤 (Control) 모서리 둥글게 만들기

* C# API 이용 컨트롤 (Control) 모서리 둥글게 만들기 예제... 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Draw..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET 숫자 (금액) 을 한글로 변화 ...

 

메인화면

 

전체 소스 코드

Form1.vb

 

Public Class Form1

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        label1.Text = CalToHan(textBox1.Text)
    End Sub

    Private Function NumberHan(ByVal iTmp As Integer) As String
        Dim sTmp As String = ""

        Select Case iTmp
            Case 0
                sTmp = ""
            Case 1
                sTmp = "일"
            Case 2
                sTmp = "이"
            Case 3
                sTmp = "삼"
            Case 4
                sTmp = "사"
            Case 5
                sTmp = "오"
            Case 6
                sTmp = "육"
            Case 7
                sTmp = "칠"
            Case 8
                sTmp = "팔"
            Case 9
                sTmp = "구"
        End Select
        Return sTmp
    End Function


    Private Function NumberUnit(ByVal iTmp As Integer) As String

        Dim sTmp As String = ""
        Select Case iTmp
            Case 0
                sTmp = ""
            Case 1
                sTmp = ""
            Case 2
                sTmp = "십"
            Case 3
                sTmp = "백"
            Case 4
                sTmp = "천"
            Case 5
                sTmp = "만"
            Case 6
                sTmp = "십"
            Case 7
                sTmp = "백"
            Case 8
                sTmp = "천"
            Case 9
                sTmp = "억"
            Case 10
                sTmp = "십"
            Case 11
                sTmp = "백"
            Case 12
                sTmp = "천"
        End Select

        Return sTmp

    End Function

    Private Function CalToHan(ByVal strTmp As String) As String
        Dim iTotalLength As Integer = strTmp.Length
        Dim iLength As Integer = iTotalLength
        Dim cTmp() As Byte = System.Text.Encoding.ASCII.GetBytes(strTmp)
        Dim sTmp As String = ""

        Dim iCount As Integer
        For iCount = 0 To iTotalLength - 1 Step iCount + 1

            If cTmp(iCount) - 48 <> 0 Then
                sTmp += NumberHan(cTmp(iCount) - 48) + NumberUnit(iLength)
            End If
            iLength -= 1
        Next
        sTmp += "원"
        Return sTmp

    End Function


End Class

*예제 결과

 

 

반응형
반응형

* VBNET IP Ping Check 예제...

 

전체 소스 코드

Form1.vb

 

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim bCheck As Boolean
        Try
            bCheck = My.Computer.Network.Ping(TextBox1.Text)

            If bCheck Then
                MessageBox.Show("Ping Check Success...", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            Else
                MessageBox.Show("Ping Check Failed...", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        Catch ex As Exception
            bCheck = False
        End Try

    End Sub
End Class

 

*예제 결과

 

 

반응형
반응형

* 구조체를 Marshal 이용 바이트배열로 변환 하거나 바이트 배열화 된 구조체를 다시 원래 모습으로

   복귀 시키는 예제...

 

메인화면

전체 소스 코드

Form1.vb

 

Imports System.Runtime.InteropServices

Public Class Form1

    Structure t_TEST
        Public iTmp As Integer
        Public strTmp As String
        Public dbTmp As Double
        Public ftTmp As Single
    End Structure

    Dim tt As t_TEST = New t_TEST
    Dim bTmp() As Byte

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        tt.dbTmp = 0.12321312313
        tt.iTmp = 123123
        tt.strTmp = "테스트1"
        tt.ftTmp = 0.123213F
    End Sub

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        '구조체를 바이트 배열로...
        bTmp = StructToBytes(tt)
        label1.Text = bTmp.Length.ToString() + " bytes"
    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        '바이트 배열을 다시 구조체로 변환...
        Dim tTmp As t_TEST = ByteToStruct(Of t_TEST)(bTmp)
        label2.Text = "int 값: " & tTmp.iTmp.ToString()
        label3.Text = "double 값: " & tTmp.dbTmp.ToString()
        label4.Text = "float 값: " & tTmp.ftTmp.ToString()
        label5.Text = "string 값: " & tTmp.strTmp
    End Sub

    Private Function StructToBytes(ByVal obj As Object) As Byte()

        '구조체 사이즈
        Dim iSize As Integer = Marshal.SizeOf(obj)

        '사이즈 만큼 메모리 할당
        Dim arr(iSize) As Byte
        Dim ptr As IntPtr = Marshal.AllocHGlobal(iSize)

        '구조체 주소값 가져오기
        Marshal.StructureToPtr(obj, ptr, False)
        '메모리 복사
        Marshal.Copy(ptr, arr, 0, iSize)
        '메모리 할당 받은거 해제
        Marshal.FreeHGlobal(ptr)

        Return arr

    End Function

    Private Function ByteToStruct(Of T As Structure)(ByVal buffer As Byte()) As T
        Dim size As Integer = Marshal.SizeOf(GetType(T))

        If size > buffer.Length Then
            Throw New Exception()
        End If

        Dim ptr As IntPtr = Marshal.AllocHGlobal(size)
        Marshal.Copy(buffer, 0, ptr, size)
        Dim obj As T = CType(Marshal.PtrToStructure(ptr, GetType(T)), T)
        Marshal.FreeHGlobal(ptr)
        Return obj
    End Function

End Class

 

* 실행한 결과...

 

결과화면

 

 

https://kdsoft-zeros.tistory.com/25

 

[C#] 구조체 를 바이트 배열로 또는 바이트 배열을 구조체로 변환

* 구조체를 Marshal 이용 바이트배열로 변환 하거나 바이트 배열화 된 구조체를 다시 원래 모습으로 복귀 시키는 예제... Form1.cs using System; using System.Collections.Generic; using System.ComponentMode..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET API PC (종료, 재시작) 또는 Diagnostics.Process 이용 PC 종료 예제...

 

메인화면

 

전체 소스 코드

Form1.vb

 

Imports System.Runtime.InteropServices

Public Class Form1

    Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, _
                                                                                                ByVal lpMessage As String, _
                                                                                                ByVal dwTimeout As Integer, _
                                                                                                ByVal bForceAppsClosed As Integer, _
                                                                                                ByVal bRebootAfterShutdown As Integer) As Integer
    '1: 종료 전 사용자에게 알릴 메시지 , 2:종료 전 사용자에게 알릴 메시지, 3:종료까지 대기 시간, 4:프로그램 강제 종료 여부(False -> 강제 종료), 5:시스템 종료 후 다시 시작 여부(true -> 다시 시작)


    Dim bClick As Boolean = False
    Dim dtClick As DateTime

    Dim bThread As Boolean = True
    Dim thMain As System.Threading.Thread

    Dim bCheck As Boolean = False


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '크로스 스레드 오류 방지
        CheckForIllegalCrossThreadCalls = False

        thMain = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf Thread_Tick))

        '1. 첫번째 방법 : 스레드
        thMain.IsBackground = True
        thMain.Start()

        '2 두번째 방법
        '10초 뒤 종료
        'System.Diagnostics.Process.Start("shutdown", "/s /f /t 10")
        'label2.Text = "10"
    End Sub


    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        dtClick = DateTime.Now
        bClick = True
    End Sub



    Private Function After_Time(ByVal dtNow As DateTime, ByVal dtBefore As DateTime) As Double
        Dim ts As TimeSpan = dtNow - dtBefore
        Return ts.TotalSeconds
    End Function

    Private Sub Thread_Tick()
        While (bThread)

            If bClick Then
                label2.Text = String.Format("{0:##0}", After_Time(DateTime.Now, dtClick))
				
                '5초 뒤에 PC 재시작
                '마지막인자 True 이면 재시작 False 이면 종료
                If After_Time(Date.Now, dtClick) >= 5 And Not bCheck Then
                    InitiateSystemShutdown("\\127.0.0.1", Nothing, 0, False, True)
                    bCheck = True
                End If

            End If

            System.Threading.Thread.Sleep(100)
        End While

    End Sub

    Private Sub Form1_FontChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FontChanged
        '스레드 변수가 nothing 이 아니면
        If Not thMain Is Nothing Then
            '스레드가 돌아가고 있으면.
            If thMain.IsAlive Then
                '스레드 강제 종료
                thMain.Abort()
            End If
        End If


    End Sub
End Class

 

* 두번째 방법으로는 아래와 같이 Diagnostics.Process 를 이용 PC 종료 예제 입니다.

/*
피시 강제 종료
System.Diagnostics.Process.Start("shutdown.exe", "-s -f /t 60")      //-t 초 즉 60초 뒤에 PC 종료...
피시 종료 카운트다운 때 아래 명령을 날리면 종료가 취소됨
System.Diagnostics.Process.Start("shutdown.exe", "-a")
피시 재시작
System.Diagnostics.Process.Start("shutdown.exe", "-r")
피시 로그오프
System.Diagnostics.Process.Start("shutdown.exe", "-l")
*/

 

 

*예제 결과

 

 

 

https://kdsoft-zeros.tistory.com/6

 

[VBNET] 시간 체크 함수 (Time Check Func)

Public Function After_Time(ByVal NowTime As Date, ByVal BeforeTime As Date) As Double Dim ts As TimeSpan = NowTime - BeforeTime Return ts.TotalSeconds End Function 반환 되는 값 1 은 1초 이며 0.5 초..

kdsoft-zeros.tistory.com

 

반응형
반응형

프로젝트 리소스 (Resources) 에 추가된 이미지 불러오기

소스 코드 상
picSound.Image = My.Resources.number_0_off



반응형

+ Recent posts