반응형

* VBNET API 를 이용한 마우스 커서 좌표 얻어 오기 예제...

 

Main

 

전체 소스 코드

Form1.vb

 

Imports System.Runtime.InteropServices

Public Class Form1

    'API 선언...
    <DllImport("user32")> _
Public Shared Function GetCursorPos(ByRef pt As Point) As Int32
    End Function

    Dim pi As Point = New Point()

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)

        timer1.Start()

    End Sub

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

        timer1.Stop()

    End Sub


    Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer1.Tick

        '마우스 커서 좌표 읽어 오기...
        GetCursorPos(pi)

        '현재 마우스 커서 좌표 표시...
        lblX.Text = pi.X.ToString()
        lblY.Text = pi.Y.ToString()


    End Sub


End Class

*예제 결과

 

결과 화면

 

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

 

[C#] [API] 마우스 커서 좌표 얻어 오기

* C# API 를 이용한 마우스 커서 좌표 얻어오기 예제... 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; us..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET API 를 이용한 한/영 키 상태 값 얻어 오기 예제...

 

Main

 

전체 소스 코드

Form1.vb

 

Imports System.Runtime.InteropServices

Public Class Form1

    'API 선언...
    Private Declare Function ImmGetContext Lib "imm32.dll" (ByVal hwnd As Integer) As Integer
    Private Declare Function ImmGetConversionStatus Lib "imm32.dll" (ByVal himc As Integer, ByRef lpdw As Integer, ByRef lpdw2 As Integer) As Integer

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)

        Timer1.Start()

    End Sub

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

        Timer1.Stop()

    End Sub


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Try
            Dim hIMC As Integer
            Dim dwConversion As Integer, dwSentence As Integer
            Dim rc As Integer

            hIMC = ImmGetContext(textBox1.Handle.ToInt32)
            'TextBox 한영키 상태값 얻기...
            rc = ImmGetConversionStatus(hIMC, dwConversion, dwSentence)

            If dwConversion = 0 Then
                label1.Text = "한영키 상태 : 영문"
            Else
                label1.Text = "한영키 상태 : 한글"
            End If
        Catch ex As Exception
            Debug.WriteLine(ex.Message.ToString())
        End Try

    End Sub

End Class

*예제 결과

 

 

 

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

 

[C#] [API] 한/영 키 상태 값 구하기

* C# API 를 이용해 한/영 키 상태 값 구하기 예제... 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; usin..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET 윈도우 폼(Window Form) 화면 그대로 프린트(Print) 하기 예제...

 

Main

 

- 화면 구성 : Panel , Listview, Label, Line, GroupBox, printForm

 

위 그림처럼 화면 구성에 printform 을 사용 하기 위해서는 Visual Basic PowerPack dll 이 필요합니다.

 

 

전체 소스 코드

Form1.vb

 

Public Class Form1

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

        ListView1.Items.Clear()

        For iCount As Integer = 1 To 20
            Dim lvi As ListViewItem = New ListViewItem()
            lvi.Text = iCount.ToString()
            lvi.SubItems.Add("TEST " + iCount.ToString())

            ListView1.Items.Add(lvi)
        Next

        MyBase.OnLoad(e)
    End Sub


    Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

        'Enter Key Input...
        If e.KeyCode = Keys.Enter Then
            'Form Print 
            PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = True
            PrintForm1.PrinterSettings.DefaultPageSettings.Margins = New System.Drawing.Printing.Margins(50, 50, 50, 50)
            PrintForm1.Print()

        End If

    End Sub
End Class

 

*예제 결과

 

위 그림 처럼 가상 프린트에 폼(Form) 화면이 그대로 인쇄된 모습을 볼 수 있습니다.

 

 

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

 

[C#] 윈도우 폼(Window Form) - 폼(Form) 화면 그대로 프린트(Print)

* C# 윈도우 폼(Window Form) 화면 그대로 프린트(Print) 하기 예제... - 화면 구성 : Panel , Listview, Label, Line, GroupBox, printForm 위 그림처럼 화면 구성에 printform 을 사용 하기 위해서는 Visual Ba..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET WMI 를 이용한 네트워크 IP 및 Subnet, Gateway 설정 하기 예제...

- WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 imports System.Management

 

Main

전체 소스 코드

Form1.vb

 

Imports System.Management

Public Class Form1

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

        Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
        Dim objMOC As ManagementObjectCollection = objMC.GetInstances()

        For Each MO As ManagementObject In objMOC

            If Not CType(MO("IPEnabled"), Boolean) Then
                Continue For
            End If

            Try
                Dim objNewIP As ManagementBaseObject = Nothing
                Dim objSetIP As ManagementBaseObject = Nothing
                Dim objNewGate As ManagementBaseObject = Nothing
                objNewIP = MO.GetMethodParameters("EnableStatic")
                objNewGate = MO.GetMethodParameters("SetGateways")

                'Set Gateway
                objNewGate("DefaultIPGateway") = New String() {txtGateway.Text}
                objNewGate("GatewayCostMetric") = New Integer() {1}
                'Set IP
                objNewIP("IPAddress") = New String() {txtIP.Text}
                'Set Subnet
                objNewIP("SubnetMask") = New String() {txtSubnet.Text}

                objSetIP = MO.InvokeMethod("EnableStatic", objNewIP, Nothing)
                objSetIP = MO.InvokeMethod("SetGateways", objNewGate, Nothing)

                objSetIP = MO.InvokeMethod("EnableStatic", objNewIP, Nothing)
                objSetIP = MO.InvokeMethod("SetGateways", objNewGate, Nothing)

                MessageBox.Show("Updated IPAddress, SubnetMask and Default Gateway!")
            Catch ex As Exception
                MessageBox.Show("Unable to Set IP : " + ex.Message)
            End Try

        Next


    End Sub

End Class

*예제 결과

 

윈도우 시작 -> 실행 -> cmd -> ipconfig 로 네트워크 IP 확인 가능

 

변경하기 전 IP 

 



변경 후 네트워크 IP

 

 

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

 

[VBNET] [WMI] 네트워크 IP 및 Subnet, Gateway 얻어오기

*VBNET WMI 를 이용한 네트워크 IP 및 Subnet, Gateway 얻어 오기 예제... 전체 소스 코드 Form1.vb Imports System.Management Public Class Form1 Private Sub button1_Click(ByVal sender As System.Object, B..

kdsoft-zeros.tistory.com

 

반응형
반응형

*VBNET WMI 를 이용한 네트워크 IP 및 Subnet, Gateway 얻어 오기 예제...

- WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 imports System.Management

 

Main

전체 소스 코드

Form1.vb

 

Imports System.Management

Public Class Form1

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

        Dim MC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
        Dim MOC As ManagementObjectCollection = MC.GetInstances()

        For Each MO As ManagementObject In MOC

            'nothing 아니면...
            If Not MO("IPAddress") Is Nothing Then

                If TypeOf MO("IPAddress") Is Array Then
                    'IP 및 Subnet, Gateway String 배열로 변환...
                    Dim address() As String = CType(MO("IPAddress"), String())
                    Dim subnets() As String = CType(MO("IPSubnet"), String())
                    Dim gateways() As String = CType(MO("DefaultIPGateway"), String())

                    '모두 nothing 이 아니면...
                    If (Not address Is Nothing) And (Not subnets Is Nothing) And (Not gateways Is Nothing) Then

                        '화면에 표시...
                        lblIP.Text = address(0)
                        lblSubnet.Text = subnets(0)
                        lblGateway.Text = gateways(0)

                    End If


                End If
                
            End If

        Next


    End Sub

End Class

*예제 결과

 

결과화면

 

윈도우 시작 -> 실행 -> cmd -> ipconfig 를 입력 하시면 위 그림과 같이 네트워크 IP 를 확인 하실 수 있습니다.

 

 

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

 

[C#] [WMI] 네트워크 IP 및 Subnet , Gateway 얻어오기

* C# WMI 를 이용한 네트워크 IP 및 Subnet, Gateway 얻어 오기 예제... 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Sys..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET WMI 를 이용한 하드 디스크 온도 체크 예제 (HDD Temperature)

- WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 imports System.Management

 

Main

 

전체 소스 코드

Form1.vb

Imports System.Management
Imports Microsoft.Win32
Imports System.Collections

Public Class Form1

    Dim tmr As System.Windows.Forms.Timer = New System.Windows.Forms.Timer()


    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        '타이머가 도는 시간 설정
        tmr.Interval = 1000 '1초
        '타이머 이벤트 등록
        AddHandler tmr.Tick, AddressOf Timer_Tick
        MyBase.OnLoad(e)
    End Sub

    Protected Overrides Sub OnClosed(ByVal e As System.EventArgs)
        tmr.Stop()
        '메모리 해제
        tmr = Nothing
        '메모리 정리
        GC.Collect()
        MyBase.OnClosed(e)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '타이머 시작
        tmr.Start()
    End Sub

    Sub Timer_Tick()
        HDDTemperatrue()
    End Sub

    Public Sub HDDTemperatrue()
        Dim diskTemperature As String = "MSStorageDriver_ATAPISmartData"

        Try
            Dim mos As ManagementObjectSearcher = New ManagementObjectSearcher("root\WMI", "Select * From " + diskTemperature)

            Dim mo As System.Management.ManagementObject
            For Each mo In mos.Get()
                Dim data() As Byte = CType(mo.GetPropertyValue("VendorSpecific"), Byte())
                diskTemperature = data(3).ToString()
                Label1.Text = diskTemperature.ToString()
            Next
        Catch
            diskTemperature = ""
        End Try
    End Sub


End Class

*예제 결과

 

결과화면

 

 

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

 

[C#] [WMI] HDD Temperature (하드디스크 온도 체크)

* C# WMI 를 이용한 하드 디스크 온도 체크 예제 (HDD Temperature) 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System...

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET OLE DB 공급자 (Provider) 리스트 예제...

 

Main

 

전체 소스 코드

Form1.vb

 

Imports System.Data.OleDb

Public Class Form1
    Dim str As String = ""
    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

        listView1.Items.Clear()

        'OLEDB 공급자 가져오기
        Dim oe As OleDbEnumerator = New OleDbEnumerator()
        'DataTable 에 가져온 공급자 담기
        Dim dt As DataTable = oe.GetElements()

        '로컬 네트워크 상에 있는 OLEDB 공급자 리스트
        For iCount As Integer = 0 To dt.Rows.Count - 1
            Dim lvi As ListViewItem = New ListViewItem

            lvi.Text = (iCount + 1).ToString()
            lvi.SubItems.Add(dt.Rows(iCount)(0).ToString())

            '나중에 Excel OLEDB 시 사용
            'If dt.Rows(iCount)(0).ToString().Contains("ACE") Then
            '    str = dt.Rows(iCount)(0).ToString()
            'End If


            listView1.Items.Add(lvi)

        Next

    End Sub

End Class

 

 

* 마이크로 소프트 문서

https://docs.microsoft.com/ko-kr/dotnet/api/system.data.oledb.oledbenumerator?view=netframework-4.8

OleDbEnumerator 클래스

정의

네임스페이스:System.Data.OleDb어셈블리:System.Data.dll, System.Data.OleDb.dll

로컬 네트워크에 있는 사용 가능한 모든 OLE DB 공급자를 열거하는 메커니즘을 제공합니다.

C#복사

 

public sealed class OleDbEnumerator상속

Object

OleDbEnumerator

생성자

OleDbEnumerator()

OleDbEnumerator 클래스의 인스턴스를 만듭니다.

메서드

Equals(Object)

지정한 개체가 현재 개체와 같은지를 확인합니다.

(다음에서 상속됨 Object)
GetElements()

표시되는 모든 OLE DB 공급자에 대한 정보를 포함하는 DataTable을 검색합니다.

GetEnumerator(Type)

특정 OLE DB 열거자를 사용하여 OleDbDataReader 클래스 인스턴스를 필요로 하지 않고 현재 설치된 OLE DB 공급자에 대한 정보를 포함하는 OleDbEnumerator를 반환합니다.

GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetRootEnumerator()

OleDbDataReader 클래스 인스턴스를 필요로 하지 않고 현재 설치된 OLE DB 공급자에 대한 정보를 포함하는 OleDbEnumerator를 반환합니다.

GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 string을 반환합니다.

(다음에서 상속됨 Object)

 

* 예제 결과

 

결과 화면

 

반응형
반응형

배열 변수의 스토리지 공간을 다시 할당합니다.

구문

VB복사

 

ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]

요소

용어정의

Preserve (선택 사항) 마지막 차원의 크기만 변경한 경우 기존 배열의 데이터를 유지하기 위해 사용되는 한정자입니다.
name 필수입니다. 배열 변수의 이름입니다. Declared Element Names을 참조하세요.
boundlist 필수입니다. 다시 정의된 배열의 각 차원에 대한 범위 목록입니다.

주의

ReDim 문을 사용하여 이미 선언된 배열의 차원 중 하나 이상의 크기를 변경할 수 있습니다. 큰 배열이 있고 요소가 더 이상 필요하지 않은 경우 ReDim은 배열 크기를 줄여서 메모리를 확보할 수 있습니다. 반면에 배열에 요소가 더 필요한 경우 ReDim은 요소를 추가할 수 있습니다.

ReDim 문은 배열에만 사용할 수 있으며 스칼라(단일 값만 포함된 변수), 컬렉션 또는 구조체에서는 유효하지 않습니다. 변수를 Array 형식으로 선언하는 경우 ReDim 문에는 새 배열을 만들 수 있는 충분한 형식 정보가 없습니다.

ReDim 은 프로시저 수준에서만 사용할 수 있습니다. 따라서 변수의 선언 컨텍스트는 프로시저여야 하며, 소스 파일, 네임스페이스, 인터페이스, 클래스, 구조체, 모듈 또는 블록일 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.

규칙

  • 여러 변수. 동일한 선언문에서 여러 배열 변수의 크기를 조정 하 고 각 변수에 대 한 name  boundlist 부분을 지정할 수 있습니다. 여러 변수는 쉼표로 구분됩니다.

  • 배열 범위입니다. boundlist의 각 항목은 해당 차원의 하 한과 상한을 지정할 수 있습니다. 하한은 항상 0(영)입니다. 상한은 해당 차원에 가능한 최대 인덱스 값이며 차원의 길이(상한에 1을 더한 값)는 아닙니다. 각 차원의 인덱스는 0부터 상한 값까지 다양할 수 있습니다.

    boundlist의 차원 수는 배열의 원래 차원 수(차수)와 일치해야 합니다.

  • 데이터 형식. ReDim 문은 배열 변수 또는 해당 요소의 데이터 형식을 변경할 수 없습니다.

  • 초기. ReDim 문은 배열 요소에 대해 새 초기화 값을 제공할 수 없습니다.

  • 배열. ReDim 문은 배열의 차수 (차원 수)를 변경할 수 없습니다.

  • Preserve를 사용 하 여 크기 조정. Preserve사용 하는 경우 배열의 마지막 차원만 크기를 조정할 수 있습니다. 다른 모든 차원의 경우에는 기존 배열의 범위를 지정해야 합니다.

    예를 들어 배열에 차원이 하나만 있는 경우 해당 차원의 크기를 조정해도 배열의 모든 내용을 보존할 수 있습니다. 마지막이자 유일한 차원을 변경하기 때문입니다. 그러나 배열에 둘 이상의 차원이 있는 경우에는 Preserve를 사용하여 마지막 차원의 크기만 변경할 수 있습니다.

  • 정보의. 값의 배열을 포함 하는 속성에 ReDim를 사용할 수 있습니다.

동작

  • 배열 바꾸기. ReDim 기존 배열을 해제 하 고 동일한 순위로 새 배열을 만듭니다. 새 배열은 배열 변수에서 해제된 배열을 대체합니다.

  • 을 유지 하지 않고 초기화 합니다. Preserve지정 하지 않으면 해당 데이터 형식에 대 한 기본값을 사용 하 여 새 배열의 요소를 초기화 ReDim.

  • Preserve를 사용 하 여 초기화 합니다. Preserve지정 하는 경우 Visual Basic 기존 배열의 요소를 새 배열에 복사 합니다.

예제

다음 예제에서는 배열의 기존 데이터를 손실하지 않고 동적 배열의 마지막 차원 크기를 늘린 다음 데이터를 부분적으로 손실하며 크기를 줄입니다. 마지막으로 크기를 원래 값으로 다시 줄이고 모든 배열 요소를 다시 초기화합니다.

VB복사

 

Dim intArray(10, 10, 10) As Integer ReDim Preserve intArray(10, 10, 20) ReDim Preserve intArray(10, 10, 15) ReDim intArray(10, 10, 10)

Dim 문은 차원이 세 개인 새 배열을 만듭니다. 각 차원은 범위 10으로 선언되므로 각 차원의 배열 인덱스는 0에서 10까지의 범위일 수 있습니다. 다음 설명에서는 세 개의 차원이 계층, 행 및 열로 지칭됩니다.

첫 번째 ReDim은 intArray 변수의 기존 배열을 대체하는 새 배열을 만듭니다. ReDim 기존 배열의 모든 요소를 새 배열에 복사 합니다. 또한 모든 계층에 있는 각 행의 끝에 열 10개를 더 추가하고 이러한 새 열의 요소를 0(배열의 요소 형식인 Integer의 기본값)으로 초기화합니다.

두 번째 ReDim은 새 배열을 하나 더 만들고 적합한 모든 요소를 복사합니다. 그러나 5개의 열이 각 계층에 있는 각 행의 끝에서 손실됩니다. 이는 해당 열의 사용을 마친 경우 문제가 되지 않습니다. 큰 배열의 크기를 줄이면 더 이상 필요하지 않은 메모리를 확보할 수 있습니다.

세 번째 ReDim은 새 배열을 하나 더 만들고 각 계층에 있는 각 행의 끝에서 5개의 열을 제거합니다. 이번에는 기존 요소를 복사하지 않습니다. 이 문은 배열을 원래 크기로 되돌립니다. 이 문은 Preserve 한정자를 포함하지 않기 때문에 모든 배열 요소를 원래 기본값으로 설정합니다.

 

*출처

https://docs.microsoft.com/ko-kr/dotnet/visual-basic/language-reference/statements/redim-statement

 

ReDim 문 - Visual Basic

ReDim 문(Visual Basic)ReDim Statement (Visual Basic) 이 문서의 내용 --> 배열 변수의 스토리지 공간을 다시 할당합니다.Reallocates storage space for an array variable. 구문Syntax ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ] 요소Parts 용어Term 정의Definition Preserve (선택 사

docs.microsoft.com

 

*간략히 요약

 - VB6 이나 VBNET 에서 Redim 문과 Redim Preserve 문은 선언된 또는 선언 해야 되는 배열을 재구성 하여 다시 초기

화 하여 선언된다는 뜻 입니다. 다만

 Redim 문은 배열을 재구성 하여 선언 초기화 함에 있어 이미 선언된 배열일 경우 안에 내용 또한 초기화가 됩니다.

 Redim Preserve 문은 배열을 재구성 하여 선언 초기화 함에 있어 이미 선언된 배열 안의 내용은 초기화 되지 않습니다.

 

아래는 Redim Preserve 문 예제 입니다.

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

 

[VBNET] Redim Preserve 및 배열 크기(Size) 조절

* Redim Preserve 및 배열 크기 조절 예제... 전체 소스 코드 Form1.vb Public Class Form1 Dim strTmp(2) As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Hand..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts