[ 무료 ] 웹툰 , 이상한 것들
레이블이 vb6.0 or vba인 게시물을 표시합니다. 모든 게시물 표시
레이블이 vb6.0 or vba인 게시물을 표시합니다. 모든 게시물 표시

2026년 2월 5일 목요일

작업 관리자 대신 초경량 프로그램으로 마우스 멈춤 해결하기 (VB6.0)

 윈도우에서 작업 관리자를 실행하면 마우스 랙이 사라지지만,

닫으면 일정 시간 후 마우스가 멈추거나 끊기는 현상이 발생하는 경우가 있습니다.

USB 전원 관리, 드라이버 설정을 모두 해도 해결되지 않는다면
작업 관리자와 비슷한 역할을 하는 초경량 프로그램을 상시 실행하는 방법이 하나의 대안이 될 수 있습니다.


왜 이런 현상이 발생할까?

작업 관리자는 실행 중일 때 다음과 같은 역할을 합니다.

  • CPU 및 시스템 상태를 주기적으로 감시

  • 메시지 루프를 계속 유지

  • 윈도우가 깊은 절전 상태로 들어가는 것을 방지

그래서 작업 관리자가 켜져 있으면
USB, 마우스 입력이 잠들지 않아 문제가 발생하지 않는 것처럼 보이게 됩니다.


해결 방법: 작업 관리자 대체용 초경량 프로그램 실행

아래는 VB6.0으로 만든 아주 가벼운 프로그램으로
작업 관리자와 유사하게 시스템을 “깨워주는” 역할만 수행합니다.

  • 창 없음

  • CPU 점유율 거의 0%

  • 실행 파일 크기 매우 작음

  • 마우스 멈춤 현상 완화 목적


VB6.0 초경량 Keep-Alive 프로그램 만들기

1️⃣ 새 프로젝트 생성

  • Visual Basic 6.0 실행

  • Standard EXE 선택


2️⃣ Form 설정 (Form1)

속성 창에서 다음과 같이 설정합니다.

Visible = False ShowInTaskbar = False BorderStyle = 0 (None)

3️⃣ Timer 컨트롤 추가

  • Timer 컨트롤 하나 추가

  • 속성 설정

Interval = 1000 ' 1Enabled = True

4️⃣ VB6.0 코드 (Form1)

Option Explicit Private Sub Form_Load() Me.Visible = False End Sub Private Sub Timer1_Timer() ' 작업 관리자처럼 시스템을 깨워주는 역할 DoEvents End Sub

프로그램 특징

  • 실행해도 아무 창도 보이지 않음

  • CPU 사용률 0% 수준

  • EXE 용량 약 20~30KB

  • 작업 관리자를 켜둔 것과 유사한 효과

👉 마우스 멈춤, 입력 랙이 사라지는 경우가 많음


활용 방법

  • 시작 프로그램에 등록해 윈도우 부팅 시 자동 실행

  • 작업 관리자 대신 상시 실행

  • USB 절전 문제를 근본적으로 해결하기 어려운 환경에서 사용


주의사항

  • 이 방법은 근본 원인 해결이 아닌 우회 방법

  • 가능하다면 USB 전원 관리, 전원 옵션 설정을 먼저 권장

  • 그래도 해결되지 않을 경우에만 사용 추천


정리

  • 작업 관리자를 켜야 마우스가 정상이라면
    → 시스템 절전 진입 문제일 가능성이 큼

  • VB6.0 초경량 프로그램으로 동일한 효과 구현 가능

  • 구형 PC, 저사양 노트북, 특정 USB 마우스 환경에서 특히 유용



작업관리자 마우스 멈춤
마우스 랙 작업 관리자
VB6 마우스 끊김 해결
USB 절전 마우스 멈춤

2026년 2월 3일 화요일

VB6 마우스 휠 스크롤 문제 해결 방법 (vb6mousewheel.exe)

 Visual Basic 6.0(VB6) IDE는 기본적으로 마우스 휠 스크롤을 지원하지 않는 문제가 있습니다.

이를 해결하기 위해 사용되는 공식 애드인이 바로 vb6mousewheel.exe 입니다.

이 애드인을 설치하면 VB6 코드 창, 폼 편집기 등에서 마우스 휠 스크롤이 정상 작동합니다.


설치 및 설정 방법

1️⃣ 파일 다운로드 및 압축 해제

vb6mousewheel.exe 파일을 다운로드한 후 실행하면 압축 해제됩니다.
원하는 폴더에 압축을 풀어주세요.

압축 해제 후 VB6IDEMouseWheelAddin.dll 파일이 생성됩니다.


2️⃣ DLL 파일 등록 (중요)

관리자 권한으로 명령 프롬프트(CMD) 를 실행합니다.

아래 명령어를 입력해 DLL을 등록합니다.

regsvr32 "C:\경로\VB6IDEMouseWheelAddin.dll"

✔ 경로는 DLL 파일이 있는 실제 위치로 수정해야 합니다.

정상적으로 등록되면 DllRegisterServer 성공 메시지가 표시됩니다.




3️⃣ VB6 애드인 설정

  1. Visual Basic 6.0 실행

  2. 상단 메뉴에서 Add-Ins → Add-In Manager 선택

  3. 목록에서 MouseWheel Fix 선택


4️⃣ 애드인 활성화

아래 두 항목을 모두 체크합니다.

  • ✅ Loaded / Unloaded

  • ✅ Load on Startup

확인 버튼을 누르면 설정 완료 🎉


참고 사항 및 문제 해결

  • 이 애드인은 VB6 코드 창, 폼 편집기 등에서 마우스 휠을 정상 작동하게 합니다.

  • 일부 환경에서는 파일이 공식적으로 제공되지 않을 수 있으며
    SourceForge 등 커뮤니티 사이트에서 대체 파일을 찾을 수 있습니다.

  • 설치 후에도 작동하지 않는다면:

    • PC 재부팅

    • regsvr32 명령어 재실행

    • 관리자 권한 여부 확인
      을 다시 점검해 주세요.

2025년 3월 28일 금요일

[VB6] 폼 종료(X) 버튼 클릭 시 종료 여부 확인하는 방법

 VB6(VB6.0)에서 폼의 종료(X) 버튼을 눌렀을 때, 바로 종료되지 않고 사용자가 종료할지 취소할지 선택할 수 있도록 설정하는 방법을 소개합니다.

종료 버튼(X) 클릭 시 확인 메시지 띄우기

사용자가 X 버튼을 눌렀을 때, "프로그램을 종료하시겠습니까?"와 같은 메시지를 띄워 종료 여부를 선택하도록 만들 수 있습니다.

구현 코드 (Form_QueryUnload 사용)

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    ' X 버튼을 눌렀을 때 확인 메시지를 표시
    If UnloadMode = vbFormControlMenu Then
        Dim result As Integer
        result = MsgBox("프로그램을 종료하시겠습니까?",
                 vbYesNo + vbQuestion, "종료 확인")
        
        ' 사용자가 "아니오"를 선택하면 종료 취소
        If result = vbNo Then
            Cancel = True
        End If
    End If
End Sub

코드 설명

  1. QueryUnload 이벤트 활용

    • 폼이 닫히려 할 때 실행되는 이벤트입니다.

    • UnloadModevbFormControlMenu이면 X 버튼을 클릭한 경우입니다.

  2. MsgBox로 종료 확인 메시지 표시

    • vbYesNo + vbQuestion 옵션을 사용하여 "예/아니오" 버튼이 있는 메시지를 띄웁니다.

  3. 종료 여부 결정

    • 사용자가 "예(Yes)"를 선택하면 종료됩니다.

    • 사용자가 "아니오(No)"를 선택하면 Cancel = True로 종료를 취소합니다.

실행 예시

X 버튼을 누르면 다음과 같은 메시지가 표시됩니다.

[종료 확인]
프로그램을 종료하시겠습니까?
[예]  [아니오]
  • [예]를 클릭하면 프로그램이 종료됩니다.

  • [아니오]를 클릭하면 프로그램이 계속 실행됩니다.

응용: 특정 버튼으로만 종료되도록 설정

만약 X 버튼으로는 종료되지 않고, 특정 버튼을 눌러야만 종료되도록 만들고 싶다면 다음과 같이 구현할 수 있습니다.

특정 버튼을 눌러야만 종료되게 만들기

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    ' X 버튼으로 종료 방지
    If UnloadMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "이 프로그램은 X 버튼으로 종료할 수 없습니다.", vbInformation, "알림"
    End If
End Sub

' 종료 버튼 (CommandButton) 클릭 시 종료
Private Sub cmdExit_Click()
    Unload Me
End Sub

마무리

이 방법을 활용하면 VB6 프로그램에서 실수로 X 버튼을 눌러 종료되는 것을 방지하고, 사용자에게 종료 여부를 확인할 수 있도록 할 수 있습니다. 필요에 따라 X 버튼을 아예 비활성화하거나, 특정 버튼으로만 종료되도록 변경하는 것도 가능합니다.

2024년 8월 9일 금요일

VB6에서 MSFlexGrid 마우스 휠로 스크롤 및 확대/축소 기능 구현 방법

서론

Visual Basic 6.0(VB6)은 오래된 개발 환경이지만, 여전히 많은 프로젝트에서 사용되고 있습니다. 특히 MSFlexGrid 컨트롤은 테이블 형태의 데이터를 표시할 때 자주 사용됩니다. 이 글에서는 MSFlexGrid에서 마우스 휠과 Ctrl 키를 사용하여 스크롤 및 확대/축소 기능을 구현하는 방법을 소개합니다. 이 기능은 사용자 경험을 개선하고, 데이터를 더 쉽게 확인할 수 있도록 도와줍니다.

주요 기능 및 요구 사항

  1. 기본 스크롤: 마우스 휠로 그리드 내용을 위아래로 스크롤합니다.
  2. 확대/축소: Ctrl 키를 누른 상태에서 마우스 휠을 움직이면 셀 내용을 확대하거나 축소할 수 있습니다.

이 기능을 구현하기 위해 윈도우 메시지 후킹(Window Hooking) 기법을 사용합니다.

코드 예제

1. Form1 코드

Option Explicit

Private Sub Form_Load()
    ' MSFlexGrid 초기화
    With MSFlexGrid1
        .Cols = 5
        .Rows = 20 ' 더 많은 행을 추가하여 스크롤 가능하게 설정
        .TextMatrix(0, 0) = "Header 1"
        .TextMatrix(0, 1) = "Header 2"
        .TextMatrix(0, 2) = "Header 3"
        .TextMatrix(0, 3) = "Header 4"
        .TextMatrix(0, 4) = "Header 5"
        
        Dim i As Integer, j As Integer
        For i = 1 To .Rows - 1
            For j = 0 To .Cols - 1
                .TextMatrix(i, j) = "R" & i & "C" & j
            Next j
        Next i
    End With
    
    ' 폼의 윈도우 프로시저 후킹
    HookForm Me.hWnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' 윈도우 프로시저 후킹 해제
    UnhookForm
End Sub

Public Sub MouseWheel(Direction As Integer)
    If (GetAsyncKeyState(vbKeyControl) And &H8000) <> 0 Then
        ' Ctrl 키가 눌려있는 경우 확대/축소
        ZoomGrid Direction
    Else
        ' 일반 스크롤
        ScrollGrid Direction
    End If
End Sub

Private Sub ScrollGrid(Direction As Integer)
    Dim newRow As Long
    With MSFlexGrid1
        If Direction > 0 Then ' Scroll up
            newRow = .TopRow - 1
            If newRow < 1 Then newRow = 1
        Else ' Scroll down
            newRow = .TopRow + 1
            If newRow > .Rows - 1 Then newRow = .Rows - 1
        End If
        .TopRow = newRow
    End With
End Sub

Private Sub ZoomGrid(Direction As Integer)
    Static currentFontSize As Integer
    If currentFontSize = 0 Then currentFontSize = MSFlexGrid1.Font.Size
    
    If Direction > 0 Then ' Zoom in
        currentFontSize = currentFontSize + 1
    Else ' Zoom out
        currentFontSize = currentFontSize - 1
        If currentFontSize < 1 Then currentFontSize = 1 ' 최소 폰트 크기 제한
    End If
    
    MSFlexGrid1.Font.Size = currentFontSize
End Sub


---

2. Module1 모듈 코드

Option Explicit

Public Const GWL_WNDPROC = -4
Public Const WM_MOUSEWHEEL = &H20A

Public lpPrevWndProc As Long
Public hWndForm As Long

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
    (ByVal lpPrevWndProc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function GetAsyncKeyState Lib "user32" _
    (ByVal vKey As Long) As Integer

Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long

    If uMsg = WM_MOUSEWHEEL Then
        Dim zDelta As Integer
        zDelta = (wParam And &HFFFF0000) \ &H10000
        
        ' 마우스 휠 이벤트 처리
        Form1.MouseWheel zDelta
        
        WindowProc = 0 ' 이벤트 처리 완료
        Exit Function
    End If
    
    WindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wParam, lParam)
End Function

Public Sub HookForm(hWnd As Long)
    lpPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
    hWndForm = hWnd
End Sub

Public Sub UnhookForm()
    If lpPrevWndProc <> 0 Then
        SetWindowLong hWndForm, GWL_WNDPROC, lpPrevWndProc
        lpPrevWndProc = 0
    End If
End Sub

---

코드 설명

  1. 폼 초기화 및 후킹:

    • 폼이 로드될 때 MSFlexGrid를 초기화하고 HookForm 함수로 윈도우 프로시저를 후킹합니다.
    • 폼이 언로드될 때는 UnhookForm을 호출하여 후킹을 해제합니다.
  2. 마우스 휠 이벤트 처리:

    • MouseWheel 서브루틴은 마우스 휠 움직임을 처리합니다.
    • Ctrl 키가 눌린 상태에서는 ZoomGrid 함수로 폰트 크기를 조절하여 그리드 셀 내용을 확대/축소합니다.
    • 일반적으로는 ScrollGrid 함수로 그리드 내용을 스크롤합니다.
  3. 윈도우 프로시저 후킹:

    • WindowProc 함수는 후킹된 윈도우 프로시저로, 마우스 휠 이벤트를 감지하고 적절한 처리를 합니다.

마무리

이 글에서 소개한 방법을 사용하면 VB6의 MSFlexGrid에서 마우스 휠과 Ctrl 키를 사용한 스크롤 및 확대/축소 기능을 쉽게 구현할 수 있습니다. 이 방법은 사용자가 데이터를 더 효율적으로 탐색할 수 있도록 돕는 데 큰 도움이 될 것입니다. VB6 개발을 하면서 이와 같은 추가 기능을 통해 프로그램의 사용성을 높여보세요.


2024년 6월 8일 토요일

VB.NET에서 Windows API를 사용하여 폼의 제목 표시줄 동적으로 제어하기

 Imports System.Runtime.InteropServices


Public Class Form1


    ' 윈도우 스타일을 얻거나 설정하기 위한 상수 정의

    Private Const GWL_STYLE As Integer = -16

    Private Const WS_CAPTION As Integer = &HC00000

    Private Const SM_CYCAPTION As Integer = 4


    ' GetWindowLong 함수 선언: 윈도우 스타일을 가져옴

    <DllImport("user32.dll", SetLastError:=True)>

    Private Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer

    End Function


    ' SetWindowLong 함수 선언: 윈도우 스타일을 설정함

    <DllImport("user32.dll", SetLastError:=True)>

    Private Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer

    End Function


    ' GetSystemMetrics 함수 선언: 시스템 메트릭스를 가져옴

    <DllImport("user32.dll")>

    Private Shared Function GetSystemMetrics(ByVal nIndex As Integer) As Integer

    End Function


    ' 타이틀바 높이를 저장할 변수

    Private cycap As Integer


    ' 폼이 로드될 때 실행되는 코드

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

        ' 버튼의 텍스트를 "Nocaption"으로 설정

        btnToggleCaption.Text = "Nocaption"

        ' 타이틀바의 높이를 가져와서 cycap 변수에 저장

        cycap = GetSystemMetrics(SM_CYCAPTION)

    End Sub


    ' 폼이 닫힐 때 실행되는 코드

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)

        ' 현재 윈도우 스타일을 가져옴

        Dim style As Integer = GetWindowLong(Me.Handle, GWL_STYLE)


        ' 버튼의 텍스트가 "Caption"이 아닌 경우, 타이틀바를 다시 보여줌

        If btnToggleCaption.Text <> "Caption" Then

            SetWindowLong(Me.Handle, GWL_STYLE, style Or WS_CAPTION)

        End If

    End Sub


    ' 버튼 클릭 시 실행되는 코드

    Private Sub btnToggleCaption_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnToggleCaption.Click

        ' 현재 윈도우 스타일을 가져옴

        Dim style As Integer = GetWindowLong(Me.Handle, GWL_STYLE)


        ' 버튼의 텍스트가 "Nocaption"인 경우, 타이틀바를 없앰

        If btnToggleCaption.Text = "Nocaption" Then

            btnToggleCaption.Text = "Caption"

            SetWindowLong(Me.Handle, GWL_STYLE, style And Not WS_CAPTION)

            Me.Height -= cycap

        Else

            ' 버튼의 텍스트가 "Caption"인 경우, 타이틀바를 다시 보여줌

            btnToggleCaption.Text = "Nocaption"

            SetWindowLong(Me.Handle, GWL_STYLE, style Or WS_CAPTION)

            Me.Height += cycap

        End If

    End Sub


End Class


2021년 10월 13일 수요일

vba1

 



다음은 Visual Basic 6에서 DoEvents 함수를 사용하는 예제입니다:

vb
Private Sub Command1_Click() 
Dim i As Integer 
For i = 1 To 100 
     Label1.Caption = i DoEvents '다른 이벤트/메시지를 처리할 수 있도록 함
Next i
MsgBox "카운트가 완료되었습니다." 
End Sub

이 예제에서 DoEvents 함수는 1부터 100까지 세는 For 루프 내에서 사용됩니다. 루프 내에서 i의 현재 값이 레이블 컨트롤에 표시됩니다 (Label1.Caption = i). DoEvents 함수는 루프 내에서 호출되어 루프가 실행되는 동안 다른 이벤트 및 메시지를 처리할 수 있도록하며, 이를 통해 응용 프로그램이 "동결"되거나 응답하지 않는 것처럼 보이는 것을 방지합니다.

DoEvents 함수가 없으면 루프가 완료될 때까지 다른 이벤트나 메시지가 처리되지 않으므로, 루프가 완전히 실행될 때까지 레이블 컨트롤이 업데이트되지 않습니다.

루프가 완료된 후에는 카운트가 완료되었음을 나타내는 메시지 박스가 표시됩니다.

-


Sidewinder


World


FishMusic


LaughingBaby