VB6 - Проблемы с фоном для другого окна программы? - PullRequest
0 голосов
/ 20 мая 2018

Я создал программу VB6, которая работает в фоновом режиме с другой программой.Это означает, что окно программы будет находиться только сзади этой другой программы.Я использую этот код для него,

Private Declare Function FindWindow1 Lib "User32" Alias "FindWindowA" (ByVal lpclassname As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_HWNDPARENT = -8

Private parenthwnd As Long
Private strTitle As String

Private Sub Form_Load()
        strTitle = "My Program" 'Title of the program window
        parenthwnd = FindWindow1(vbNullString, strTitle)
        Dim R As Long
        R = SetWindowLong(parenthwnd, GWL_HWNDPARENT, Me.hWnd)
End Sub

Другая программа будет запускать эту программу VB6, которая устанавливает себя в качестве фона для другого окна программы.Оно работает.Но есть две проблемы.

  1. Когда программа VB6 выполняет код R = SetWindowLong(parenthwnd, GWL_HWNDPARENT, Me.hWnd), другая программа вместе с программой VB6 переходит в фоновый режим.Как сделать активную другую программу, когда она запускается и программа VB6 выполняется?
  2. Когда другая программа закрыта, она имеет код для завершения программы VB6.Но это не закрывает программу VB6.Я думаю, что это может быть связано с запуском кода R = SetWindowLong(parenthwnd, GWL_HWNDPARENT, Me.hWnd).Как это исправить?

1 Ответ

0 голосов
/ 20 мая 2018

Если я правильно понимаю ваш вопрос (и я не уверен, что понимаю), вот код, который я использую для отправки формы в фоновом режиме или для отправки формы вверху.Возможно, это то, что вы ищете.

' Declares and constants for BringToFront and SendToBack

    Public Declare Function SetWindowPos Lib "user32" (ByVal _
        hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As _
        Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As _
        Long, ByVal wFlags As Long) As Long

    Public Const SWP_NOMOVE = &H2
    Public Const SWP_NOSIZE = &H1
    Public Const HWND_BOTTOM = 1
    Public Const HWND_TOP = 0

    Public Sub BringToFront(frm As Form)

       Dim flags As Long

       flags = SWP_NOSIZE Or SWP_NOMOVE
       SetWindowPos frm.hWnd, HWND_TOP, 0, 0, 0, 0, flags

    End Sub

    Public Sub SendToBack(frm As Form)

       Dim flags As Long

       flags = SWP_NOSIZE Or SWP_NOMOVE
       SetWindowPos frm.hWnd, HWND_BOTTOM, 0, 0, 0, 0, flags

    End Sub
...