Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> закрыть другое приложение из VB, например Calc 
:(
    Опции темы
slang
Дата 25.10.2004, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



Помогите найти решение задачи:
в программе на VB создается файл с данными, необходимо подключиться через модем к другой сети и передать этот файл.
Мне кажется, для этой цели лучше использовать какую-либо готовую программу-звонилку - она подклются к сети программа на VB отправит файл, затем после успешной отправки необходимо закрыть эту программу, а вот как ее закрыть, может кто-нибудь подскажет.


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Akina
Дата 25.10.2004, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Когда ты стартуешь ее, ты получаешь ее хендл. Отправь ей сообщение что пора закрываться - она закроется если сможет.
Хендл можно найти и через АПИ.
А вообще если у тебя есть готовое сетевое подключение - тебе достаточно дать команду копирования. Система сама подключится, потом файл скопируется, а связь сама оборвется по неактивности. Только настроить надо нормально.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
slang
Дата 25.10.2004, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



Вобщем-то я так и представлял это. То есть я уже и раньше читал, что нужно пользоваться api, однако ни где не могу по быстрому найтие ее (его) применение, то есть как это сделать. А по поводу, если есть готовое подключение, здесь есть несколько не удобств, я же пишу это не для себя, мне лично не влом нажать кнопочку чтобы подключиться и нажать кнопочку чтобы отключиться, однако предполагаемые пользователи - очень капризные и зачастую неграмотные (в плане пользования компьютером) люди. В связи с вышесказанным вариант ручного подключения не подходит. Варинат-же когда все настроено "Система сама подключится, потом файл скопируется, а связь сама оборвется по неактивности. Только настроить надо нормально." опять не подходит, так как эти настройки делаются, если я правильно понял о чем идет речь, в свойствах обозревателя, а эти свойства может настраивать кто-угодно, сколько угодно раз. А ездить каждый раз и настраивать - это не подходит уже для меня.

Поэтому если на затруднит, прошу разъяснить каким образом можно использовать API, для моей задачи.
Заранее очень благодарен.


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Plamenk
Дата 25.10.2004, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 18.2.2003

Репутация: нет
Всего: 3



Для закрытия приложения можно использовать функцию:

Код
BOOL DestroyWindow(
 HWND hWnd   // handle to window to destroy
);


Для получения hWnd можно использовать:
Код
HWND FindWindow(
 LPCTSTR lpClassName,  // class name
 LPCTSTR lpWindowName  // window name
);


Декларации в VB 6.0:

Код

Public Declare Function DestroyWindow Lib "user32" Alias "DestroyWindow" (ByVal hwnd As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

PM MAIL   Вверх
boevik
Дата 25.10.2004, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



slang, как происходит подключение через Dialup connection или напрямую модем?


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
slang
Дата 25.10.2004, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



через Dialup connection подключаемся к FTP


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
boevik
Дата 25.10.2004, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Цитата(slang @ 25.10.2004, 17:38)
через Dialup connection подключаемся к FTP

IMHO, будет легче и быстрее сделать свой код.
Могу бросить код для работы с Dialup connections.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
slang
Дата 25.10.2004, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



было-бы не плохо взглянуть, вообще-то мне сегодня нужно закончить ЭТО, но пока работы не початый край.
Так-что буду премного благодарен.

PS: может кто подскажет как сделать из того, программульку, которую можно установить, так, чтобы были все библиотеки и т.д. т.п., а то при установке он матерится, что ему чего-то не хватает. Я собственно использую-то всего две вещи FlexGrid и FTPSimple.


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
-Mikle-
Дата 25.10.2004, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



У меня есть пример кода для создания\удаления сетевого диска (в локальной сети)
Есть пример вызова окна диалога подключения к инету
Есть пример (с использованием ВинАПИ) определения, подключен ли комп к инету
Есть пример создания нового подключения к инету(логин, пароль и т.д.)

если что-то надо, могу кинуть сюда...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
slang
Дата 25.10.2004, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



если можно
"Есть пример вызова окна диалога подключения к инету"


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
cardinal
Дата 25.10.2004, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



-Mikle-, все выкидывай, в FAQ засунем... :)

А вообще я вот тут про закрытие программ писал:
http://forum.vingrad.ru/index.php?showtopic=20967


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
valex13
Дата 26.10.2004, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 29.1.2003
Где: Иркук. область, г . Иркутск

Репутация: 1
Всего: 1



-Mikle-
И мне не помишает. Я решал подобную задачку. Не исключено, что придется еще раз на грабли наступить, а не хотелось бы.
PM MAIL ICQ   Вверх
-Mikle-
Дата 26.10.2004, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Вот, то что я когда-то давно, где-то нашел в инете...
Не все ф-ии я проверял на работоспособность...

--------------------------------------------------------------------------------
Вызвать окно "Установка связи с Интернетом"
--------------------------------------------------------------------------------

Данный код вызывает окно "Установка связи" из "Удаленный доступ к сети". Естественно, вы должны знать имя текущего соединения с интернетом.

Код
Private Sub Form_Load()
Result = Shell("rundll32.exe rnaui.DLL,RnaDial " & "connection_name", 1)

'rundll32 rnaui.dll,RnaWizard /1 'Вывод окна "Установка Связи", с ключем "/1" - без окна
'start /wait rundll32.exe rnaui.dll,RnaDial MyConnection
End Sub


--------------------------------------------------------------------------------
Имя текущего соединения с инетом
--------------------------------------------------------------------------------

Расположите на форме элемент CommandButton.

Код
Private Const RAS_MAXENTRYNAME As Integer = 256
Private Const RAS_MAXDEVICETYPE As Integer = 16
Private Const RAS_MAXDEVICENAME As Integer = 128
Private Const RAS_RASCONNSIZE As Integer = 412

Private Type RASCONN
dwSize As Long
hRasConn As Long
szEntryName(RAS_MAXENTRYNAME) As Byte
szDeviceType(RAS_MAXDEVICETYPE) As Byte
szDeviceName(RAS_MAXDEVICENAME) As Byte
End Type

Private Declare Function RasEnumConnections Lib "rasapi32.dll" Alias "RasEnumConnectionsA" (udtRasConn As Any, lpcb As Long, lpcConnections As Long) As Long

Private Sub Command1_Click()
Dim udtRasConn(255) As RASCONN, countConn As Long
Dim Ret As Long, b As Long
udtRasConn(0).dwSize = RAS_RASCONNSIZE
Ret = RasEnumConnections(udtRasConn(0), RAS_MAXENTRYNAME * udtRasConn(0).dwSize, countConn)
If Ret = 0 Then
For b = 0 To countConn - 1
MsgBox "Текущее соединение: " & StrConv(udtRasConn(b).szEntryName(), vbUnicode)
Next b
End If
End Sub


--------------------------------------------------------------------------------
Как программно отсоединиться от Интернета
--------------------------------------------------------------------------------

Добавьте на форму элемент CommandButton. При нажатии на кнопку происходит вызов функции HangUp, которая закрывает соединение с Интернетом.

Код
Const RAS_MAXENTRYNAME As Integer = 256
Const RAS_MAXDEVICETYPE As Integer = 16
Const RAS_MAXDEVICENAME As Integer = 128
Const RAS_RASCONNSIZE As Integer = 412
Const ERROR_SUCCESS = 0&

Private Type RasEntryName
dwSize As Long
szEntryName(RAS_MAXENTRYNAME) As Byte
End Type

Private Type RasConn
dwSize As Long
hRasConn As Long
szEntryName(RAS_MAXENTRYNAME) As Byte
szDeviceType(RAS_MAXDEVICETYPE) As Byte
szDeviceName(RAS_MAXDEVICENAME) As Byte
End Type

Private Declare Function RasEnumConnections Lib "rasapi32.dll" Alias "RasEnumConnectionsA" (lpRasConn As Any, lpcb As Long, lpcConnections As Long) As Long
Private Declare Function RasHangUp Lib "rasapi32.dll" Alias "RasHangUpA" (ByVal hRasConn As Long) As Long
Private gstrISPName As String
Public ReturnCode As Long

Public Sub HangUp()
Dim i As Long
Dim lpRasConn(255) As RasConn
Dim lpcb As Long
Dim lpcConnections As Long
Dim hRasConn As Long
lpRasConn(0).dwSize = RAS_RASCONNSIZE
lpcb = RAS_MAXENTRYNAME * lpRasConn(0).dwSize
lpcConnections = 0
ReturnCode = RasEnumConnections(lpRasConn(0), lpcb, lpcConnections)
If ReturnCode = ERROR_SUCCESS Then
For i = 0 To lpcConnections - 1
If Trim(ByteToString(lpRasConn(i).szEntryName)) = Trim(gstrISPName) Then
hRasConn = lpRasConn(i).hRasConn
ReturnCode = RasHangUp(ByVal hRasConn)
End If
Next i
End If
End Sub

Public Function ByteToString(bytString() As Byte) As String
Dim i As Integer
ByteToString = ""
i = 0
While bytString(i) = 0&
ByteToString = ByteToString & Chr(bytString(i))
i = i + 1
Wend
End Function
Private Sub Command1_Click()
Call HangUp
End Sub


--------------------------------------------------------------------------------
Как определить тип подключения к сети при помощи InternetGetConnectedState
--------------------------------------------------------------------------------

API функция InternetGetConnectedState содержится в wininet.dll (IE4 / IE5) и показывает состояние подключения к сети локальной системы. Она довольно проста в использовании и возвращает TRUE, если присутствует соединение с интернетом, иначе FALSE.

Так же функция содержит параметр dwFlags. После вызова функции, dwFlags содержит состояние текущего соединения.

Добавьте следующий код в секцию объявлений модуля BAS:

Код
Option Explicit
Public Declare Function InternetGetConnectedState Lib "wininet" _
 (ByRef dwFlags As Long, _
  ByVal dwReserved As Long) As Long

'Для соединения с интернетом используется модем.
Public Const INTERNET_CONNECTION_MODEM As Long = &H1

'Для соединения с интернетом используется LAN.
Public Const INTERNET_CONNECTION_LAN As Long = &H2

'Для соединения с интернетом используется прокси сервер.
Public Const INTERNET_CONNECTION_PROXY As Long = &H4

'No longer used.
Public Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8

Public Const INTERNET_RAS_INSTALLED As Long = &H10
Public Const INTERNET_CONNECTION_OFFLINE As Long = &H20
Public Const INTERNET_CONNECTION_CONFIGURED As Long = &H40


'Следующие функции содержат в себе вызов InternetGetConnectedState
Public Function IsNetConnectViaLAN() As Boolean

  Dim dwflags As Long
 
 'передаём пустую переменную в функцию, чтобы
 'получить состояние флагов, отвечающих за соединение
  Call InternetGetConnectedState(dwflags, 0&)

 'возвращаем True если флаги указывают на соединение по LAN
  IsNetConnectViaLAN = dwflags And INTERNET_CONNECTION_LAN
   
End Function


Public Function IsNetConnectViaModem() As Boolean

  Dim dwflags As Long
 
 'передаём пустую переменную в функцию, чтобы
 'получить состояние флагов, отвечающих за соединение
  Call InternetGetConnectedState(dwflags, 0&)

 'возвращаем True если флаги указывают на соединение по модему
  IsNetConnectViaModem = dwflags And INTERNET_CONNECTION_MODEM
   
End Function


Public Function IsNetConnectViaProxy() As Boolean

  Dim dwflags As Long
 
 'передаём пустую переменную в функцию, чтобы
 'получить состояние флагов, отвечающих за соединение
  Call InternetGetConnectedState(dwflags, 0&)

 'возвращаем True если флаги указывают на соединение через проксю
  IsNetConnectViaProxy = dwflags And INTERNET_CONNECTION_PROXY
   
End Function


Public Function IsNetConnectOnline() As Boolean

 'здесь не нужно флагов - функция вернёт True если
 'присутствует соединие с интернетом любого типа
  IsNetConnectOnline = InternetGetConnectedState(0&, 0&)
   
End Function


Public Function IsNetRASInstalled() As Boolean

  Dim dwflags As Long
 
 'передаём пустую переменную в функцию, чтобы
 'получить состояние флагов, отвечающих за соединение
  Call InternetGetConnectedState(dwflags, 0&)

 'возвращаем True если флаги показывают, что RAS установлен
  IsNetRASInstalled = dwflags And INTERNET_RAS_INSTALLED
   
End Function


Public Function GetNetConnectString() As String

  Dim dwflags As Long
  Dim msg As String

 'составляем строку для отображения
  If InternetGetConnectedState(dwflags, 0&) Then
   
     If dwflags And INTERNET_CONNECTION_CONFIGURED Then
        msg = msg & "You have a network connection configured." & vbCrLf
     End If

     If dwflags And INTERNET_CONNECTION_LAN Then
        msg = msg & "The local system connects to the Internet via a LAN"
     End If
     
     If dwflags And INTERNET_CONNECTION_PROXY Then
           msg = msg & ", and uses a proxy server. "
     Else: msg = msg & "."
     End If
     
     If dwflags And INTERNET_CONNECTION_MODEM Then
        msg = msg & "The local system uses a modem to connect to the Internet. "
     End If
     
     If dwflags And INTERNET_CONNECTION_OFFLINE Then
        msg = msg & "The connection is currently offline. "
     End If
     
     If dwflags And INTERNET_CONNECTION_MODEM_BUSY Then
        msg = msg & "The local system's modem is busy with a non-Internet connection. "
     End If
     
     If dwflags And INTERNET_RAS_INSTALLED Then
        msg = msg & "Remote Access Services are installed on this system."
     End If
     
  Else
   
     msg = "Not connected to the internet now."
     
  End If
 
  GetNetConnectString = msg

End Function


Добавьте на форму кнопку (Command1), шесть текстовых полей (Text1 - Text6). Установите в Text6 свойство Multiline в True и добавьте следующий код:

Код
Private Sub Command1_Click()
  Text1.Text = IsNetConnectViaLAN()
  Text2.Text = IsNetConnectViaModem()
  Text3.Text = IsNetConnectViaProxy()
  Text4.Text = IsNetConnectOnline()
  Text5.Text = IsNetRASInstalled()
  Text6.Text = GetNetConnectString()
End Sub


--------------------------------------------------------------------------------
Добавление удаление Share-диска
--------------------------------------------------------------------------------

Код
Private Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
Private Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long

' можно использовать следующие константы:
Const WN_SUCCESS = 0
Const WN_NET_ERROR = 2
Const WN_BAD_PASSWORD = 6

Function AddConnection(shareName As String, pwd As String, localLetter As String) As Integer
   On Local Error GoTo AddConnection_Err
   AddConnection = WNetAddConnection(shareName, pwd, localLetter)
AddConnection_End:
   Exit Function
AddConnection_Err:
   AddConnection = Err
   MsgBox Error$
   Resume AddConnection_End
End Function

Function CancelConnection(localLetter As String, force As Integer) As Integer
   On Local Error GoTo CancelConnection_Err
   CancelConnection = WNetCancelConnection(localLetter, force)
CancelConnection_End:
   Exit Function
CancelConnection_Err:
   CancelConnection = Err
   MsgBox Error$
   Resume CancelConnection_End
End Function

' использование функций:
' AddConnection "\\RemoteComp1\H", "пароль удаленного компа", "R:"
' и
' CancelConnection "R:", False
' если параметр force = False, и текущее устройство
' используется, то функция не отключает устройство.


--------------------------------------------------------------------------------




--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
slang
Дата 26.10.2004, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



при использовании функции
Код

Private Sub Form_Load()
Result = Shell("rundll32.exe rnaui.DLL,RnaDial " & "connection_name", 1)

'rundll32 rnaui.dll,RnaWizard /1 'Вывод окна "Установка Связи", с ключем "/1" - без окна
'start /wait rundll32.exe rnaui.dll,RnaDial MyConnection
End Sub


он сообщает
Цитата

Ошибка при загрузке rnaui.DLL
Не найден указанный модуль.

и как с этим бороться. пошарился - многие предлагают эту функцию, но она не работает под 2к


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
-Mikle-
Дата 26.10.2004, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



да уж... попробовал ее щас у себя, точно не работает... :( у меня ХР...
надо поискать че-нить...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0925 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.