Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2010, 09:58   #1
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию Ассоциация файлов со своей программой

Всем привет! Вот нашёл в инете как ассоциировать любое расширение со своей программой, но есть одна закавыка, после всех манипуляций с реестром последняя процедура должна обновить расширения, но они не обновляются, обновились тока, когда я нажал, открыть с помощью своей программой.
Вот как я ассоциирую

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Registry, ShlObj, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   Reg: TRegistry;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
Reg:=TRegistry.Create; // создаем
Reg.RootKey := HKEY_CLASSES_ROOT; // указываем корневую ветку
Reg.OpenKey('.Схема_DeM\OpenWithProgids\', true);
Reg.WriteString('Черчение схем.Схема_DeM', '');
Reg.OpenKey('\Черчение схем.Схема_DeM\DefaultIcon\', true);
s:='D:\Чертилка схем DeM\1.ico';
Reg.WriteString('', s);
Reg.OpenKey('\Черчение схем.Схема_DeM\Shell\Open\', true);
Reg.WriteString('', 'Открыть в Черчении схем');
Reg.OpenKey('command\', true);
s:='"D:\Чертилка схем DeM\Project1.exe" "%1"';
Reg.WriteString('', s);
Reg.OpenKey('DropTarget\', true);
Reg.WriteString('CLSID','{0041494D-5032-4472-6F70-546172676574}');
Reg.Free;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
Вопрос такой, как сделать, что бы расширения вступили в силу и значки обновились?
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 21.08.2010, 10:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как сделать, что бы расширения вступили в силу и значки обновились?
По-моему только перезагрузкой эксплорера.
I'm learning to live...

Последний раз редактировалось Stilet; 21.08.2010 в 10:14.
Stilet вне форума Ответить с цитированием
Старый 21.08.2010, 10:18   #3
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
перезагрузкой эксплорера.
А это как? Всмысле перезагрузкой компа?
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 21.08.2010, 10:57   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
dmitriegorovih
Ну я имел ввиду выкинуть в диспетчере задач процесс explorer и опять его запустить.
Однако я бы на твоем месте не спешил. Ты все равно единожды будешь ассоциировать файлы, так что подождать до следующего запуска винды не самое страшное
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2010, 11:38   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

По-идее должны обновиться, да.

А бродкаст WM_SETTINGCHANGE не помогает?

P.S. В 2010-м году за запись в HKCR нужно ставить к стенке и расстреливать - без суда и следствия. Это может и было нормальным пятнадцать лет назад, но не сегодня. Пишите в HKCU\Software\Classes или HKLM\Software\Classes.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 21.08.2010, 11:56   #6
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
А бродкаст WM_SETTINGCHANGE не помогает?
А как это сделать?
P.S. А как же перезагрузку значков делает AIMP2? Я слышал что он написан на делфи.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 21.08.2010, 12:21   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А как это сделать?
Код:
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,...
Дальше параметры не помню.
http://www.delphiworld.narod.ru/base...een_icons.html
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2010, 12:41   #8
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Спасибо работает обновляет мгновенно! :P Я к своей процедуре добавил вот это
Код:
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,SPI_SETNONCLIENTMETRICS,0);
Всем Спасибо кто откликнулся

Есть не большая проблема после пере установки венды я решил запустить вот эту процедуру но она к моему сожалению не работает через smart installer marker тоже не работает что делать? после перезагрузки тоже не работает? Работает если сделать вот так
Воображение важнее, чем знания. (Albert Einstein)

Последний раз редактировалось artemavd; 22.09.2010 в 12:59.
dmitriegorovih вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Средства COM и ассоциация файлов со своим приложением SalasAndriy Общие вопросы Delphi 2 07.12.2014 00:25
Вопрос: Зашифровка текстовых файлов, используемых программой kotzzz Общие вопросы Delphi 12 18.01.2011 16:23
Ассоциация файла RIO Общие вопросы Delphi 4 04.09.2009 18:48
Помогите с программой копирования файлов nanocrew Помощь студентам 6 13.07.2009 16:14
ассоциация файлов с приложением TaTT DoGG Общие вопросы .NET 3 15.03.2009 18:21