Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавить пункт в контекстное меню проводника. 
:(
    Опции темы
Andrey44
Дата 17.11.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Вот в этом и вопрос.
Как добавить пункт в контекстное меню проводника.
И потом, как передать моей проге выделенные файлы.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Alca
Дата 17.11.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

C:\Documents and Settings\Admin\SendTo



--------------------
PM WWW ICQ Skype Jabber   Вверх
Andrey44
Дата 18.11.2008, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Alca, Видимо не так меня поняли.
Для ясности приатачу картинкуuser posted image
Вот, мне надо создать пункт в меню, для проигрывания файлов. В смысле открыть с помощью моей проги.
И как в моей проге обрабатывать имена файлов которые пришли.

Это сообщение отредактировал(а) Andrey44 - 18.11.2008, 08:26


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Alca
Дата 18.11.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Открывать .NFO файлы в блокноте-Работает.reg
Код

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.nfo] 
"Application"="NOTEPAD.EXE" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.nfo\OpenWithList] 
"a"="Explorer.exe" 
"MRUList"="ba" 
"b"="NOTEPAD.EXE" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.nfo\OpenWithProgids] 
"MSInfo.Document"=hex(0):


Открывать неизвестные файлы Блокнотом.reg
Код

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Unknown\shell]
@="Notepad"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Unknown\shell\Notepad\Command]
@="notepad.exe %1"



Это сообщение отредактировал(а) Alca - 18.11.2008, 10:18


--------------------
PM WWW ICQ Skype Jabber   Вверх
Andrey44
Дата 18.11.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Alca, Хорошо, спасибо.
Допустим я добавлю в реестр ключи.
Появится дополнительный пункт в меню.
Следующий вопрос, какое сообщение ловить для того что-бы узнать какие файлы мне передают?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
jonie
Дата 18.11.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



аргументы запуска вашей программы посмотреть


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alca
Дата 18.11.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

int main(int argc, char *argv[]) {
    if (NULL == argv[1] || '\0' == argv[1][0]) {
        return 0;
    }
    std::string sFilePath(argv[1]);    
    MessageBox(0, sFilePath.c_str(), "", MB_OK);
    //...
    return 1;
}


Это сообщение отредактировал(а) Alca - 18.11.2008, 22:06


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 18.11.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alca @  18.11.2008,  22:05 Найти цитируемый пост)
if (NULL == argv[1] || '\0' == argv[1][0]) {

Количество аргументов лучше определять по argc.
Код
#include <windows.h>

int main(/*int argc, char *argv[]*/)
{
    if(__argc > 1)
        MessageBox(0, __argv[1], "", MB_OK);

    return 0;
}


Это сообщение отредактировал(а) 586 - 18.11.2008, 23:22
PM   Вверх
Andrey44
Дата 19.11.2008, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Вопрос 1: 
Код

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,//вот сюда приходит строка с путями файлов?
                     int       nCmdShow)

Как тогда узнать кол-во переданых файлов т.е. путей к ним?

Вопрос 2:
Если моя программа запущена как быть тогда?
Нет например такого сообщения, например - WM_CMDMESSAGE ?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Alca
Дата 19.11.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

LPTSTR    lpCmdLine,//вот сюда приходит строка с путями файлов?

Да.


--------------------
PM WWW ICQ Skype Jabber   Вверх
jonie
Дата 19.11.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата

Вопрос 2:
Если моя программа запущена как быть тогда?
Нет например такого сообщения, например - WM_CMDMESSAGE ?
нужно при запуске узнать, есть ли еще экземпляр вашего приложения (обычно это делается используя семафоры\мютексы\именованые евенты), найти "отвественное" окно вашего приложения и послать ему, предварительно зарегистрированное через RegisterMessage (или использовать менее хитрую комбинацию WM_USER+XXX) сообщение с коммандной строкой, переданной запускаемому. После чего завершить запускаемое приложение.

Добавлено через 2 минуты и 11 секунд
Цитата

Как тогда узнать кол-во переданых файлов т.е. путей к ним?
пропарсить "большую" коммандную строку, что к вам пришла в  lpCmdLine.. под это дело в винде была какая-то функция даже (из shell-овких, если не изменяет память) - поройте msdn


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Andrey44
Дата 19.11.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Alca, делаю так:
Цитата

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3] 
"Application"="D:\Projects\MyProg\debug\MyProg.exe" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\OpenWithList] 
"a"="Explorer.exe" 
"MRUList"="ba" 
"b"="D:\Projects\MyProg\debug\MyProg.exe" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\OpenWithProgids] 
"MSInfo.Document"=hex(0):

И ничего не выходит smile

Добавлено через 7 минут и 58 секунд
Цитата(jonie @  19.11.2008,  10:49 Найти цитируемый пост)
пропарсить "большую" коммандную строку, что к вам пришла в  lpCmdLine..

Спасибо. Это особого труда не вызовет.

А вот с посылкой сообщения придется подумать. smile 


И с добавлением своего пункта в меню что-то не выходит.



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Alca
Дата 19.11.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

"MSInfo.Document"=hex(0):

Здесь чего-то надо заменить...
Пример с файлами .NFO у меня работает (Windows 2003 Server R2)  smile 
Тока без менюшки. Т.е. это просто твой файл (test.nfo) ассоциируется с каким-либо расширением (.nfo).

Это сообщение отредактировал(а) Alca - 19.11.2008, 11:17


--------------------
PM WWW ICQ Skype Jabber   Вверх
Andrey44
Дата 19.11.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Так кто подскажет как добавить свой пункт в контекстное меню проводника smile 
Открыть с помощью smile

Добавлено через 1 минуту и 29 секунд
Ну может кто статейку покажет нормальную?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Alca
Дата 19.11.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



 smile 

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  Regedit.JPG 293,49 Kb


--------------------
PM WWW ICQ Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

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


 




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


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

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