Windows Dosya Türü İşlemleri

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Windows Dosya Türü İşlemleri

Mesaj gönderen sabanakman »

Herkese iyi çalışmalar. Bir ara dosya tipleri ile ilgili (Dosya Tipi, Dosya Uzantısı, File Type arayan arama kutusuna ne yazmışsa artık :lol: ) müdahele yapmak istedim ve karşıma çıkan bilgiler hep dağınıktı. Kendimce ihtiyaç duyduğum ve öğrendiğim kadarı ile tekrar derleyerek kolay bir kaynak olması açısından paylaşmak gerekir diyerek ancak bu bilgileri derledim. Aslında bilgi olarak pek fazla bir külfeti yok ama birde kütüphane olarak kodlayıp paylaşmak istedim.

Aslında bütün iş windows registry kayıtlarında dönüyor ve tüm işlemler HKEY_CLASSES_ROOT kök dizini altından gerçekleşiyor. Ayrıca registry için varsayılan anahtar (dizin) değeri olarak belirttiğim değerler isimsiz değelerdir ve @ karakteri kullandım. Örnek olarak akm uzantısı kaydı yapalım.

İlk iş uzantının solunda nokta '.' olacak şekilde bir dizin oluşturmak ve varsayılan değer olarak bir isim yazmak olacak.
HKEY_CLASSES_ROOT\.akm dizini oluşturulur ve varsayılan değer olarak bir isim yazılır. Bu isim asıl bilgilerin yazılacağı registry dizin ismidir.
.........|->@='akmDosyasi' -> yazalım. Artık .akm uzantısına ait bilgiler akmDosyasi registry dizini içerisindedir.

HKEY_CLASSES_ROOT\akmDosyasi .akm uzantısına ilişkin bilgiler bu dizindedir
.........|->@='akm Dosya Arşiv Türü' -> yazarsak, windows bize o dosyaya ait tür açıklasında bu bilgiyi gösterir.

HKEY_CLASSES_ROOT\akmDosyasi\DefaultIcon anahtar dizininde yazan değer ise o dosya türüne ait simgeyi belirler
.........|->@='c:\deneme\program.exe,0' -> .exe içinde bulunan simgelerden ilkini kullan
veya
.........|->@='c:\deneme\simge.ico' -> değeri ile o türden dosya artık yazdığımız simgeyi gösterir

Gelelim dosya türüne ait programı ilişkilendirmeye. Bu değerler ise HKEY_CLASSES_ROOT\akmDosyasi\shell altında bulunur ve yine burada bulunan open anahtarındaki varsayılan değer dolu ise o dosya sağ tıklanınca seçeneği yerinde bu değer yazar.
HKEY_CLASSES_ROOT\akmDosyasi\shell\open
.........|->@='Akm Dosyası Açılıyor' Bu değer boşsa menüde Aç görünür (dile göre değişir). Bu değer dolu ise Aç yerine bu değer yazar.
HKEY_CLASSES_ROOT\akmDosyasi\shell\open\command
.........|->@='"c:\deneme\program.exe" "%1"'
Not..:Burada bulunan %1 bilgisi ilgili dosyayı 1. parametre olarak programa gönderir. Program içinden bu bilgi ParamStr(1) fonksiyonu ile elde edilir. Bknz..:ParamCount, ParamStr.

Eğer bu dosya türüne sağ tuş menüsü olarak ek seçenekler eklenmek isterse shell dizini altına kendi tanımlarımızı yapıp ek yapabiliriz. Mesela menüden Yeni Seçenek olarak görünen bir Deneme işlevi ekleyelim.
HKEY_CLASSES_ROOT\akmDosyasi\shell\Deneme
.........|->@='Akm &Deneme Menüsü' -> O türden dosyaya sağ tıklayınca bu menü seçeneği eklenir. Eğer boşsa bu menü seçeneğinde Deneme yazar.
HKEY_CLASSES_ROOT\akmDosyasi\shell\Deneme\command
.........|->@='"c:\deneme\program.exe" "%1" "/yazdir"' ->O dosyaya ait sağ tuş menüsünden seçim yapılınca çalışacak işlev tanımı. 1. parametre dosya adı, 2. parametre ise /yazdir'dır. Tabi parametreye göre işlem yapmak programa kalmış. Bknz..:ParamCount, ParamStr.

Bu konuda bir kaç kod karalamadan da paylaşım yapmak istemedim, Aşağıda verdiğim unit'le dosya türü kaydı yapılabilir, tür silinebilir, simge değiştirilebilir, o dosya türüne ait popup menü seçeneği eklenip, menü seçeneği silinebilir. Tabi burada sadece ekleme dışındaki tüm işlemler dosya türü kayıtlı ise çalışmaktadır. Ayrıca sadece registry bilgisi ile işlem yapıldığında dosya türüne ait görüntü değişimi oturum kapanmadan veya bir şekilde windows ekran görüntüsü tazelenmeden sağlanamamaktadır. Bununla ilgili simge görüntü tazeleme kodu da RefreshDesktop prosedüründe mevcut ve gerekli olduğunda çalışmaktadır. DosyaTurleri.pas dosyası..:

Kod: Tümünü seç

unit DosyaTurleri;

interface

uses Registry;

type
  TDosyaTuru=record
    Uzanti,
    UzantiAciklamasi,
    SimgeDosyasi,
    SagTusMenusu,SagTusMenuParam,SagTusMenuAciklamasi,
    ProgramAdi:String;
  end;

function DosyaTuruKaydet(DosyaTuru:TDosyaTuru;const TurVarsaDegistir:Boolean=False):Boolean;
function DosyaTuruSil(Uzanti:String):Boolean;
//Dosya türü kayıtlı ise çalışır

function DosyaTuruSimgesiDegistir(Uzanti:String;const SimgeDosyasi:String):Boolean;
//Dosya türü kayıtlı ise çalışır

function DosyaTuruMenuSecengiEkle(Uzanti:String;const MenuSecenegi,ProgramAdi:String;const MenuSecenekAciklamasi:String='';const EkParam:String=''):Boolean;
//Dosya türü kayıtlı ise çalışır
function DosyaTuruMenuSecengiSil(Uzanti:String;const MenuSecenegi:String):Boolean;
//Dosya türü kayıtlı ise çalışır


implementation

uses Forms, Messages, Windows, SysUtils, ShlObj;

var Reg:TRegistry;
function RPos(const C:Char;const S:String):Integer;
begin
  Result:=Length(S);
  while (Result>0) and (S[Result]<>C) do Dec(Result);
end;

procedure RefreshDesktop;
var DH: HWND;
begin
  DH := FindWindowEx(FindWindowEx(FindWindow('Progman', 'Program Manager'), 0,'SHELLDLL_DefView', ''), 0, 'SysListView32', '');
  PostMessage(DH, WM_KEYDOWN, VK_F5, 0);
  PostMessage(DH, WM_KEYUP, VK_F5, 1 shl 31);

  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

const
  DefaultIcon='DefaultIcon';
  shell='shell';
  open='open';
  command='command';
  VarsayilanAnahtarAdi='';

procedure RegReset(const RootKey:HKey=HKEY_CLASSES_ROOT);
begin
  Reg.RootKey:=RootKey;
  Reg.CloseKey;
end;
 
function DosyaTuruKaydet(DosyaTuru:TDosyaTuru;const TurVarsaDegistir:Boolean):Boolean;
var S,TurDetayDizini:String;
begin
  Result:=Trim(DosyaTuru.Uzanti)<>'';
  if not Result then Exit;//uzantı yoksa çalıştırma
  RegReset;
  with DosyaTuru do try
    TurDetayDizini:=Uzanti+'Dosyasi';
    if TurDetayDizini[1]='.' then Delete(TurDetayDizini,1,1);
    if Trim(UzantiAciklamasi)='' then UzantiAciklamasi:=Format('%s Dosya Tipi',[Uzanti]);
    if Uzanti[1]<>'.' then Uzanti:='.'+Uzanti;
    Result:=Reg.OpenKey(Uzanti,False);
    if Result then begin //dosya türü kayıtlı
      Result:=TurVarsaDegistir;
      TurDetayDizini:=Reg.ReadString(VarsayilanAnahtarAdi); //bu tip zaten bu dizinde kayıtlı
    end else begin //dosya türü kayıtta yok
      Result:=Reg.OpenKey(Uzanti,True);
      if Result then Reg.WriteString(VarsayilanAnahtarAdi,TurDetayDizini);
      //dosya türü gilgileri bu dizinde yazılacak, kullanıcı yetkisi varsa oluşturulur
    end;
    if Result then begin
    //eğer değiştirilecek veya oluşturulacak dosya türüyse işlem devam eder
      Reg.CloseKey;//açılan dizinler geri kapanır, kök dizinden çalışma devam eder
      Result:=Reg.OpenKey(TurDetayDizini,True);
      if Result then begin
        if Trim(UzantiAciklamasi)<>'' then Reg.WriteString(VarsayilanAnahtarAdi,UzantiAciklamasi);
        if Trim(SimgeDosyasi)<>'' then begin
          Reg.OpenKey(DefaultIcon,True);
          Reg.WriteString(VarsayilanAnahtarAdi,SimgeDosyasi);
          Reg.CloseKey;Reg.OpenKey(TurDetayDizini,True);
        end;
        ProgramAdi:=Trim(ProgramAdi);
        if ProgramAdi[1]<>'"' then ProgramAdi:=Format('"%s"',[ProgramAdi]);
        if ProgramAdi<>'' then begin
          Reg.OpenKey(shell,True);
          Reg.OpenKey(open,True);
          Reg.OpenKey(command,True);
          Reg.WriteString(VarsayilanAnahtarAdi,Format('%s "%%1"',[ProgramAdi]));
          Reg.CloseKey;Reg.OpenKey(TurDetayDizini,True);
        end;
        if Trim(SagTusMenusu)<>'' then begin
          Reg.OpenKey(shell,True);
          Reg.OpenKey(SagTusMenusu,True);
          if Trim(SagTusMenuAciklamasi)<>'' then Reg.WriteString(VarsayilanAnahtarAdi,SagTusMenuAciklamasi);
          Reg.OpenKey(command,True);
          if Trim(SagTusMenuParam)<>'' then S:=Format(' "%s"',[SagTusMenuParam]) else S:='';
          Reg.WriteString(VarsayilanAnahtarAdi,Format('%s "%%1"%s',[ProgramAdi,S]));
          Reg.CloseKey;Reg.OpenKey(TurDetayDizini,True);
        end;
      end;
    end;
  except
    Result:=False;
  end;
  RefreshDesktop;
end;

function DosyaTuruSil(Uzanti:String):Boolean;
var TurDetayDizini:String;
begin
  Result:=Trim(Uzanti)<>'';
  if not Result then Exit;//uzantı yoksa çalıştırma
  if Uzanti[1]<>'.' then Uzanti:='.'+Uzanti;
  RegReset;
  try
    Result:=Reg.OpenKey(Uzanti,False);
    if Result then begin //Dosya türü var, silinecek
      TurDetayDizini:=Reg.ReadString(VarsayilanAnahtarAdi);//Bu tür burada kayıt detayına sahip
      Reg.CloseKey;
      Result:=Reg.DeleteKey(TurDetayDizini) and Reg.DeleteKey(Uzanti);//uzantıya ait bilgiler silinir
    end;
  except
    Result:=False;
  end;
  RefreshDesktop;
end;

function DosyaTuruSimgesiDegistir(Uzanti:String;const SimgeDosyasi:String):Boolean;
var S,TurDetayDizini:String; i:Integer;
begin
  Result:=Trim(Uzanti)<>'';
  i:=RPos(',',SimgeDosyasi);
  if i>0 then S:=Copy(SimgeDosyasi,1,i-1) else S:=SimgeDosyasi;
  if not Result or not FileExists(S) then Exit;//uzantı veya simge dosyası yoksa çalıştırma
  if Uzanti[1]<>'.' then Uzanti:='.'+Uzanti;
  RegReset;
  try
    Result:=Reg.OpenKey(Uzanti,False);
    if Result then begin //Dosya türü var, silinecek
      TurDetayDizini:=Reg.ReadString(VarsayilanAnahtarAdi);//Bu tür burada kayıt detayına sahip
      Reg.CloseKey;
      Result:=Reg.OpenKey(TurDetayDizini,False);
      if Result then Result:=Reg.OpenKey(DefaultIcon,False);
      if Result then Reg.WriteString(VarsayilanAnahtarAdi,SimgeDosyasi);
    end;
  except
    Result:=False;
  end;
  RefreshDesktop;
end;

function DosyaTuruMenuSecengiEkle(Uzanti:String;const MenuSecenegi,ProgramAdi,MenuSecenekAciklamasi,EkParam:String):Boolean;
var S,TurDetayDizini:String;
begin
  Result:=Trim(Uzanti)<>'';
  if not Result or not FileExists(ProgramAdi) or (Trim(MenuSecenegi)='') then Exit;//uzantı veya program dosyası veya menü seçeneğinin adı yoksa çalıştırma
  if Uzanti[1]<>'.' then Uzanti:='.'+Uzanti;
  RegReset;
  try
    Result:=Reg.OpenKey(Uzanti,False);
    if Result then begin //Dosya türü var, silinecek
      TurDetayDizini:=Reg.ReadString(VarsayilanAnahtarAdi);//Bu tür burada kayıt detayına sahip
      Reg.CloseKey;
      Result:=Reg.OpenKey(TurDetayDizini,False);
      if Result then begin
        Reg.OpenKey(shell,True);
        Reg.OpenKey(MenuSecenegi,True);
        if Trim(MenuSecenekAciklamasi)<>'' then Reg.WriteString(VarsayilanAnahtarAdi,MenuSecenekAciklamasi);
        Reg.OpenKey(command,True);
        if Trim(EkParam)<>'' then begin
          if EkParam[1]<>'"' then S:=Format(' "%s"',[EkParam]);
        end else S:='';
        Reg.WriteString(VarsayilanAnahtarAdi,Format('%s "%%1"%s',[ProgramAdi,S]));
      end;
    end;
  except
    Result:=False;
  end;
  //RefreshDesktop;
end;

function DosyaTuruMenuSecengiSil(Uzanti:String;const MenuSecenegi:String):Boolean;
var TurDetayDizini:String;
begin
  Result:=Trim(Uzanti)<>'';
  if not Result or (Trim(MenuSecenegi)='') then Exit;//uzantı veya menü seçeneğinin adı yoksa çalıştırma
  if Uzanti[1]<>'.' then Uzanti:='.'+Uzanti;
  RegReset;
  try
    Result:=Reg.OpenKey(Uzanti,False);
    if Result then begin //Dosya türü var, silinecek
      TurDetayDizini:=Reg.ReadString(VarsayilanAnahtarAdi);//Bu tür burada kayıt detayına sahip
      Reg.CloseKey;
      Result:=Reg.OpenKey(TurDetayDizini,False);
      if Result then begin
        Reg.OpenKey(shell,True);
        Result:=Reg.DeleteKey(MenuSecenegi);
      end;
    end;
  except
    Result:=False;
  end;
  //RefreshDesktop;
end;

initialization
  Reg:=TRegistry.Create; //müsriflik olmasın, 1 tane yapalım hep onu kullanalım :)
finalization
  Reg.Free;
end.
örnek kullanımları

Kod: Tümünü seç

//Dosya Türü Eklemesi, kullanılmayacak özellikler boşaltılmalı
var DosyaTuru:TDosyaTuru;
begin
  DosyaTuru.Uzanti:='akm';
  DosyaTuru.UzantiAciklamasi:=Format('%s Arşivi',[DosyaTuru.Uzanti]);
  DosyaTuru.SimgeDosyasi:=Format('%s,0',[Application.ExeName]);
  DosyaTuru.ProgramAdi:=Application.ExeName;
  DosyaTuru.SagTusMenusu:='MenudenAkmanAc';
  DosyaTuru.SagTusMenuParam:='/msg';
  DosyaTuru.SagTusMenuAciklamasi:='Akman Dosyası Açıver Gari';
  if DosyaTuruKaydet(DosyaTuru,True) then ShowMessage('Dosya tipi kayıt edildi')
  else MessageBox(Handle,'Tür kayıt işlemi yapılamadı','Uyarı',MB_ICONWARNING);
end;

//Dosya Türü Eklemesi, (faklı yol)
var DosyaTuru:TDosyaTuru;
begin
  DosyaTuru.Uzanti:='akm';
  DosyaTuru.UzantiAciklamasi:=Format('%s Arşivi',[DosyaTuru.Uzanti]);
  DosyaTuru.SimgeDosyasi:=Format('%s,0',[Application.ExeName]);
  DosyaTuru.ProgramAdi:=Application.ExeName;
  DosyaTuru.SagTusMenusu:='';
  DosyaTuru.SagTusMenuParam:='';
  DosyaTuru.SagTusMenuAciklamasi:='';
  if DosyaTuruKaydet(DosyaTuru,True) then ShowMessage('Dosya tipi kayıt edildi')
  else MessageBox(Handle,'Tür kayıt işlemi yapılamadı','Uyarı',MB_ICONWARNING);
end;

//ilgili dosya türü kaydını silme
  if DosyaTuruSil('akm') then ShowMessage('Dosya tipi silindi')
  else MessageBox(Handle,'Tür silinemedi','Uyarı',MB_ICONWARNING);

//dosya türüne ait simgenin değiştirilmesi
  if DosyaTuruSimgesiDegistir('akm',ExtractFilePath(Application.ExeName)+'Simge.ico') then ShowMessage('Dosya tipi simgesi değişti')
  else MessageBox(Handle,'Simge değiştirilemedi','Uyarı',MB_ICONWARNING);

//ilgili dosya türüne ait popup menü seçeneği ekleme
  if DosyaTuruMenuSecengiEkle('akm','Denemesi',Application.ExeName,'Bu da yeni seçenek','/şaban şahin akman') then ShowMessage('Dosya tipi menüsü eklendi')
  else MessageBox(Handle,'Menü eklenemedi','Uyarı',MB_ICONWARNING);

//ilgili dosya türüne ait popup menü seçeneği varsa silme
  if DosyaTuruMenuSecengiSil('akm','Denemesi') then ShowMessage('Dosya tipi menüsü silindi')
  else MessageBox(Handle,'Menü silinemedi','Uyarı',MB_ICONWARNING);
Konu ile alakalı örnek proje ektedir. İlgilenenler alabilir. Kolay gelsin.
Dosya ekleri
Dosya Türü Kaydı.zip
Dosya Tipi İşlemleri
(50.5 KiB) 598 kere indirildi
En son sabanakman tarafından 07 Ara 2008 06:17 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen sabanakman »

Bir özelliği yazmayı es geçmişim. Bir dosya türüne ait varsayılan işlevi biz seçebiliyoruz. Tabi yukarıdaki açıklamada seçilmediğinden varsayılan open tanımındaki ayarlar çalışmaktadır.

HKEY_CLASSES_ROOT\akmDosyasi\shell
.........|->@='' -> değeri boşsa varsayılan işlem HKEY_CLASSES_ROOT\akmDosyasi\shell\open tanımlarındakidir.
eğer bu değer
.........|->@='Deneme' -> şeklindeyse o zaman varsayılan işlev HKEY_CLASSES_ROOT\akmDosyasi\shell\Deneme tanımlarındaki gibi olacaktır.

Burada varsayılan işlev, o dosya türü çift tıklayınca çalışacak olan program tanımlarıdır. Buna ilişkin DosyaTurleri.pas dosyasında bulunan DosyaTuruMenuSecengiEkle fonksiyonuda aşağıdaki şekilde değiştirilirse daha esnek bir yeteneğe sahip olacaktır.

Kod: Tümünü seç

...
function DosyaTuruMenuSecengiEkle(Uzanti:String;const MenuSecenegi,ProgramAdi:String;const MenuSecenekAciklamasi:String='';const EkParam:String='';const VarsayilanYap:Boolean=False):Boolean;
...
implementation
...
function DosyaTuruMenuSecengiEkle(Uzanti:String;const MenuSecenegi,ProgramAdi,MenuSecenekAciklamasi,EkParam:String;const VarsayilanYap:Boolean):Boolean;
var S,TurDetayDizini:String;
begin
  Result:=Trim(Uzanti)<>'';
  if not Result or not FileExists(ProgramAdi) or (Trim(MenuSecenegi)='') then Exit;//uzantı veya program dosyası veya menü seçeneğinin adı yoksa çalıştırma
  if Uzanti[1]<>'.' then Uzanti:='.'+Uzanti;
  RegReset;
  try
    Result:=Reg.OpenKey(Uzanti,False);
    if Result then begin //Dosya türü var, silinecek
      TurDetayDizini:=Reg.ReadString(VarsayilanAnahtarAdi);//Bu tür burada kayıt detayına sahip
      Reg.CloseKey;
      Result:=Reg.OpenKey(TurDetayDizini,False);
      if Result then begin
        Reg.OpenKey(shell,True);
        if VarsayilanYap then Reg.WriteString(VarsayilanAnahtarAdi,MenuSecenegi);
        Reg.OpenKey(MenuSecenegi,True);
        if Trim(MenuSecenekAciklamasi)<>'' then Reg.WriteString(VarsayilanAnahtarAdi,MenuSecenekAciklamasi);
        Reg.OpenKey(command,True);
        if Trim(EkParam)<>'' then begin
          if EkParam[1]<>'"' then S:=Format(' "%s"',[EkParam]);
        end else S:='';
        Reg.WriteString(VarsayilanAnahtarAdi,Format('%s "%%1"%s',[ProgramAdi,S]));
      end;
    end;
  except
    Result:=False;
  end;
  //RefreshDesktop;
end;
Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2130
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen sadettinpolat »

tesekkur ederiz , faydali bir calisma olmus...
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen qamyoncu »

Çok teşekkür ederim şaban hocam.. fazlasıyla yararlı oldu.. bide şimdi paramstr olayına el attım mı tamamdır :) tam olarak istediğim olacak..
Çalışmalarının devamını dilerim..

- Batuhan -
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen sabanakman »

qamyoncu yazdı:...bide şimdi paramstr olayına el attım mı tamamdır :) ...
Anlatımla verilen projede (download/file.php?id=46) basit bir örnek mevcut. Parametre kontrolü ve bilgilerini mesaj olarak gösteren (Parametrelerim isimli) bir buton mevcut. Butonun kodlarına göz atılmasında fayda var.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen Lost Soul »

Elinize sağlık hocam. Çok faydalı bir döküman yayınladınız.
F.Atagun
Üye
Mesajlar: 158
Kayıt: 01 Oca 2008 01:56

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen F.Atagun »

Teşekkürler ŞabanAkman Hocam,

Güzel harika bir çalışma olmuş
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen CiTiZEN »

Hocam ellerinize sağlık devamını bekliyoruz :)
UWESIS CORPORATION
godbaba
Üye
Mesajlar: 10
Kayıt: 19 May 2009 02:37

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen godbaba »

Çok çok saolun 1 buçuk yıldır aradığım şeyi sitenize üye olduktan 10 dakika sonra buldum...
Çok çok çok çok çok çok çok çok çok çok çok çok çok çok çok çok çok çok çok teşekkürler...
:bravo: :bravo: :bravo: :bravo: :bravo:
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen Battosai »

Çok çok saolun 1 buçuk yıldır aradığım şeyi sitenize üye olduktan 10 dakika sonra buldum...
Bu kadar zamandır nerde aradın acaba cevabı :twisted: Ama iyi sabretmişsiniz tebrik yani...
NathanielDowman
Üye
Mesajlar: 1
Kayıt: 02 Tem 2022 11:58

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen NathanielDowman »

While numerous areas of IT have a unimaginably cutthroat work market, there is by all accounts an ability hole in the Internet of Things improvement field. In 2017 the business had developed to more than 2,500 organizations utilizing almost 342,000 individuals. As the interest for IoT designers keeps on rising, the Internet of Things engineer compensation has been accounted for to be the quickest developing in the business.

As per late exploration from Software.org, IoT presently can't seem to arrive at its maximum capacity in light of the absence of gifted engineers in the labor force. With United States colleges graduating around 50,000 software engineering understudies a year, the hole is clear as the business sees almost 500,000 unfilled registering position.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Windows Dosya Türü İşlemleri

Mesaj gönderen greenegitim »

bir ekleme de benden olsun diyelim seçili 10 adet .akm dosyasını ilgili programınıza parametre olarak geçmek istiyorsunuz.
https://github.com/zenden2k/context-menu-launcher
Mücadele güzelleştirir!
Cevapla