Selam dostlar ;
Vistada ,örneğin masaüstünde sağ tıklanınca açılan yeni menüsüne kendi yazdığım uygulamamın kullandığı dosya türünü eklemek istiyorum.
Dosya uzantısını programım ile ilişkilendirdim ,*.djb uzantılı bir dosya çalıştırıldığında benim programım açılıyor ancak yeni menüsüne ekleyemedim bu türü.
Yardımlarınızı bekliyorum ,saygılarımla ...
Sağtık > yeni menüsüne uygulamamı koymak istiyorum
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum
@sabanakman hocanın bir makalesi var sitede.
olay registry ile ilgiliydi sanırım.
olay registry ile ilgiliydi sanırım.
Bir kelimenin anlamını öğretsen bile yeter..



- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum
O makale sadece program ile dosya türü ilişkilendirme hakkındaydı. Yeni menüsü için farklı teknikler gerekiyor. Tabi bu konuda hiç çalışmamıştım ama paylaşan olursa da çalışmış kadar oluruz sanırım
.

Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum
Merhaba...
Aslında metod basit. Şöyle ki, zaten dosya uzantınızı sisteme tanıtmak / eklemek işini halletmişsiniz. Tabi eklerken bazı kurallar söz konusu idi buna da uymuşsanız sadece bir anahtar eklemeniz "NEW/Yeni" menüsüne de eklenmeniz anlamına gelir.
HKEY_CLASSES_ROOT\.djb şeklinde bir başlık eklediniz. Bu başlığa geldiğinizde "(Varsayılan)" değer olarak bir adet size özel anahtar kelime yazmış olmalısınız. Örneğimizde "DJB_Ornek" olarak ifade edicem.
Bu size özel anahtar kelime olan "DJB_Ornek" şeklinde yeni bir başlığı da aynı dizinde açıyoruz ve HKEY_CLASSES_ROOT\DJB_Ornek şeklinde bir başlık elde ediyoruz.
Böylece iki başlığımız oldu. Birisi uzantımızın tanımı diğeri ise Windows tarafından ihtiyaç olduğunda ilk bakılacak yer olan referans bilgilerini barındıracak.
"DJB_Ornek" başlığımıza gidip (Varsayılan) kısmına "DJB Veritabanı" şeklinde açıklayıcı ifade yazıyoruz.
"DefaultIcon" alt başlığı oluşturup yazılımımızın tam yolunu ve adını girip, yanına virgül koyup iconindexini giriyoruz. Böylece EXE bünyesindeki (resource ile ekleyebileceğiniz) bir sürü icondan hangisinin bu veritabanı dosyasına atanacağını belirlemiş oluyoruz. Sonradan eklediğiniz icon yoksa 0 olarak bırakıyoruz ve application icon'un buna atanmasını sağlamış oluyoruz.
"shell" alt başlığı açıyoruz ve onun da altına "open" altbaşlığı, daha sonra onun da altına "command" alt başlığı açarak "(Varsayılan)" kısmına programımızın adını ve yanına bir boşluk bırakıp kullanmak istediğiniz parametreleri ve "%1" ekleyerek bu dosyanın isimini barındıracak değişkenini atamış oluyorsunuz.
- Buraya kadar olan kısım bir uzantının bir programa atanması, uzantıluı dosyaya çift tıklandığından atanan programın hangi şart ve parametre ile çalışacağını belirlemiş olduk.
*** Şimdi asıl konu olan NEW / Yeni menüsüne dosya uzantısını ekleme işlemine gelelim. Burada bir ayrıntının altını çizicez...
HKEY_CLASSES_ROOT\.djb olarak ilk açdığımız klasöre geri dönerek, altında "ShellNew" isminde bir klasör açıyoruz. Bu klasörün "(Varsayılan)" kısmına özel referans klasörümüzü yazıyoruz. yani DJB_Ornek yazıyorsunuz.
Daha sonra "FileName" isminde yeni bir değer başlığı açarak değer olarak veritabanınızın boş bir kopyasını bulundurduğunuz halinin tam yolunu yazıyorsunuz. Bu önemlidir. Çünkü Windows yeni dediğinizde bu kaynak dosyayı neredeyseniz oraya yeni bir kopyasını çıkartarak çoğaltacak ve yeni bir isim verilmesini isteyecektir.
Bu işlemleri içeren bir fonksiyon yazdığınızda program açılışlarında özel zamanlarda bu işlemlerin otomatik olarak yapılmasını sağlarsınız.
Kendi yazdığım fonksiyonu paylaşayım.
Kullanımı
Dosya belirtmezseniz fonksiyondaki if kurgusundan geçerek Yeni / New menüsüne ekleme işlemini yaılmasının önüne geçerek olumsuzluğu önler.
başarılar...
Aslında metod basit. Şöyle ki, zaten dosya uzantınızı sisteme tanıtmak / eklemek işini halletmişsiniz. Tabi eklerken bazı kurallar söz konusu idi buna da uymuşsanız sadece bir anahtar eklemeniz "NEW/Yeni" menüsüne de eklenmeniz anlamına gelir.
HKEY_CLASSES_ROOT\.djb şeklinde bir başlık eklediniz. Bu başlığa geldiğinizde "(Varsayılan)" değer olarak bir adet size özel anahtar kelime yazmış olmalısınız. Örneğimizde "DJB_Ornek" olarak ifade edicem.
Bu size özel anahtar kelime olan "DJB_Ornek" şeklinde yeni bir başlığı da aynı dizinde açıyoruz ve HKEY_CLASSES_ROOT\DJB_Ornek şeklinde bir başlık elde ediyoruz.
Böylece iki başlığımız oldu. Birisi uzantımızın tanımı diğeri ise Windows tarafından ihtiyaç olduğunda ilk bakılacak yer olan referans bilgilerini barındıracak.
"DJB_Ornek" başlığımıza gidip (Varsayılan) kısmına "DJB Veritabanı" şeklinde açıklayıcı ifade yazıyoruz.
"DefaultIcon" alt başlığı oluşturup yazılımımızın tam yolunu ve adını girip, yanına virgül koyup iconindexini giriyoruz. Böylece EXE bünyesindeki (resource ile ekleyebileceğiniz) bir sürü icondan hangisinin bu veritabanı dosyasına atanacağını belirlemiş oluyoruz. Sonradan eklediğiniz icon yoksa 0 olarak bırakıyoruz ve application icon'un buna atanmasını sağlamış oluyoruz.
"shell" alt başlığı açıyoruz ve onun da altına "open" altbaşlığı, daha sonra onun da altına "command" alt başlığı açarak "(Varsayılan)" kısmına programımızın adını ve yanına bir boşluk bırakıp kullanmak istediğiniz parametreleri ve "%1" ekleyerek bu dosyanın isimini barındıracak değişkenini atamış oluyorsunuz.
- Buraya kadar olan kısım bir uzantının bir programa atanması, uzantıluı dosyaya çift tıklandığından atanan programın hangi şart ve parametre ile çalışacağını belirlemiş olduk.
*** Şimdi asıl konu olan NEW / Yeni menüsüne dosya uzantısını ekleme işlemine gelelim. Burada bir ayrıntının altını çizicez...
HKEY_CLASSES_ROOT\.djb olarak ilk açdığımız klasöre geri dönerek, altında "ShellNew" isminde bir klasör açıyoruz. Bu klasörün "(Varsayılan)" kısmına özel referans klasörümüzü yazıyoruz. yani DJB_Ornek yazıyorsunuz.
Daha sonra "FileName" isminde yeni bir değer başlığı açarak değer olarak veritabanınızın boş bir kopyasını bulundurduğunuz halinin tam yolunu yazıyorsunuz. Bu önemlidir. Çünkü Windows yeni dediğinizde bu kaynak dosyayı neredeyseniz oraya yeni bir kopyasını çıkartarak çoğaltacak ve yeni bir isim verilmesini isteyecektir.
Bu işlemleri içeren bir fonksiyon yazdığınızda program açılışlarında özel zamanlarda bu işlemlerin otomatik olarak yapılmasını sağlarsınız.
Kendi yazdığım fonksiyonu paylaşayım.
Kod: Tümünü seç
procedure RegisterFileType(sUzanti, sBildirim, sApp, sReferans, sIcon, sIconIdx, VarsayilanDataDosyasi : String) ;
var // Uses Registry, ShlObj;
Reg:TRegistry;
begin
if (sUzanti = '') or (sApp = '') then exit;
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_CLASSES_ROOT;
Reg.OpenKey('.' + sUzanti, True);
Reg.WriteString('', sReferans);
Reg.CloseKey;
if FileExists(VarsayilanDataDosyasi) then
begin // Bu da Sağ Mouse - Yeni dediğinizde oluşacak yenisi için kaynak dosya.
Reg.OpenKey('.' + sUzanti + '\ShellNew', True);
Reg.WriteString('', sReferans);
Reg.WriteString('FileName', VarsayilanDataDosyasi );
Reg.CloseKey;
end else begin
If Reg.KeyExists('.' + sUzanti + '\ShellNew' )
then Reg.DeleteKey( '.' + sUzanti + '\ShellNew' );
end;
Reg.OpenKey(sReferans, True);
Reg.WriteString('', sBildirim) ;
Reg.CloseKey;
Reg.OpenKey(sReferans +'\DefaultIcon', True);
Reg.WriteString('', sIcon + ',' + sIconIdx);
Reg.CloseKey;
Reg.OpenKey(sReferans + '\shell\open\command', True);
Reg.WriteString('',sApp+' "%1"');
Reg.CloseKey;
finally
Reg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil) ;
end;
Kod: Tümünü seç
RegisterFileType( 'DJB', 'DJB Yazılımı Veritabanı', Application.ExeName, 'DJB_Ornek', Application.ExeName, '0', ExtractFilePath(Application.Exename) + 'DATA\VarsayilanBosData.djb' );
başarılar...
Re: Sağtık > yeni menüsüne uygulamamı koymak istiyorum
Sayın mrmarman ;
Yardımlarınızdan dolayı çok teşekkür ederim.Söylediğiniz şekilde uygulayarak sorunu çözdüm.
Çok sağolun ,saygılarımla ...
Yardımlarınızdan dolayı çok teşekkür ederim.Söylediğiniz şekilde uygulayarak sorunu çözdüm.
Çok sağolun ,saygılarımla ...