параметры запуска

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

параметры запуска

Сообщение v-adix » 30.08.2003 (Сб) 11:15

Моя программа обрабатывает переменную Command (параметры command line) при запуске. Если есть какой-нибудь параметр при запуске, и если он является файлом, моя программа добавляет этот файл в список.
Я сделал так: залез в Folder Opions -> File Types , нашёл там нужный мне тип файла (*.txt для примера), и добавил новый Action для файла. В поле Action написал типа "Открыть с помощью моей программы", а в поле Program выбрал EXE-файл моей программы. Теперь когда я кликаю по txt-файлам, в контекстном меню появляется пункт "Открыть с помощью моей программы". Если кликнуть по нему, то откроется моя программа, и в качестве параметра будет передано имя файла, по которому я кликнул. Но если я выделю 10 файлов txt, то откроется 10 копий моей программы! И вкаждой в список добавится по 1 файлу. Я хочу чтобы открылась 1 копия моей программы, и в список добавились 10 файлов, которые я выбрал.
Как это можно сделать? 3 дня голову ломаю!

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 30.08.2003 (Сб) 11:33

нуу, проверяй есть ли в памяти уже твоя прога
Код: Выделить всё
if app.previnstance

а дальше е знаю=)

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 30.08.2003 (Сб) 12:00

это и я могу сообразить.
а дальше я тоже не знаю :(

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 30.08.2003 (Сб) 12:42

Я конечно не знаю на 100%, но может получиться.
1. Надо, чтобы в Me.Caption было примерно так : "Program XXX : C:\Windows.txt"
2. Потом смотришь при создании приложение, если уже такая программа есть, узнаешь ее Caption и видишь путь к файлу.
3. Потом закрываешь(посылаешь WM_CLOSE(точно не помню, как)) второе(третье, четвертое - только сделай, чтобы друг друга не закрыли) приложение.
4. Создаешь новое окно и смотришь тот файл.
Так подойдет?

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 31.08.2003 (Вс) 5:49

можно и так.
но я ещё подумаю. есть другие мысли? ведь когда люди профессиональные проги пишут они не так делают!

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 31.08.2003 (Вс) 13:07

Значит так:
Если не app.previnstance то
Программа по винсоку слушает какой-нить порт 8000.
Если да то
Программа коннектица по порту 8000 и IP 127.0.0.1 и передаёт имя файла. А потом сразу закрывает соединение.
http://poetry.mooo.com
http://poetry.myboard.info
«Человек есть нечто, что до́лжно превзойти» (Ф. Ницше)

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Alfa

Сообщение Alfa » 31.08.2003 (Вс) 16:31

Нее, а вдруг есть например Radio Server, он иногда на 8000 порту бывает и т.д.
А еще например можно создовать файл и в него писать.... Реестр....

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 31.08.2003 (Вс) 17:44

файл, реестр это все не по русски как-то...а хотя.. когда прога запускается с пареметром:
if app.previnstance then
открыть файл
добавить туда параметр c именем файла(open for append)
end if
вот и на форме таймер поставить чтобы каждую секунду открывал файл и если он не пустой то считать все что есть, разбить на массив строки(вдруг там их несколько) и делать с ними любые извращения :) хотя мне как-то не очень)

я вот подумал можно ли как-нить DLL'ке узнать какое приложение его юзает? тогда можно круто все сделать

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 31.08.2003 (Вс) 19:18

_NeoN_, может вообще тогда по русски в BIOS писать? И на сколько у тебя мощный компьютер, чтобы делать такие действия. Я например в игры играю иногда с открытым блокнотом, а что тогда щас получится?

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 01.09.2003 (Пн) 12:30

_NeoN_ писал(а):я вот подумал можно ли как-нить DLL'ке узнать какое приложение его юзает? тогда можно круто все сделать

Строго говоря, первым делом при загрузке DLL она запоминает указатель приложения, которое ее загрузило...

Между прочим - это хорошая мысль. У DLL есть такой признак SHARED (разделяемая). Все, кто будут пользовать ее, будут пользовать ее один экземпляр совместно. Вводишь признак того, что dll загружена, а прога проверяет его, и если признак сброшен - устанавливает его :shock:
Origin - это что?

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Re: Ответ

Сообщение _NeoN_ » 01.09.2003 (Пн) 13:10

Alfa писал(а):_NeoN_, может вообще тогда по русски в BIOS писать? И на сколько у тебя мощный компьютер, чтобы делать такие действия. Я например в игры играю иногда с открытым блокнотом, а что тогда щас получится?

ну да.. как-то часто через секунду, а если не через секунду то ториоза вообще будут и никто не станет супер новый блокнот юзать..
а вообще-то нефиг играть=)


Георгий писал(а):
_NeoN_ писал(а):я вот подумал можно ли как-нить DLL'ке узнать какое приложение его юзает? тогда можно круто все сделать

Строго говоря, первым делом при загрузке DLL она запоминает указатель приложения, которое ее загрузило...

Между прочим - это хорошая мысль. У DLL есть такой признак SHARED (разделяемая). Все, кто будут пользовать ее, будут пользовать ее один экземпляр совместно. Вводишь признак того, что dll загружена, а прога проверяет его, и если признак сброшен - устанавливает его :shock:

ну я предлагаю сделать так: приложение запускается, проверяет одно ли оно с системе, юзает DLL как ему надо, ну и флаг какой-нить там устанавливает, вторая прога которая запускается проверяет этот флаг, если он установлен то посылает этой длл'ке (через ее же функцию какую-нить) имя файла которое открыть надо... а наш блокнот все время будет проверять у ентой длл'ки есть ли с списке файлы, если есть то открывать их как ему надо..
ну вот... и это русурсов мало кушать будет ибо к памяти обращаться куда быстрее чем на винт... надо будет попробовать=) тока скажите как сделать чтобы 2 проги юзали только один экземпляр DLL'ки и куда она запоминает указатель приложения?

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 01.09.2003 (Пн) 13:23

Как на ВБ сделать dll shared - не знаю. Можно в самой библиотеке потом поменять признак - PE заголовок изучаешь и вперед... :twisted:
Origin - это что?

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 01.09.2003 (Пн) 13:25

ну описания найти несложно, неужеле только в нем дело? =)

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 02.09.2003 (Вт) 14:06

я бы и через реестр или через файл всё сделал, но дело всё с этим таймером... одна

секунда - много, но если сделать меньше... что если я хочу выделить 500 файлов и

правым кликом отправить их в программу? писать всё на ВИНТ... а нельзя сделать

чито-то типа dll'ки, сделать событие типа "GotFile". но это практически тоже самое что и

мысль с dll shared...
то, что я думаю реально осуществимо, это передавать имя файла через винсок. не

обязательно через порт 8000, можно через другой...
а что там насчёт dll shared? как это вообще работает? Если кто мне объяснит как это

сделать, то конечно эта идея лучше, чем винсок... но пока я стою на винсоке. если кто-то

может дать линки где почитать на эту тему, дайте
щас винсок попробую...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.09.2003 (Вт) 14:33

Поищите на форуме темы "Обмен данными между приложениями". Там ряд способов.
Самый простой -- обмен данными через сообщения (SendMessage), самый правильный -- через Named Pipes (или на крайний случай Mailslot)
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.09.2003 (Ср) 7:29

Фиг он найдёт таким запросом :)
Named pipes рулят, но не могут быть созданы в 9х
Судя по тому, что в реестре, кульные софтины юзают DDE при открытии файлов.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 18

    TopList