반응형

*C# PC 사용 시간 얻어 오기 예제...

 

Main

 

- 사용한 컨트롤 : Button 1개, Label 1개

 

전체 소스 코드 

From1.cs


Public Class Form1

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

            Using pc As PerformanceCounter = New PerformanceCounter("System", "System Up Time")
                pc.NextValue()
                label1.Text = TimeSpan.FromSeconds(pc.NextValue()).ToString()
            End Using

        Catch ex As Exception
            label1.Text = "00:00:00"
        End Try
    End Sub
End Class

 

*예제 결과

 

 

 

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

 

[C#] PC 사용 시간 얻어 오기 (PC Use Time)

*C# PC 사용 시간 얻어 오기 예제... - 사용한 컨트롤 : Button 1개, Label 1개 전체 소스 코드 From1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; us..

kdsoft-zeros.tistory.com

 

반응형
반응형

*VBNET API 를 이용한 Wav 파일 재생 예제...

 

 

- 사용한 컨트롤 : Button 3개, Label 1개

 

전체 소스 코드

Form1.vb

 

Imports System.Runtime.InteropServices
Imports System.Text

Public Class Form1

    <DllImport("winmm.dll")> _
    Private Shared Function mciSendString(ByVal command As String, ByVal buffer As StringBuilder, ByVal bufferSize As Integer, ByVal hwndCallback As IntPtr) As Integer
    End Function

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'File Open
        Dim ofd As OpenFileDialog = New OpenFileDialog

        ofd.Filter = "WAV File(*.wav) | *.wav"

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

    End Sub



    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        'Play
        If Not System.IO.File.Exists(label1.Text) Then
            Return
        End If

        mciSendString("open """ + label1.Text + """ type mpegvideo alias MediaFile", Nothing, 0, IntPtr.Zero)
        mciSendString("play MediaFile", Nothing, 0, IntPtr.Zero)

    End Sub

    Private Sub button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button3.Click
        'Stop
        mciSendString("Close MediaFile", Nothing, 0, IntPtr.Zero)
    End Sub
End Class

 

 

*예제 결과

 

 

 

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

 

[C#] API mciSendString - WAV 파일 재생

*C# API 를 이용한 Wav 파일 재생 예제... - 사용한 컨트롤 : Button 3개, Label 1개 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET Sendkeys 를 이용한 화면 캡쳐 (Screen Capture) 예제...

 

Main

 

 

- 사용한 컨트롤 : Button 2개, PictureBox 1개

 

전체 소스 코드

Form1.vb

 

Public Class Form1

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'Alt+PrntScr 키 누른 효과
        'SendKeys.SendWait("%{PRTSC}")
        'PrntScr 키 누른 효과
        SendKeys.SendWait("{PRTSC}")

        '클립보드에서 PrntScr 키로 화면 캡쳐한 이미지 얻어내기
        Dim ig As Image = Clipboard.GetImage()
        If ig Is Nothing Then
            Return
        End If

        'PictureBox 에 Image 표시
        pictureBox1.Image = ig
        'PictureBox 화면 갱신
        pictureBox1.Refresh()
    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        'Picture Box 이미지 가져 오기
        Dim bt As Bitmap = New Bitmap(pictureBox1.Image)
        Dim sfd As SaveFileDialog = New SaveFileDialog()

        sfd.Filter = "JPG File(*.jpg) | *.jpg"

        If sfd.ShowDialog() = DialogResult.OK Then
            bt.Save(sfd.FileName)
        End If

    End Sub

End Class

 

 

다음은 마이크로소프트 사에서 제공하는 문서 내용 가져온 Sendkeys 명령 KeyCode

(https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.sendkeys.send?view=netframework-4.8)

 

키코드

Backspace {백스페이스}, {B} 또는 {BKSP}
BREAK {중단}
CAPS LOCK {CAPSLOCK}
DEL 또는 삭제 {삭제} 또는 {삭제}
아래쪽 화살표 {를}
END {END}
Enter 키 {0} 입력} 또는 ~
Esc {ESC}
HELP {도움말}
Home {0} 홈}
기능 또는 삽입 {삽입} 또는 {기능}
왼쪽 화살표 {LEFT}
NUM LOCK {NUMLOCK}
Page Down {PGDN}
Page Up {PGUP}
PRINT SCREEN {PRTSC} (사용 하도록 예약)
오른쪽 화살표 {RIGHT}
스크롤 잠금 {SCROLLLOCK}
Tab {TAB}
위쪽 화살표 {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
키패드 추가 {0} 추가}
키패드 빼기 {빼기}
키패드 곱하기 {곱하기}
키패드 나누기 {나누기}

SHIFT, CTRL 및 ALT 키 조합을 사용 하 여 결합 된 키를 지정 하려면 하나 이상의 다음 코드를 사용 하 여 키 코드 앞에 야 합니다.

테이블 2키코드

 

SendKeys 클래스는 Windows Vista에서 실행되는 애플리케이션에서 사용할 수 있도록 .NET Framework 3.0에서 업데이트되었습니다. Windows Vista의 향상된 보안(사용자 계정 컨트롤 또는 UAC라고 함) 때문에 이전 구현이 예상대로 작동하지 않습니다.

 

SendKeys 클래스는 타이밍 문제에 취약하며, 이를 해결하기 위해 일부 개발자가 노력해야 했습니다. 업데이트된 구현도 타이밍 문제에 취약하지만 약간 더 빠르며 해결 방법에 대한 변경이 필요할 수도 있습니다. SendKeys 클래스는 먼저 이전 구현을 사용하려고 시도하며, 실패할 경우 새 구현을 사용합니다. 따라서 SendKeys 클래스는 운영 체제마다 다르게 동작할 수 있습니다. 또한 SendKeys 클래스가 새 구현을 사용하는 경우 SendWait 메서드는 다른 프로세스로 전송된 메시지가 처리될 때까지 기다리지 않습니다.

 

 

애플리케이션이 운영 체제와 관계없이 일관된 동작에 의존하는 경우 app.config 파일에 다음 애플리케이션 설정을 추가하여 SendKeys 클래스에서 새 구현을 사용하도록 강제할 수 있습니다.

 

*예제 결과

 

소스코드에서 보듯이 Alt+PrntScr 키 조합을 해서 얻어 낸 결과로 폼(Form) 화면만 스크린 캡쳐 된 모습과

이미지 파일로 저장 하는 모습 입니다. (SendKeys.SendWait ("%{PRTSC}"))

 

 

다음으로 PrntScr 키 조합을 해서 얻어 낸 결과로 폼(Form) 화면만 스크린 캡쳐 된 모습과

이미지 파일로 저장 하는 모습 입니다. (SendKeys.SendWait ("{PRTSC}"))

 

 

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

 

[C#] Sendkeys - 화면 캡쳐 (Screen Capture)

* C# Sendkeys 를 이용한 화면 캡쳐 (Screen Capture) 예제... - 사용한 컨트롤 : Button 2개, PictureBox 1개 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.Componen..

kdsoft-zeros.tistory.com

 

반응형
반응형

 

* VBNET 사용자가 선택한 프로세스 죽이기 예제...

- WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 Imports System.Management
  (WMI 는 현재 실행중인 프로세스 조회를 하기 위해)

Main

 

- 사용된 컨트롤: Button 2개, 리스트뷰 1개


전체 소스 코드

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
        'Search
        Dim strQry As String = "Select Name, ProcessID, ExecutablePath, WorkingSetSize From Win32_Process"
        Dim iCount As Integer = 1
        '리스트뷰 아이템 초기화
        listView1.Items.Clear()

        Dim oWMI As ManagementObjectSearcher = New ManagementObjectSearcher(New SelectQuery(strQry))

        For Each oItem As ManagementObject In oWMI.Get()

            Try

                Dim lvi As ListViewItem = New ListViewItem()

                lvi.Text = iCount.ToString()
                lvi.SubItems.Add(oItem.GetPropertyValue("Name").ToString())

                listView1.Items.Add(lvi)
                iCount += 1
            Catch ex As Exception

            End Try

        Next


    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        'Kill
        Dim lvi As ListViewItem = listView1.FocusedItem
        '해당 프로세스 이름 가져 오기 (***.exe -> *** 로)
        Dim strTmp() As String = lvi.SubItems(1).Text.Split("."c)

        Dim pcProcess() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessesByName(strTmp(0))

        If pcProcess.Length > 0 Then
            pcProcess(0).Kill()
            MessageBox.Show("선택된 해당 프로세스를 종료 하였습니다.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)

            'New Search...
            button1_Click(Nothing, Nothing)
        Else
            MessageBox.Show("선택된 해당 프로세스는 실행 되지 않았습니다.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If


    End Sub

End Class

 

 

*예제 결과

 

 

 

 

 

 

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

 

[VBNET] [WMI] 현재 실행 중인 프로세스 조회 (Process Search)

* VBNET WMI 를 이용한 현재 실행 중인 프로세스 조회 (Process Search) - WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 imports System.Management 전체 소스 코드 Form1.vb Impor..

kdsoft-zeros.tistory.com

 

 

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

 

[C#] 선택된 프로세스 죽이기 (Kill Process)

* C# 사용자가 선택한 프로세스 죽이기 예제... - WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 using System.Management (WMI 는 현재 실행중인 프로세스 조회를 하기 위해) - 사..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET 화면 캡쳐 (Screen Capture) 예제...

 

 

Main

 

 

-사용한 컨트롤: Button 2개, PictureBox 1개

 

전체 소스 코드

Form1.vb

 

Public Class Form1
    Dim btMain As Bitmap

    Private Sub btTSC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btTSC.Click

        'Total Screen Capture
        btMain = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)

        Using g As Graphics = Graphics.FromImage(btMain)
            g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, _
                             Screen.PrimaryScreen.Bounds.Y, _
                             0, 0, _
                             btMain.Size, _
                            CopyPixelOperation.SourceCopy)
            'Picture Box Display
            pbMain.Image = btMain

        End Using

    End Sub

    Private Sub btFilesave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btFilesave.Click

        'File Save
        If Not btMain Is Nothing Then
            Dim sfd As SaveFileDialog = New SaveFileDialog()

            sfd.Filter = "JPG File(*.jpg) | *.jpg"

            If sfd.ShowDialog() = DialogResult.OK Then
                btMain.Save(sfd.FileName)
            End If

        End If

    End Sub

End Class

 

 

*예제 결과

 

- 전체 화면 캡쳐한 모습

 

 

-파일로 저장하는 모습

 

 

 

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

 

[C#] 화면 캡쳐 (Screen Capture)

* C# 화면 캡쳐 (Screen Capture) 예제... -사용한 컨트롤: Button 2개, PictureBox 1개 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System...

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET WebBrowser 컨트롤을 이용한 외부 IP 얻어 오기 예제...

 

Main

 

-사용한 컨트롤 : WebBrowser 1개, Label 1개, Button 1개

 

전체 소스 코드

Form1.vb

 

Public Class Form1

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        Dim strURL As String = "http://www.findip.kr/"

        '스크립트 오류 무시 하기...
        webBrowser1.ScriptErrorsSuppressed = True
        webBrowser1.Navigate(strURL)

    End Sub

    Private Sub webBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles webBrowser1.DocumentCompleted

        If Not webBrowser1.Document Is Nothing Then
            Dim hdDOC As HtmlDocument = webBrowser1.Document
            Dim hecArray As HtmlElementCollection = hdDOC.GetElementsByTagName("h1")

            label1.Text = hecArray(0).OuterHtml

        End If

    End Sub

End Class

 

 

위 소스 코드에 보듯이 외부 사이트에 접속 해서 외부 IP 를 얻어 오는 방법으로 webBrower 컨트롤 로 외부 사이트 접속

-> 사이트 html 을 다운 하여 태그에서 얻어 오는 걸 볼 수 있습니다.

HtmlElementCollection 변수에 바로 배열 인덱스 0 을 쓴 이유는 h1 태그가 하나 밖에 없어서 이며, 혹 h1 태그가 여러개가 되면 for 문 또는 for each 문을 사용하여 사용자가 확인 후 걸러낼 수 있습니다. 

 

아래의 그림처럼 구글 크롬으로 외부 사이트 접속 하여 상단 메뉴에 개발자 도구를 선택. 붉은 테투리 의 h1 태그 이름을

가져 옵니다. 

 

 

*예제 결과

 

결과 화면



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

 

[C#] [Control] WebBrowser 컨트롤 - 외부 IP 알아내기

* C# WebBrowser 컨트롤을 이용한 외부 IP 알아내기 예제... -사용한 컨트롤 : WebBrowser 1개, Label 1개, Button 1개 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System...

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET WMI 를 이용한 USB 연결 및 연결해제 예제...

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


Main


- 사용한 컨트롤 : ListView 1개, Button 2개

 

전체 소스 코드

Form1.vb

 

Imports System.Management

Public Class Form1

    Dim mewWatcher As ManagementEventWatcher
    Dim strUSBDriveName As String
    Dim strUSBDriveLetter As String
    Dim iCount As Integer = 0

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

        CheckForIllegalCrossThreadCalls = False

    End Sub

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

        If Not mewWatcher Is Nothing Then

            mewWatcher.Stop()
            mewWatcher.Dispose()

        End If

    End Sub

    Sub mewWatcher_EventArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)

        Dim mbo1 As ManagementBaseObject
        Dim mbo2 As ManagementBaseObject

        mbo1 = CType(e.NewEvent, ManagementBaseObject)
        mbo2 = CType(mbo1("TargetInstance"), ManagementBaseObject)

        Select Case mbo1.ClassPath.ClassName

            Case "__InstanceCreationEvent"

                If mbo2("InterfaceType").ToString() = "USB" Then
                    strUSBDriveName = mbo2("Caption").ToString()
                    strUSBDriveLetter = mbo2("Name").ToString()

                    Dim lvi As ListViewItem = New ListViewItem()
                    lvi.Text = (iCount + 1).ToString()
                    lvi.SubItems.Add(strUSBDriveName + " : " + strUSBDriveLetter + " 연결 되었습니다.")

                    listView1.Items.Add(lvi)
                    iCount += 1
                End If

            Case "__InstanceDeletionEvent"

                If mbo2("InterfaceType").ToString() = "USB" Then
                    If mbo2("Caption").ToString() = strUSBDriveName Then
                        Dim lvi As ListViewItem = New ListViewItem()
                        lvi.Text = (iCount + 1).ToString()
                        lvi.SubItems.Add(strUSBDriveName + " : " + strUSBDriveLetter + " 해제 되었습니다.")

                        listView1.Items.Add(lvi)
                        iCount += 1

                        strUSBDriveLetter = ""
                        strUSBDriveName = ""
                    End If
                End If
        End Select


    End Sub


    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'Start
        'ManageMentEventWatcher 가 null 이면 생성...
        If mewWatcher Is Nothing Then mewWatcher = New ManagementEventWatcher()

        Dim weQuery As WqlEventQuery = New WqlEventQuery("SELECT * FROM __InstanceOperationEvent WITHIN 1 " + "WHERE TargetInstance ISA 'Win32_DiskDrive'")
        mewWatcher.Query = weQuery
        'Event Create
        AddHandler mewWatcher.EventArrived, AddressOf mewWatcher_EventArrived
        mewWatcher.Start()

    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        'Stop
        If mewWatcher Is Nothing Then Return

        mewWatcher.Stop()
        mewWatcher.Dispose()
    End Sub

End Class

 

위 구문에서 보듯이 CheckfoCheckForIllegalCrossThreadCalls 를 사용 (크로스 스레드 예제 https://kdsoft-zeros.tistory.com/23 참조)

 

- 아래 클래스에 붉은색 표시 -> 소스코드에 사용한 필드 !!

 

[Dynamic, Provider("CIMWin32"), UUID("{8502C4B2-5FBB-11D2-AAC1-006008C78BC7}"), AMENDMENT]
class Win32_DiskDrive : CIM_DiskDrive
{
  uint16   Availability;
  uint32   BytesPerSector;
  uint16   Capabilities[];
  string   CapabilityDescriptions[];
  string   Caption;
  string   CompressionMethod;
  uint32   ConfigManagerErrorCode;
  boolean  ConfigManagerUserConfig;
  string   CreationClassName;
  uint64   DefaultBlockSize;
  string   Description;
  string   DeviceID;
  boolean  ErrorCleared;
  string   ErrorDescription;
  string   ErrorMethodology;
  string   FirmwareRevision;
  uint32   Index;
  datetime InstallDate;
  string   InterfaceType;
  uint32   LastErrorCode;
  string   Manufacturer;
  uint64   MaxBlockSize;
  uint64   MaxMediaSize;
  boolean  MediaLoaded;
  string   MediaType;
  uint64   MinBlockSize;
  string   Model;
  string   Name;
  boolean  NeedsCleaning;
  uint32   NumberOfMediaSupported;
  uint32   Partitions;
  string   PNPDeviceID;
  uint16   PowerManagementCapabilities[];
  boolean  PowerManagementSupported;
  uint32   SCSIBus;
  uint16   SCSILogicalUnit;
  uint16   SCSIPort;
  uint16   SCSITargetId;
  uint32   SectorsPerTrack;
  string   SerialNumber;
  uint32   Signature;
  uint64   Size;
  string   Status;
  uint16   StatusInfo;
  string   SystemCreationClassName;
  string   SystemName;
  uint64   TotalCylinders;
  uint32   TotalHeads;
  uint64   TotalSectors;
  uint64   TotalTracks;
  uint32   TracksPerCylinder;
};

 

*예제 결과

 

- 연결된 모습

 

-연결 해제된 모습

 

* 참조 (마이크로소프트)

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskdrive



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

 

[C#] [WMI] USB Detect 예제

* C# WMI 를 이용한 USB 연결 및 연결해제 예제... - WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 using System.Management - 사용한 컨트롤 : ListView 1개, Button 2개 전체 소..

kdsoft-zeros.tistory.com

 

반응형
반응형

* VBNET WMI 를 이용한 CPU 클럭 속도 가져오기 예제...

 

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

 

- 사용 컨트롤 : Label 1개, Button 1개

 

전체 소스 코드

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

        Using mo As ManagementObject = New ManagementObject("Win32_Processor.DeviceID='CPU0'")

            Dim iSpeed As UInteger = CType(mo("CurrentClockSpeed"), UInteger)
            lbl0.Text = iSpeed.ToString()

        End Using

    End Sub

End Class

 

 

*예제 결과

 

 

단위는 메가 헤르츠 이며 내컴퓨터 속성에서 보듯이 값이 똑같다는 걸 볼 수 있습니다.

 

*참조 문서 (마이크로소프트)

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-processor



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



 

[C#] [WMI] CPU 클럭 속도 (CurrentClockSpeed)

* C# WMI 를 이용한 CPU 클럭 속도 가져오기 예제... - WMI 를 사용하기 위해 참조 -> System.Management dll 을 추가 -> 소스 코드 using System.Management - 사용 컨트롤 : Label 1개, Button 1개 전체 소스..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts