Долго парился ... не могу найти проблему ....
Суть задачи проста, а именно нужно написать процедуру, которая проверяла бы запущено ли приложение.
В VFP эту проблему решал и решил успешно через мьютексы. Теперь возникла та же проблема в Басике .Нет
написал следующее:
Код:
Public Sub Start_Alone()
If OpenMutex(1, False, "qq") > 0 Then
MsgBox("Программа уже запущена!", 16, "")
End
Else
Dim S_A As SECURITY_ATTRIBUTES
CreateMutex(S_A, True, "qq")
End If
End Sub

не работает в том смысле, что мьютекс создается (потому что результат выполнения CreateMutex больше нуля), но результат выполнения OpenMutex всегда равен нулю
т.е. я запускаю прогу с месаджем и она ждет нажатия копки ок (мессадж вызывается после создания мьютекса) ... потом запускаю второй экземпляр проги и она создает новый мьютекс, потому что не видит первого
GetLastError показывает код 2 типа File_not_found ...
В чем проблема? И есть ли альтернативные способы решения задачи в Басике .Нет?
Решение проблемы

)
оказалось проблема была в другом месте ...
описание функции CreateMutex было взято следующее
Цитата:
Public Structure SECURITY_ATTRIBUTES
Dim nLength As Integer
Dim lpSecurityDescriptor As Integer
Dim bInheritHandle As Integer
End Structure
Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Integer, ByVal lpName As String) As Integer
|
оно оказалось, не совсем верным ...
надо было сделать так
Цитата:
|
Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByVal lpMutexAttributes As String, ByVal bInitialOwner As Integer, ByVal lpName As String) As Integer
|
и после этого преобразуя код в следующее все начинает работать
Код:
Public Sub Start_Alone()
If OpenMutex(1, False, "qq") > 0 Then
End
Else
Dim s_a as string
CreateMutex(s_a, True, "qq")
End If
End Sub