Как при запуске второй копии программы передать какое-то сообщение в первую копию.
Я так понимаю это можно реадизовать через Send Message и Find Window. Но как?
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function OpenIcon Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Const GW_HWNDPREV = 3
Private Sub ShowPrevInstance()
Dim OldTitle As String
Dim ll_WindowHandle As Long
OldTitle = App.Title
App.Title = "abcba - This App Will Be Closed"
ll_WindowHandle = FindWindow("Test", OldTitle)
If ll_WindowHandle = 0 Then Exit Sub
ll_WindowHandle = GetWindow(ll_WindowHandle, GW_HWNDPREV)
Call OpenIcon(ll_WindowHandle)
Call SetForegroundWindow(ll_WindowHandle)
End
End Sub
Private Sub Form_Load()
If App.PrevInstance Then ShowPrevInstance
End Sub
Option Explicit
Private Declare Function CreateMailslot Lib "kernel32" Alias "CreateMailslotA" (ByVal lpName As String, ByVal nMaxMessageSize As Long, ByVal lReadTimeout As Long, lpSecurityAttributes As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long
Private Const GENERIC_WRITE As Long = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const OPEN_EXISTING As Long = 3&
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const INVALID_HANDLE_VALUE As Long = -1&
Private Const MailslotName As String = "\\.\mailslot\mytestapp"
Private Dummy As Long
Private hFile As Long
Sub Form_Load()
hFile = CreateFile(MailslotName, GENERIC_WRITE, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile <> INVALID_HANDLE_VALUE Then
WriteFile hFile, Command, Len(Command), Dummy, ByVal 0&
Unload Me
Else
hFile = CreateMailslot(MailslotName, 0, 0, ByVal 0&)
Print "Primary app launched with Command=""" & Command & """"
End If
End Sub
Private Sub tmrCheck_Timer()
Dim Buffer As String * 256
ReadFile hFile, Buffer, 255, Dummy, ByVal 0&
If Dummy > 0 Then _
Print "Secondary app launched with Command=""" & Left$(Buffer, Dummy) & """"
End Sub
Сейчас этот форум просматривают: PetalBot, Yandex-бот и гости: 1