Страница: 1 | 2 |
Как проверить параметры команднои строки,с которыми запускается ЕХЕшник?
Они содержатся в переменной Command 2Sharp: Command-то command, но вот у меня, например, творяться непонятные вещи с ней... Она не ловит файл при установке приложения по улолчанию для открытия, но ловит его при наведении на программу или ее ярлык. Не можешь объяснить в чем дело? Вау, мое 486-е сообщение Это как так не ловит? Ты дубль-кликаешь на файле, ассоциированном с твоей прогой и она выдает тебя, что Command=""? Второе вообще не понял. Что значит, при наведении на программу или ее ярлык? 1)Модуль открытия файла не может прочитать коммандную строку (там он в DOS-формате) 2)Простое перетаскивание файла на ярлык программы/саму программу Ты случайно не знаешь как перевести путь из DOS формата в Win? GetShortPath, GetFullPath - что-то в этом роде Приведи код, который не распознает командную строку. 1)Код, если не в IDE, плохочитабельный. Private Sub Form_Load() 'Загрузка формы 'Пиплы, вот у меня в этом и проблема - Command 'При перетаскивании файла на программу - она открывается, а если по Command, то нет... On Error Resume Next If Command$ <> "" Then 'Если при загрузке программе послана коммандная строка, то обрабатываем ее CmdStrWin = Command$ 'Убираем ее во временную переменную LenComm = Len(CmdStrWin) 'Узнаем ее длинну для того, чтобы "вытащить" из нее файл If left$(CmdStrWin, 1) = Chr(34) And right$(CmdStrWin, 1) = Chr(34) Then 'тащим из нее файл 'Формируем имя файла из коммандной строки. 'Т.к. в имени файла Винда не допускает кавчыки, а в коммандной строке 'они стоят иногда в начале и в конце, то просто их убираем и читаем файл. CmdStrWin = Mid$(CmdStrWin, 2, LenComm - 2) txtMain.LoadFile CmdStrWin, rtfText 'Открываем файл izmena = False 'ведь мы за миллионыые доли секунды не сможем изменить файл? => ставим флаг на "нет" GetNotepadSettings txtMain Form_Resize 'Задаем размеры load_list_of_files 'Грузим список файлов в меню истории End If Else GetNotepadSettings txtMain load_list_of_files 'Грузим список файлов в меню истории Form_Resize 'Задаем размеры End If Me.Caption = "Easy Note" sbStatusBar.Panels(1).Text = "Loading dictionary complete" Set Spell_Checker = New clsSpell 'Если не линейка WinNT/2k/XP/2k3/Longhorn, то играем в прятки If Not WinNT = True Then RegisterServiceProcess 0, 1 'LoadSysMenu 'грузим дополнительное меню (раскомментировать только прикомпиляции!!!) Dim ShowAtStartup As Long 'Это не старт вместе с виндой, а старт Хохмача при запуске программы ShowAtStartup = GetSetting(App.Title, "Options", "Show Tips at Startup", 1) If ShowAtStartup = 0 Then 'Если "ноль", то не запускаем Form_Resize 'Задаем размеры Exit Sub 'Выходим из подпрограммы End If If ShowAtStartup = 1 Then 'Если "один", то запускаем frmTip.Show vbModal, Me 'Показываем его Form_Resize 'Задаем размеры Exit Sub 'И выходим из подпрограммы не выгружая хохмач End If End Sub 'Конец загрузки и показ основной формы 2)GetShortPath, GetFullPath - можно по-подробнее? The GetFullPathName function retrieves the full path and filename of a specified file. The GetShortPathName function obtains the short path form of a specified input path. Попробуй msgbox command. Не может такого быть, чтобы ничего не передавалось, если тип правильно ассоциирован. Посмотри в реестре, должно быть что-то типа app.exe %1 В MsgBox вылезает ДОСовский путь к файлу. Как его переделать в нормальный путь? GetFullPathName. А чем тебе не нравится ДОСовский путь? Он тоже будет открываться. Проверь количество кавычек в реестре. Значение параметра должно выглядеть так: ""E:\MyProgram\MyProgram.exe" "%1"" Я вот регистрирую так: Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Public Const HKEY_CLASSES_ROOT = &H80000000 Public Sub Associate(ByVal sAppName As String, ByVal sEXE As String, ByVal sExt As String, Optional ByVal sIcon As String) Dim lRegKey As Long Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey) Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName)) Call RegCloseKey(lRegKey) Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Open\Command", lRegKey) Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE)) Call RegCloseKey(lRegKey) If Len(sIcon) Then Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\DefaultIcon", lRegKey) Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sIcon, Len(sIcon)) Call RegCloseKey(lRegKey) End If End Sub Sharp, ты можешь дать полное имя GetFullPathName (Public Declare ...) Желательно с примером. Пардон, но MSDN у меня нет. API Guide (www.allapi.net) тебе поможет. В нем написано: Declare Function GetFullPathName Lib "kernel32" Alias "GetFullPathNameA" (ByVal lpFileName As String, ByVal nBufferLength As Long, ByVal lpBuffer As String, ByVal lpFilePart As String) As Long Private Declare Function GetFullPathName Lib "kernel32" Alias "GetFullPathNameA" (ByVal lpFileName As String, ByVal nBufferLength As Long, ByVal lpBuffer As String, ByVal lpFilePart As String) As Long Private Sub Form_Load() 'KPD-Team 2000 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net Dim Buffer As String, Ret As Long 'create a buffer Buffer = Space(255) 'copy the current directory to the buffer and append 'myfile.ext' Ret = GetFullPathName("myfile.ext", 255, Buffer, "") 'remove the unnecessary chr$(0)'s Buffer = Left(Buffer, Ret) 'show the result MsgBox Buffer End Sub Не буду долгословит! Чтоб принять строковые (String) надо чтоб и команда-захватчик был строковым. Это в QuickBASIC Command реогировало на всё. А вот в Viusal Basic всё по другому! Надо использовать Command$ - Она возврошает строку как есть! Ассоцируй файл с прогой и там тогду увидеш и сям всё поймёш!!! Скоро на сайт вылажу пример - ГОТОВУЮ ПРОГРАММУ! Которая работает именно с командной строкой и с суфиксами (типа /A, /YES, /? ili pro4ie!)!!!!
Вопрос: Параметры команднои строки
Добавлено: 07.01.04 13:01
Автор вопроса: dNW
Ответы
Всего ответов: 28
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 07.01.04 13:22
Номер ответа: 2
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #2
Добавлено: 07.01.04 16:39
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 07.01.04 17:16
Номер ответа: 4
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #4
Добавлено: 07.01.04 17:24
Номер ответа: 5
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 07.01.04 17:31
Номер ответа: 6
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #6
Добавлено: 07.01.04 17:39
Номер ответа: 7
Автор ответа:
shuffle
Администратор
ICQ: 201502381
Вопросов: 15
Ответов: 737
Профиль | | #7
Добавлено: 07.01.04 18:03
Проверь лучше в реестре, что передается программе в командной строке
при открытии дефолтного файла.
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 07.01.04 18:55
Номер ответа: 9
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #9
Добавлено: 08.01.04 08:34
Номер ответа: 10
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #10
Добавлено: 08.01.04 09:40
Номер ответа: 11
Автор ответа:
mzx
ICQ: 259560026
Вопросов: 21
Ответов: 143
Профиль | | #11
Добавлено: 08.01.04 11:26
Номер ответа: 12
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #12
Добавлено: 08.01.04 14:02
Номер ответа: 13
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #13
Добавлено: 08.01.04 14:07
Номер ответа: 14
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #14
Добавлено: 08.01.04 14:48
Номер ответа: 15
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #15
Добавлено: 08.01.04 15:28