Russian Qt Forum
Ноябрь 23, 2024, 15:35
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Контекстное меню (Windows) - путь
Страниц: [
1
]
2
3
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Контекстное меню (Windows) - путь (Прочитано 29254 раз)
AlphaGh0St
Гость
Контекстное меню (Windows) - путь
«
:
Ноябрь 20, 2012, 22:47 »
Всем привет!
Задумка в следующем: добавил новый пункт контекстного меню по этой
http://habrahabr.ru/post/79443/
статье.
Нужно написать простенькую и консольную программку, которая будет запускаться через добавленный пункт контекстного меню.
При запуске программа должна определить, от куда произошёл её запуск, т.е., предположим, пользователь выбрал новый пункт контекстного меню в "C:\Users", программа должна определить этот путь.
Подскажите, как это можно сделать? Как определить путь в таком случае?
Благодарю.
Записан
mutineer
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #1 :
Ноябрь 20, 2012, 23:25 »
QString QDir::currentPath () проверял?
Записан
AlphaGh0St
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #2 :
Ноябрь 21, 2012, 00:10 »
Цитировать
QString QDir::currentPath ()
В таком случае будет получен путь, по которому находится сам исполняемый файл (exe'шник), а нужно узнать путь, от куда пользователь вызвал контекстное меню.
Например, exe'шник может находится в C:\Program Files\Some program\pr.exe
А пользователь вызвал контекстное меню из другой директории, например, D:\Some dir.
Программа при запуске должна определить этот путь, в данном примере - это "D:\Some dir".
Записан
mutineer
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #3 :
Ноябрь 21, 2012, 00:36 »
Цитата: AlphaGh0St от Ноябрь 21, 2012, 00:10
Цитировать
QString QDir::currentPath ()
В таком случае будет получен путь, по которому находится сам исполняемый файл (exe'шник), а нужно узнать путь, от куда пользователь вызвал контекстное меню.
Например, exe'шник может находится в C:\Program Files\Some program\pr.exe
А пользователь вызвал контекстное меню из другой директории, например, D:\Some dir.
Программа при запуске должна определить этот путь, в данном примере - это "D:\Some dir".
Я понял что тебе нужно, но у меня нет возможности проверить что вернет currentPath при запуске из контекстного меню. currentPath возвращает не директорию с бинарником программы, а директорию, которая была текущей при запуске. А это не всегда одно и то же
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Контекстное меню (Windows) - путь
«
Ответ #4 :
Ноябрь 21, 2012, 01:46 »
а в argv не сидит нужный путь?
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
AlphaGh0St
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #5 :
Ноябрь 21, 2012, 15:56 »
Цитата: mutineer от Ноябрь 20, 2012, 23:25
QString QDir::currentPath () проверял?
Да, это сработало.
Всем спасибо за помощь!
Записан
AlphaGh0St
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #6 :
Ноябрь 21, 2012, 20:07 »
Чтобы не создавать ещё одну тему, спрошу здесь.
Суть этой (первой) программки в том, чтобы определять, от куда она была запущена через контекстное меню.
Программка определила путь, записала его (путь) в файл и завершилась, всё просто. Файл каждый раз открывается на перезапись.
Задача второй программы заключается в том, чтобы при записи нового пути, тут же этот путь из файла получить.
Планирую запустить новый поток, который будет через ...скажем каждую секунду проверять файл и если в файле записан новый путь, поток просигналит об этом основному потоку.
Возможно, есть способы по лучше, подскажите, как лучше реализовать такой обмен данными?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Контекстное меню (Windows) - путь
«
Ответ #7 :
Ноябрь 21, 2012, 20:36 »
Цитата: AlphaGh0St от Ноябрь 20, 2012, 22:47
При запуске программа должна определить, от куда произошёл её запуск, т.е., предположим, пользователь выбрал новый пункт контекстного меню в "C:\Users", программа должна определить этот путь.
Может я чего-то не понял. Ну вот напр пользователь сидит в консоли и ввел руками полный путь. Потом сменил текущий каталог и опять ввел полный путь. В чем тогда смысл Вашего определения? Получить текущий каталог - и что с того?
Вообще такого рода "системные" задачи (завязанные на специфику) - на мой взгляд пустая трата времени. Все уходит в познание/изучение той "специфики" - а толку чуть. Хотите потренироваться - я Вам дам задачку
Записан
Bepec
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #8 :
Ноябрь 21, 2012, 21:16 »
AlphaGh0St напишите что вы хотите получить в конце. Вашу конечную цель опишите.
Возможно вам нужно что-то уже готовое и уже кем то реализованное?
Записан
AlphaGh0St
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #9 :
Ноябрь 21, 2012, 21:54 »
Если "в двух словах", то нужно следующее: одна программа записывает в файл какую-либо строку, вторая программа (желательно, тут же) считывает эту строку из файла. Всё.
Проблема заключается в том, что вторая программа должна определить, был ли файл перезаписан, и если "да", то незамедлительно считать данные из файла.
Первое, что приходит в голову, это запустить дополнительный поток, который будет через определённый интервал времени (1 сек) проверять атрибуты файла (дату последней модификации). Если файл был перезаписан, скажем, более, чем 3 секунды назад, просигналить об этом.
Но, возможно, есть лучшее решение.
Тренировочных задач и готовых решений не надо, благодарю.
«
Последнее редактирование: Ноябрь 21, 2012, 21:57 от AlphaGh0St
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Контекстное меню (Windows) - путь
«
Ответ #10 :
Ноябрь 21, 2012, 22:06 »
Цитата: AlphaGh0St от Ноябрь 21, 2012, 21:54
Если "в двух словах", то нужно следующее: одна программа записывает в файл какую-либо строку, вторая программа (желательно, тут же) считывает эту строку из файла. Всё.
Проблема заключается в том, что вторая программа должна определить, был ли файл перезаписан, и если "да", то незамедлительно считать данные из файла.
Первое, что приходит в голову, это запустить дополнительный поток, который будет через определённый интервал времени (1 сек) проверять атрибуты файла (дату последней модификации). Если файл был перезаписан, скажем, более, чем 3 секунды назад, просигналить об этом.
Но, возможно, есть лучшее решение.
Это подходит под логику семафора. Напр приложение запущено и и ему надо отловить были ли еще попытки запуска того же приложения
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Контекстное меню (Windows) - путь
«
Ответ #11 :
Ноябрь 21, 2012, 22:07 »
почему нельзя «сообщить» (через inter-process communication) другой программе эту строку напрямую, без всяких файлов? а другая программа просто сверит новые данные с текущими.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #12 :
Ноябрь 21, 2012, 22:34 »
Вы не цель сообщили, а ту часть, про которую хотите спросить.
Цель у вас какая?
Взаимодействие между приложениями? Работа с файлами? Отслеживание изменения файла? Клиент аськи? Операционная система?
Записан
AlphaGh0St
Гость
Re: Контекстное меню (Windows) - путь
«
Ответ #13 :
Ноябрь 21, 2012, 22:57 »
Цитата: kambala от Ноябрь 21, 2012, 22:07
почему нельзя «сообщить» (через inter-process communication) другой программе эту строку напрямую, без всяких файлов? а другая программа просто сверит новые данные с текущими.
Отличная идея!! Подскажите, как это сделать? Что можно почитать на эту тему? Программы под винду, обе на Qt.
Цель: программа копирования файлов.
Пользователь в нужном месте кликает ПКМ, в контекстном меню выбирает пункт типа "Установить флаг копирования".
Затем в саму программу копирования (в виде очереди) можно добавлять файлы и эти файлы будут копироваться туда, где установлен флаг.
Планировалось сделать так, в реестр был добавлен новый пункт контекстного меню (ссылка на статью в посте №1).
При выборе этого пункта меню, запускается маленькая консольная программа (только окно консоли не появляется), которая определяет путь и записывает его в файл.
Вторая программа (копирования) определяет, что файл был изменён, забирает от туда новый путь и ожидает файлы на очередь.
Идея с межпроцессорным взаимодействием мне нравится больше.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Контекстное меню (Windows) - путь
«
Ответ #14 :
Ноябрь 21, 2012, 23:21 »
я в этом не силен, но по идее тебе нужен QLocalSocket или QProcess
а вообще, если цель этой консольной программы — лишь подсунуть правильный путь, то почему нельзя этот путь направлять сразу в основную программу из контекстного меню проводника?
«
Последнее редактирование: Ноябрь 21, 2012, 23:41 от kambala
»
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [
1
]
2
3
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...