Windows Kullanıcı Hesaplarını
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Windows Kullanıcı Hesaplarını
s.a.
Windows Kullanıcı Hesaplarını Delphiden kod ile almak istiyorum. nasıl yapabilirm yardımlarınızı bekliyorum.
şimdiden teşekküerler...
Windows Kullanıcı Hesaplarını Delphiden kod ile almak istiyorum. nasıl yapabilirm yardımlarınızı bekliyorum.
şimdiden teşekküerler...
Re: Windows Kullanıcı Hesaplarını
o an login olanımı yoksa tüm hesaplarımı ?aycen yazdı:s.a.
Windows Kullanıcı Hesaplarını Delphiden kod ile almak istiyorum. nasıl yapabilirm yardımlarınızı bekliyorum.
şimdiden teşekküerler...
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: Windows Kullanıcı Hesaplarını
bilgisayarda açılan tüm kullanıcı hesaplarını almak istiyorum.
bir yedekleme programı yapıyorum. otomatik olarak tüm kullanıcıların belgeleri ve diğer bilgilerini kopyalamak istiyorum.
bir yedekleme programı yapıyorum. otomatik olarak tüm kullanıcıların belgeleri ve diğer bilgilerini kopyalamak istiyorum.
Re: Windows Kullanıcı Hesaplarını
http://www.faqts.com/knowledge_base/vie ... 96/fid/175
burada bişiler var ama ingilizce. standart fonksiyonlarla olmaz api ile olur diyor. logon olan deseydin çok kolay dı işin. ama bu şekilde biraz kasacaksın gibi
burada bişiler var ama ingilizce. standart fonksiyonlarla olmaz api ile olur diyor. logon olan deseydin çok kolay dı işin. ama bu şekilde biraz kasacaksın gibi
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: Windows Kullanıcı Hesaplarını
tşk.ederim. hemem incelemeye başlıyacam.
bu olay bu kadar zor mu ? Sanki kolay gibi gelmişdi bana ?
login olanı hemem bulduğumdan bu da ona benziyen bir koddur diye düşündüm.
bu olay bu kadar zor mu ? Sanki kolay gibi gelmişdi bana ?
login olanı hemem bulduğumdan bu da ona benziyen bir koddur diye düşündüm.
Re: Windows Kullanıcı Hesaplarını
şöyle düşün bir kullanıcı diğer tüm hepsinin herşeyine bu kadar basit erişirse nerde kalır xp nin güvenliği değilmi. işin kullanıcı ile bitmiyor. birde kullanıcı dosyalarını özel yaparsa yetkie autoher vs olaylarına girince neler yapacaksın onu düşün....aycen yazdı:tşk.ederim. hemem incelemeye başlıyacam.
bu olay bu kadar zor mu ? Sanki kolay gibi gelmişdi bana ?
login olanı hemem bulduğumdan bu da ona benziyen bir koddur diye düşündüm.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: Windows Kullanıcı Hesaplarını
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-839522115-1123561945-2146948035-1003]
reg. böyle bir kayıt buldum ama emin değilim. Burda ki değer yani "S-1-5-21" her bilgisayarda aynı mı? ondan sonra gelen uzun parametre her kullanıcı için değişiklik gösteriyor. Burda path de veriyor. Sana zahmet olmasa bir kontrol edermisin
kolay gelsin
reg. böyle bir kayıt buldum ama emin değilim. Burda ki değer yani "S-1-5-21" her bilgisayarda aynı mı? ondan sonra gelen uzun parametre her kullanıcı için değişiklik gösteriyor. Burda path de veriyor. Sana zahmet olmasa bir kontrol edermisin
kolay gelsin
Re: Windows Kullanıcı Hesaplarını
bendede ayı aynı. yalnız user sid i farklı. yalnız kodlama yaparken kullanıcı yetkilendirmelerine filan dikkat et. admin kullanıcıların dosyalarını kendilerine özelhale getirmişse orda epey bir uğraşman gerekecek.aycen yazdı:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-839522115-1123561945-2146948035-1003]
reg. böyle bir kayıt buldum ama emin değilim. Burda ki değer yani "S-1-5-21" her bilgisayarda aynı mı? ondan sonra gelen uzun parametre her kullanıcı için değişiklik gösteriyor. Burda path de veriyor. Sana zahmet olmasa bir kontrol edermisin
kolay gelsin
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: Windows Kullanıcı Hesaplarını
Shurzanop 2.0 projemde bununla ilgili çalışma yapmıştım.
Hesapları hem listeliyor hem yönetebiliyorsun hesap adını değiştirme, parola değiştirme, Hesaba ait login resmini değiştirme, Hesabı otomatik başlatma, Hesabı kıstlı , Admin yada devredışı bırakma, parola değitiremez ve uzak erişim için parola gerektirmez seçenekleri ile tüm hesapları yönetebiliyorsun.
Fakat Ben C++ ile çalışıyorum ve kodlamam doğal olarak C++ eğer kodları kendin için delphi ye dönüştürüp kullanabilirsen buradan yayınlayayım.
Bu çalışmaya Çok emek vermiştim belki yararlanacaklar olabilir.

Hesapları hem listeliyor hem yönetebiliyorsun hesap adını değiştirme, parola değiştirme, Hesaba ait login resmini değiştirme, Hesabı otomatik başlatma, Hesabı kıstlı , Admin yada devredışı bırakma, parola değitiremez ve uzak erişim için parola gerektirmez seçenekleri ile tüm hesapları yönetebiliyorsun.
Fakat Ben C++ ile çalışıyorum ve kodlamam doğal olarak C++ eğer kodları kendin için delphi ye dönüştürüp kullanabilirsen buradan yayınlayayım.
Bu çalışmaya Çok emek vermiştim belki yararlanacaklar olabilir.

En son SHURZAN tarafından 02 Eyl 2011 04:03 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Windows Kullanıcı Hesaplarını
API lerler yaptınız sanırım. doğrusu kodu incelemek isterim. Genel olarak artık her şey işi componentlere dökerek yapılıyor. bu bakımdan bunu incelemek isterim.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: Windows Kullanıcı Hesaplarını
SHURZAN eğer bu kodu gönderebilirsen incelemek isterim. Çok yerde aradım fakat bulamadım.
C den delphi çevirmek zormudur. Komutlar fazla farklı değil galiba
C den delphi çevirmek zormudur. Komutlar fazla farklı değil galiba
Re: Windows Kullanıcı Hesaplarını
hem evet hem hayır. eger klasik bir vt programı ise işin nispeten kolaydır. helede kullanılan c++ builder ise. ama api filan kasılan başka bir uygulamada veri tipleri şubu epey bilgi sahibi olak durumundasın yada sabretmey bilmelisinaycen yazdı:SHURZAN eğer bu kodu gönderebilirsen incelemek isterim. Çok yerde aradım fakat bulamadım.
C den delphi çevirmek zormudur. Komutlar fazla farklı değil galiba
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: Windows Kullanıcı Hesaplarını
Evet Windows API leri ile hesapları ve hesaplar ait kullanıcı adını yönetiyorsun bunun için component olduğunu sanmıyorum.
Kafanız karışmaması için sizi yönlendereyim Çünkü delphiye dönüştürmeniz zor olacaktır.
önce bir yapı(structe) sizde sanırım type oluşturacaksın aşağıdaki gibi.
daha sonra formun Create fonksiyonunda o andaki kullanıcı adını "User Account Pictures" ve bilgisayarı adını gibi değerleri alacaksın aşağıdaki gibi
Daha sonra kendi fonksiyonunu benim yazdığım gibi yazacaksın
Daha sonra listedeki kullanıcı hakkında bilgileri döndüren fonksiyonu aşağıdaki gibi yaz
Ayrıca başlatma şeklini öğrenmen için benim aşağıda yazdığım gibi fonkasiyon yazmalısın
Buraya kadar kullanıcı hesaplarıyla ilgili işlemlerdi bundan sonrasi hesabın özniteliklerini değiştirmek için yönlendireceğim
bir fonksiyon daha yazacaksın
bu fonksiyonda aşağıdaki api leri kullanacaksın
tabi önce seçilen hesap hakkında bilgileri al
daha sonra parola değişliği yapacaksan
Hesabın kullanıcı adını değiştireceksen
Bu apilerden ve o apilere göre lazım olan yapı (type) nesnelerinin değlerini ayarlayarak apileri kullanabilirsin
Unutulmamalı hesap adı başka kullanıcı adı başkadır Örneğin benim hesap adım shurzan kullanıcı adım yaşar dır
"Documents and Settings" e bakıldığında yaşar adında değil shurzan adında dökümanlar ve ayarlar klsörü vardır denetim masasında kullanıcı hesaplarına bakıldığında ve login ekranında shurzan görülmez yaşar görülür ama yaşarla her işlemi shurzan account ile yapılmaktadır.
Umarın kafanızı karıştırmadan yardımcı olmuşumdur.
Başarılar...
Kafanız karışmaması için sizi yönlendereyim Çünkü delphiye dönüştürmeniz zor olacaktır.
önce bir yapı(structe) sizde sanırım type oluşturacaksın aşağıdaki gibi.
Kod: Tümünü seç
struct Kisibilgi
{
wchar_t *name;
unsigned long flags;
unsigned long prv;
unsigned long oturumsaati;
String oturumsayi;
PSID user_sid;
String durum;
};
Kod: Tümünü seç
TCHAR kaynak[200]; //Sistemin kurulu olduğu dizindeki dökümanlar ve ayarlar klasörü
ExpandEnvironmentStrings("%SystemDrive%\\Documents and Settings\\",
kaynak,sizeof(kaynak));
usersettings = kaynak;
//Bilgisayar adını al
ExpandEnvironmentStrings("%COMPUTERNAME%", kaynak,sizeof(kaynak));
bilgisayaradi = kaynak;
//kullanıcıların login resimlerin olduğu dizin
ImagePath = usersettings+"All Users\\Application Data\\Microsoft\\"
"User Account Pictures\\";
wchar_t user_name[256];
DWORD size = sizeof( user_name);
GetUserNameW( user_name, &size); // ve oan oturum açmış kullanıcı adı
UserName = user_name;
Kod: Tümünü seç
void TKullanicilar::Hesaplar()
{
Kisibilgi kisi;
HesapListesi->Clear(); //Listview i temizle
PNET_DISPLAY_USER pBuff, p;
DWORD res, dwRec, i = 0;
String NaMe, zaman;
tm *ft;
MultiByteToWideChar(CP_ACP, 0, "", -1, StringToOleStr(bilgisayaradi), 255);
do //Döngüye başla
{
res = NetQueryDisplayInformation(StringToOleStr(bilgisayaradi),
1, i, 100, 0xFFFFFFFF, &dwRec, (PVOID *)&pBuff);
if((res==ERROR_SUCCESS) || (res==ERROR_MORE_DATA))
{
p = pBuff;
for(;dwRec>0;dwRec--)
{
kisi.name = p->usri1_name;
userinfo(kisi); //Her döngüde bulunan kullanıcı hakkında bilgi al
NaMe =(StrLenW(p->usri1_full_name))?p->usri1_full_name:
p->usri1_name;
if(kisi.oturumsaati != 0)
{
ft = localtime((long*)&kisi.oturumsaati);
zaman = IntToStr(ft->tm_wday)+'.'+
IntToStr(ft->tm_mon)+'.' +
IntToStr(ft->tm_year+1900);
}
else
{
zaman = "00.00.00";
}
itemlist = HesapListesi->Items->Add(); //Listview'e yeni kayıt ekle
itemlist->Caption = NaMe; //Hesabın görünen kullanıcı adı
itemlist->SubItems->Add(zaman); //Son oturum açtığı zaman
itemlist->SubItems->Add(kisi.oturumsayi+" kez oturum açtı"); //Kaç kez oturum açtı?
itemlist->SubItems->Add(p->usri1_comment); //Hesap hakkında kısa açıklama
Hesapdurumu(itemlist,NaMe, p->usri1_flags); //Kullanıcı durumunu öğren
itemlist->SubItems->Add(kisi.durum); //Kullanıcın durmu "user, admin" vs.
itemlist->SubItems->Add(p->usri1_name);
/*Bu hesap adı kullanıcın klsör adı bu adla belirlenir bu ad değiştirilebilmesine rağmen değiştirilmemesi gerekir bağlantı hatası oluşturur burada bu adı listview'e sütün eklemeden (listede görünmeyecek) alıyoruz çünkü seçilen bu ada göre görünen kullanıcı adı vs. işlemleri yapacağız*/
i = p->usri1_next_index;
p++;
}
Reg->CloseKey(); //Hesap durumunu öğrendikten sonra Registry de ki bilgileri de alındıktan sonra restry kapat
// Free the allocated memory.
NetApiBufferFree(pBuff); // Buffer i free et
}
} while (res==ERROR_MORE_DATA); // end do
}
//---------------------------------------------------------------------------
Kod: Tümünü seç
void userinfo(Kisibilgi &kisi) //parametre referansla alınıyor !!!
{
String durum;
//Hesap türünü öğren
DWORD rc;
USER_INFO_3 *info;
rc = NetUserGetInfo( NULL, kisi.name, 3, (LPBYTE *)&info );
if ( rc != NERR_Success )
durum = "Okunamadı";
kisi.prv = info->usri3_priv;
kisi.flags = info->usri3_flags;
kisi.oturumsayi = info->usri3_num_logons/2;
info->usri3_num_logons;
kisi.oturumsaati = info->usri3_last_logon;
switch(info->usri3_priv){
case USER_PRIV_GUEST:
durum = "Konuk"; break;
case USER_PRIV_USER:
durum = "Sınırlı";break;
case USER_PRIV_ADMIN:
durum = "Yönetici";break;
}
NetApiBufferFree( info );
kisi.durum = durum;
}
//-----------------------------------------------------------------------------
Kod: Tümünü seç
void TKullanicilar::Hesapdurumu(TListItem *item, String NaMe, unsigned long flags)
{
String durum;
//Hesap kapalı mı
if(flags & UF_ACCOUNTDISABLE)
{
durum ="Devre dışı";
itemlist->ImageIndex = 8;
}
else
{
itemlist->ImageIndex = 7;
//Hesap Açıksa
Reg->RootKey = HKEY_LOCAL_MACHINE;
//Hoşgeldiniz Ekranında hesap görünür mü?
if(Reg->OpenKey("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\"
"Winlogon\\SpecialAccounts\\UserList",false));
if(Reg->ValueExists(NaMe) == true)
{
if(Reg->ReadInteger(NaMe) == 0)
durum = "Gizli";
else
durum = "Görünür";
}
else
durum = "Görünür";
//Hesap otomatik başlayan mı?
if(Reg->OpenKey("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",false))
if((Reg->ReadString("DefaultUserName") == NaMe) &&
(Reg->ReadString("AutoAdminLogon") == '1'))
durum = "Otomatik";
Reg->CloseKey();
} //else sonu
item->SubItems->Add(durum);
}
//------------------------------------------------------------------------
bir fonksiyon daha yazacaksın
bu fonksiyonda aşağıdaki api leri kullanacaksın
tabi önce seçilen hesap hakkında bilgileri al
Kod: Tümünü seç
USER_INFO_2 *prv;
DWORD flags, nStatus = 0;
//Hesap hakkında bilgi al
//currentName = HesapListesi->Selected->SubItems->Strings[5]; hesap adı kullanıcı adı değil
NetUserGetInfo(NULL, StringToOleStr(currentName), 2, (LPBYTE *)&prv );
flags = prv->usri2_flags;
Kod: Tümünü seç
//Parola değişikliği isteği
if(Chparola->Checked)
{
USER_INFO_1003 password;
if(EditParola->Text != "")
password.usri1003_password = StringToOleStr(EditParola->Text.Trim());
else//Parolayı iptal et
password.usri1003_password = L"";
NetUserSetInfo(NULL, prv->usri2_name, 1003,(LPBYTE)&password,NULL);
if(nStatus != NERR_Success)
Hatanedir(nStatus, "Parola işlemi sistem tarafından reddedildi");
}
Kod: Tümünü seç
if(ChAdi->Checked)
{
USER_INFO_1011 tamadi;
if(EditAdi->Text.Trim() != "" )
tamadi.usri1011_full_name = StringToOleStr(EditAdi->Text.Trim());
else
tamadi.usri1011_full_name = prv->usri2_full_name;
//ad değişikliği isteğini uygla
nStatus = NetUserSetInfo(NULL, prv->usri2_name, 1011, (LPBYTE)&tamadi, NULL);
if(nStatus != NERR_Success)
Hatanedir(nStatus, "Kullanıcı adı sistem tarafından reddedildi");
else
LHesap->Caption = EditAdi->Text.Trim();
}
Unutulmamalı hesap adı başka kullanıcı adı başkadır Örneğin benim hesap adım shurzan kullanıcı adım yaşar dır
"Documents and Settings" e bakıldığında yaşar adında değil shurzan adında dökümanlar ve ayarlar klsörü vardır denetim masasında kullanıcı hesaplarına bakıldığında ve login ekranında shurzan görülmez yaşar görülür ama yaşarla her işlemi shurzan account ile yapılmaktadır.
Umarın kafanızı karıştırmadan yardımcı olmuşumdur.
Başarılar...
Re: Windows Kullanıcı Hesaplarını
çok faydalı bir açıklama yapmışın. eline sağlık.
hemem bu kodları uygalamaya çalışacam
teşekkür ederim..
hemem bu kodları uygalamaya çalışacam
teşekkür ederim..
Re: Windows Kullanıcı Hesaplarını
Rica ederim faydalı olduysam ne mutlu bana.
Yeni kullanıcı hesabı oluşturmak için "NetUserAdd" API den yararlanabilirsin fakat yeni kullanıcnın hangi kullanıcı grubunda olacağını belirlemen lazım bunuda "NetLocalGroupAddMembers" API si ile yapmalısın ayrıca kullanıcıya ait Flags ları ayarlamalısın.Yeni kullanıcı eklemek için aşağıdaki gibi bir fonksiyon yazabilirsin.

Ayrıca...
Bir kullanıcı hesabını silmek için ise "NetUserDel" API sinden yararlanabilirsin. Bunlar için yeterince bilgi Builder yardım dosyasında mevcut Builderin yardım dosyasınıda incelemeni tavsiye ederim.
Tabi bunlar tamamen delphi ile yapacağını sanıyorum. Kodların tam uyumluluk için C++ dan anlayan bir dephi ciden yardım almalısın Bu forumda yardımcı olacak forumdaş arkadaşların olacağını sanıyorum. Ben Delphi kod örneklerini kendi projelerimde C++ kodlarına dönüştürerek kullanıyorum ama tersini yap desen yapamam.
Yukarıda vermiş olduğum kodlar çalışan test edilmiş kullanılmakta olan projemden verdim.
Bu konu belki makale konusu olabilirdi umarım yararlanırsınız.
Yaşar [SHURZAN]
Yeni kullanıcı hesabı oluşturmak için "NetUserAdd" API den yararlanabilirsin fakat yeni kullanıcnın hangi kullanıcı grubunda olacağını belirlemen lazım bunuda "NetLocalGroupAddMembers" API si ile yapmalısın ayrıca kullanıcıya ait Flags ları ayarlamalısın.Yeni kullanıcı eklemek için aşağıdaki gibi bir fonksiyon yazabilirsin.

Kod: Tümünü seç
void __fastcall TYenihesap::BitBtn1Click(TObject *Sender)
{
if(EditAdi->Text != "")
{
if(EditAdi->Text.Trim().UpperCase() == bilgisayaradi.UpperCase())
{
Application->MessageBox("Kullanıcı adı bilgisayar adıyla aynı olamaz!\n\n"
"Başka bir kullanıcı adı seçin","Hata",0+48);
return;
}
String grup;
USER_INFO_1 ui;
LOCALGROUP_MEMBERS_INFO_3 localgroup_members;
NET_API_STATUS nStatus;
ui.usri1_flags = UF_SCRIPT;
if(Hak1->Checked)
{
grup = "Guests";
ui.usri1_flags |= UF_PASSWD_NOTREQD;
}
else
if(Hak2->Checked)
{
grup = "Users";
ui.usri1_flags |= UF_DONT_EXPIRE_PASSWD;
}
else{
grup = "Administrators";
ui.usri1_flags |= UF_DONT_EXPIRE_PASSWD;
}
if(Choz1->Checked)
ui.usri1_flags |= UF_PASSWD_NOTREQD;
if(Choz2->Checked)
ui.usri1_flags |= UF_PASSWD_CANT_CHANGE;
ui.usri1_name = StringToOleStr(EditAdi->Text.Trim());
ui.usri1_password = StringToOleStr(Editparola->Text.Trim());
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_password_age = NULL;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_script_path = NULL;
nStatus = NetUserAdd (NULL, 1,(LPBYTE) &ui, NULL);
if (nStatus == NERR_Success)
{
localgroup_members.lgrmi3_domainandname = StringToOleStr(EditAdi->Text.Trim());
nStatus = NetLocalGroupAddMembers( NULL,StringToOleStr(grup), 3, (LPBYTE)&localgroup_members, 1 );
Kullanicilar->userokey = true;
if (nStatus != NERR_Success)
{
Hatanedir(nStatus, "Yeni kullanıcı için hesap türü tayini"
"sistem tarafından reddedildi" );
return;
}
}
else
{
if(nStatus == NERR_UserExists)
Hatanedir(nStatus,"Yeni kullanıcı sistem tarafından reddedildi");
return;
}
}
else {
Application->MessageBoxA("Kullanıcı Adı boş bırakılamaz.", "Hata",0+16);
return;
}
Close();
}
//---------------------------------------------------------------------------
Bir kullanıcı hesabını silmek için ise "NetUserDel" API sinden yararlanabilirsin. Bunlar için yeterince bilgi Builder yardım dosyasında mevcut Builderin yardım dosyasınıda incelemeni tavsiye ederim.
Tabi bunlar tamamen delphi ile yapacağını sanıyorum. Kodların tam uyumluluk için C++ dan anlayan bir dephi ciden yardım almalısın Bu forumda yardımcı olacak forumdaş arkadaşların olacağını sanıyorum. Ben Delphi kod örneklerini kendi projelerimde C++ kodlarına dönüştürerek kullanıyorum ama tersini yap desen yapamam.
Yukarıda vermiş olduğum kodlar çalışan test edilmiş kullanılmakta olan projemden verdim.
Bu konu belki makale konusu olabilirdi umarım yararlanırsınız.
Yaşar [SHURZAN]
En son SHURZAN tarafından 02 Eyl 2011 03:59 tarihinde düzenlendi, toplamda 1 kere düzenlendi.