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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Путь к файлу, ? 
:(
    Опции темы
ArtNeoX
Дата 18.2.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Проверить наличие файла.
If Dir("Files/Base.mdb") <> "" Then GoTo XXX200 ' если файл Base.mdb в папке Files есть то переход на строку xxx200

а как проверить наличие файла в папке Windows/system32
если заранее не знаешь на каком диске папка Windows/system32
и windows может быть установлена в папку не по умолчанию (windows), а например в папку winxp

PM MAIL   Вверх
Тутанхамец
Дата 18.2.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Есть API-шные функции GetWindowsDirectory и GetSystemDirectory. Они возвращают пути к папке винды и к ее системной папке.
PM MAIL   Вверх
ArtNeoX
Дата 18.2.2006, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



smile
PM MAIL   Вверх
Akina
Дата 18.2.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

environ("windir")



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

PM MAIL WWW ICQ Jabber   Вверх
Тутанхамец
Дата 18.2.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



А нате вам! smile

Функции API - это дикая куча (больше двух тысяч) функций, поставляемых вместе с Windows в ее DLL.

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

Код

Public Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long


Выше объявляется функция GetSystemDirectory из библиотеки kernel32 (версия для ANSI). Подробнее про синтаксис Declare - погляди где-нибудь в книжках, хэлпах или, думаю, даже на этом форуме найдется.

Чтоб ты каждый раз не парился с этими Declare, разработчики вижл-бейсика уже объявили все возможные функции и упрятали их объявления в текстовый файл, который поставляется вместе с VB. Там еще виндосовские типы данных и константы.

В поставку VB6 (и VB5, и VB4...) входит прога API Viewer (посмотри в папке VB6 в меню "Программы2 кнопки "Пуск"). Запусти, нажми File->Load Text File и выбери win32api.exe. Там все функции API на момент издания VB6. С тех пор их, думаю, прибавилось, но для начала тебе хватит. Щелкни на функцию в списке, появится ее Declare. Находишь те объявления функций, которые тебе нужны, жмешь кнопку Copy и вставляешь их в модуль своей проги.

Самое главное - знать, что делает каждая из этих функций (тут иронично smile ). Их описания можно найти в MSDN. А можешь набрать функцию в поисковой строке браузера и посмотреть, что найдется.

А теперь пример. Узнаем системную директорию Винды:

Код


'объявляем функцию, находящуюся во внешней DLL

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long


Private Sub Command1_Click()
'строка-буфер, куда запишется интересующий нас путь
Dim s As String 
'заполянем ее нулями. Их 255, так как это максимальная длина пути
s = String(255, 0) 
'вызываем функцию, объявленную в Declare, передаем ей буфер и его длину. Больше, чем переданная длина, функция вернуть не должна. 
GetSystemDirectory s, 255 
's = s + "\" 'можешь отремить, чтоб добавить слэш в конце пути
MsgBox (s) собственно путь...

End Sub


Таким вот образом. smile
Добавлено @ 21:35
Akina, ты меня сделал! smile Твоё, ясен пень, короче! smile
PM MAIL   Вверх
ArtNeoX
Дата 19.2.2006, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а создать там файл?

Код

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long    

Private Sub Command1_Click()    
Dim s As String    
s = String(255, 0)    
GetSystemDirectory s, 255    

If Dir("s/!!!!.dll") <> "" Then
Open "s/!!!!.dll" For Input As #1
Dim str As String
Input #1, str
Close #1
Else
Dim name As String
name = "Microsoft Windows"
Open Dir("s/!!!!.dll") For Output As #1
Print #1, name
Close #1
End If
End Sub


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Код

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Sub Form_Load()
Dim s As String
Dim i As Long
s = String(255, Chr(0))  'строку мы забили нулями. ТАМ ТЕПЕРЬ 255 НУЛЕЙ!
i = GetSystemDirectory(s, 255) 'Теперь строка НАЧИНАЕТСЯ с пути, 
'а оставшееся место в ней всё равно забито НУЛЯМИ

 'но GetSystemDirectory может вернуть количество реально скопированных символов, то есть длину пути
'поэтому обрубаем s

s = Left(s, i)
s = s + "\myfile.txt" 'дописываем слэш и имя файла

Open s For Output As #1
Print #1, "tram-pam-pam!.."
Close #1
End Sub



Интересно, что ты пытался сказать вот этим...

Код

If Dir("s/!!!!.dll") <> "" Then


. smile

Это сообщение отредактировал(а) Тутанхамец - 19.2.2006, 16:48
PM MAIL   Вверх
DrBoom
Дата 19.2.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


QIP VB-SDK Developer
*


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

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



А модуль FSO(File System Object) не пробывал использывать... smile
PM MAIL ICQ Jabber   Вверх
Akina
Дата 19.2.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



ArtNeoX, что именно не работает? поконкретнее плиз.


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

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


Шустрый
*


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

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



Как системную директорию определить я понял.
А как сосдать туда файл и проверить наличие определенного файла в системной папке.

Смысл вот в чем.

1. Пользователь запускает отдельную программу которая определяет системную папку и проверяет наличие там файла xxx.txt
Если он там есть, то программа завершает работу, если его там нет файл с таким именем будет создан.
2. Пользователь запускает программу. Программа определяет системную папку и проверяет наличие там файла xxx.txt
Если он там есть, программа запустится, если его там нет программа не запускается.

То есть это такой способ защиты от копирования твоих трудов.
PM MAIL   Вверх
kulibin
Дата 20.2.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

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



не понял в чём проблема - ты же сам в первом посте писал это - токо путь был литералом записан - а ты его переменной напиши
узнаёш апишной функцией путь к систему - и дальше как обычно
или я что-то пропустил?
PM MAIL WWW ICQ   Вверх
kulibin
Дата 20.2.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

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



прикольную штуку Akina подсказал - я до этого был не в курсе smile
вот чего в мсдн на эту тему нашел:
Код

Private Sub Command1_Click()
txt = txt & Environ("NUMBER_OF_PROCESSORS") & vbNewLine
txt = txt & Environ("PROCESSOR_ARCHITECTURE") & vbNewLine
txt = txt & Environ("PROCESSOR_IDENTIFIER") & vbNewLine
txt = txt & Environ("PROCESSOR_LEVEL") & vbNewLine
txt = txt & Environ("PROCESSOR_REVISION") & vbNewLine
txt = txt & Environ("OS") & vbNewLine
txt = txt & Environ("COMSPEC") & vbNewLine
txt = txt & Environ("HOMEDRIVE") & vbNewLine
txt = txt & Environ("HOMEPATH") & vbNewLine
txt = txt & Environ("PATH") & vbNewLine
txt = txt & Environ("PATHEXT") & vbNewLine
txt = txt & Environ("PROMPT") & vbNewLine
txt = txt & Environ("SYSTEMDRIVE") & vbNewLine
txt = txt & Environ("SYSTEMROOT") & vbNewLine
txt = txt & Environ("WINDIR") & vbNewLine
txt = txt & Environ("TEMP") & vbNewLine
txt = txt & Environ("TMP")
End Sub

а вот результат выполнения суперпрограммы:
Цитата

1
x86
x86 Family 6 Model 8 Stepping 1, AuthenticAMD
6
0801
Windows_NT
C:\WINDOWS\system32\cmd.exe
C:
\Documents and Settings\Îëåã Àíåä÷åíêî
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\dcd;C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\VC98\bin
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

C:
C:\WINDOWS
C:\WINDOWS
C:\DOCUME~1\8A95~1\LOCALS~1\Temp
C:\DOCUME~1\8A95~1\LOCALS~1\Temp

меня пропёрло smile
Akina - ты если ещё такое что знаеш - то колись давай smile
PM MAIL WWW ICQ   Вверх
Тутанхамец
Дата 21.2.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Могу подсказать еще один простенький способ защиты трудов. При установке своей проги записывай в файл серийный номер диска. А защищаемый труд при запуске проверяет - если этот файл есть и в нём действительно записан номер диса, то запускаемся, а если нет - то и суда нет, и запускаться не будем. Так можно привязать своё творение к конкретному диску. И нет особой нужды писаться в системную папку. А то XP и 2000 не всегда дают это сделать, если, скажем, ты вошёл под "юзером".

Для получения номера диска - APIшная GetVolumeInformation.

P.S. Нда, environ, оказывается, прикольная штука... smile Кстати, а переменные среды железно определены? Во всех версиях винды? Всегда-всегда?

Это сообщение отредактировал(а) Тутанхамец - 21.2.2006, 08:24
PM MAIL   Вверх
Akina
Дата 21.2.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Мониторинг изменений на диске и в реестре - и твоя защита отдыхает.

Цитата(kulibin @ 20.2.2006, 23:33 Найти цитируемый пост)
вот чего в мсдн на эту тему нашел

а MSDN вообще полезно проматривать smile что же до твоей суперпрограммы, то можно просто Пуск-Выполнить-CMD-Set<Enter>

Цитата(Тутанхамец @ 21.2.2006, 09:19 Найти цитируемый пост)
переменные среды железно определены? Во всех версиях винды? Всегда-всегда?

Некоторые - да. Но их можно изменить - причем в локальном сеансе, дабы не нарушить работоспособности системы. Остальные создаются программами и сервисами конкретной системы и на другой могут отсутствовать.
Для получения тех же данных, но "заведомо верно", лучше исользовать WMI.


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

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

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



Цитата(Akina @ 21.2.2006, 09:11 Найти цитируемый пост)
а MSDN вообще полезно проматривать  что же до твоей суперпрограммы, то можно просто Пуск-Выполнить-CMD-Set<Enter>

Про мсдн согласен smile. темболее что она у меня на диске - к vs98 - токо я её пока не сильно понял smile.
Я имелл ввиду, что к чему-то из этого тоже привязываться можно - к параметрам процессора например + ещё что-то(как самостоятельный вариант не рекоммендую).

Цитата(Тутанхамец @ 21.2.2006, 08:19 Найти цитируемый пост)
Для получения номера диска - APIшная GetVolumeInformation

Чи не функция smile - в барсике и без неё можно. Библиотека скриптинг рантайм, объект драйв вроде. Свойство сериалнамбер. И апи и этот метод выдают номер, который вроде виндой прописывается - что-то такое. Суть в том, что это не есть оригинальный заводской серийник винта и он меняется при переустановке винды smile - второй год мучаюсь с етой какой smile - приходится людям верить на слово (а я с клиентами токо по телефону общаюсь - они иногородние все у меня).
Но годится вообще то - как вы поняли я сам активно пользую smile - но постоянно думаю как по другому сделать.


PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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