- Katılım
- 23 Haz 2018
- Mesajlar
- 1,118
- Tepkime puanı
- 5,739
- Puanları
- 113
- Yaş
- 22
Çevrimdışı
Merhaba, bu yazımda sizlere QCN yedekleme fonksiyonlarını nasıl kullanabileceğinizi anlatacağım.
Android Programlama Rehberim adlı serinin ilk konusu olacak, bundan sonra bu tarz yönetimsel araçların kullanılması, yönetilmesi ve yürütülebilmesinden bahsedeceğim.
UYARI : Burada anlatılan işlemler yalnızca onarım ve bakım amaçlıdır.
UYARI : Bu rehberi kullanarak yapılan işlemlerden doğacak herhangi bir sorundan kullanıcı sorumludur.
UYARI : Bu rehber ZENLTY tarafından GSMTURKEY için hazırlanmıştır. Başka kaynaklarda izinsiz şekilde paylaşılıp çoğaltılması etik değildir.
UYARI : Bu rehber Qualcomm yonga setine sahip cihazlar içindir.
UYARI : Bu tarz bir rehber ve kaynağı ücretsiz şekilde sizlerle paylaşıyorum, konuyu paylaşıp beğenerek destek olmayı unutmayın.
QCN ve beraberindeki terimlerin anlamlarını aşağıda verdiğim konumda açıkladım, konuya ufak göz atarak bilgi edinebilirsiniz.
Konu başlığında (QC) diye bahsettiğim aslında QC adlı Windows komut satırında çalışan bir programdır. 2016 yılında SFT tarafından hazırlanmıştır.
Bu da içerdiği fonksiyonlar
Gereksinimler ve Belirteçler
Yedekleme İşlemi
Araçları indirip bir klasöre çıkartın.
Pencere_Aç.bat 'ı çalıştırın.
Karşınıza benzer şekilde bir komut satırı açılacak.
Aracı qc.exe yazıp çalıştırıyoruz ve herhangi bir yardım çıktısı alamıyoruz.
Programı incelemeye alıp gereksinimlerini inceliyoruz.
Araç bizden bir adet serialport yani DIAG Port ve filesave yani QCN yedeklenecek komut istiyor.
Yalnızca bu istenilenleri vermek yeterli olmayacaktır çünkü inceleme esnasında aracın birden çok fonksiyonu olduğunu gördüm, bu araç argumanlarla çalışıyor. Yedekleme işlemi için qcnread adlı argumanı kulanacağız.
Port argumanı için spesifik bir çalışma yapılmamış ne yazılsa tutacak şekilde yazılan argumanların sırasına göre alıyor.
Burada portu 3. argumandan alacak öncesine ek getirmemiş gerekiyor ben -p argumanını kullanmayı tercih ediyorum.
SPC bir gereksinim olduğu için bunu da tanıtmamız gerekiyor.
Yine yazılan argumanların sırasından aldığı çok belli. Arguman olarak -spc kullanalım. Eğer cihazın SPC kodunu bilmiyorsanız spc default olarak 000000 olacaktır.
Örnek kullanımı şu şekilde yapıyoruz
Bu aracı C# programlama dilinde kullanabilmek için şu şekilde bir kullanım sağlayabilirsiniz.
Bir adet port için textbox, bir adet dosya kayıt yeri için savefiledialog ve log çıktısı bir textbox eklemeniz yeterli olur.
Bu aracı Visual Basic dilinde kullanabilmek için şu şekilde kullanım sağlayabilirsiniz.
Bir adet port için textbox, bir adet dosya kayıt yeri için savefiledialog ve log çıktısı bir textbox eklemeniz yeterli olur.
Üst düzey programcılar ve tersine mühendisliği sevenler için IL kodlarını da paylaşıyorum.
Bilgilendirme : Artık Qualcomm yonga setinde QCN yedekleme işlemleri yapıp uzaya çıktığını sananlara bakarak gülebilirsiniz.
Bir sonraki eğitimimizde QCN editleme işlemini yapmayı göstereceğim.
Konu altına istediğiniz herhangi bir konuda rehber talebinde bulunabilirsiniz.
İyi geliştirmeler dilerim.
Lütfen konu altına yorum yaparken Teşekkürler, Elinize sağlık, süper, sağol, helal olsun gibi kelimeler yazıp konuları kirletmeyelim. Herkes aradığını bu mesajlar yüzünden bulamıyor. Altta beğen butonuna basmanız yeterlidir. Konu ile ilgili sorununuzu veya çözümünüz varsa yorum yapın. Konu ile alakasız cevaplar silinecektir.
Android Programlama Rehberim adlı serinin ilk konusu olacak, bundan sonra bu tarz yönetimsel araçların kullanılması, yönetilmesi ve yürütülebilmesinden bahsedeceğim.
UYARI : Burada anlatılan işlemler yalnızca onarım ve bakım amaçlıdır.
UYARI : Bu rehberi kullanarak yapılan işlemlerden doğacak herhangi bir sorundan kullanıcı sorumludur.
UYARI : Bu rehber ZENLTY tarafından GSMTURKEY için hazırlanmıştır. Başka kaynaklarda izinsiz şekilde paylaşılıp çoğaltılması etik değildir.
UYARI : Bu rehber Qualcomm yonga setine sahip cihazlar içindir.
UYARI : Bu tarz bir rehber ve kaynağı ücretsiz şekilde sizlerle paylaşıyorum, konuyu paylaşıp beğenerek destek olmayı unutmayın.
QCN ve beraberindeki terimlerin anlamlarını aşağıda verdiğim konumda açıkladım, konuya ufak göz atarak bilgi edinebilirsiniz.
Development - Android Yonga Setine Göre Ayrışan Terimler | Qualcomm
Merhabalar, Yonga Setine göre ayrışan terimlerden bahsedeceğim. Bu terimler,i sizlerin işini sorun çözümlerinde ve araştırma yaparken sonuca daha kolay erişebilmeniz için anlatıyorum. Bu anlatımları başka yerde bulamazsınız, tecrübelerimden irdelenmiştir. Anlatım GSMTURKEY için ZENLTY tarafından...
gsmturkey.net
Konu başlığında (QC) diye bahsettiğim aslında QC adlı Windows komut satırında çalışan bir programdır. 2016 yılında SFT tarafından hazırlanmıştır.
Bu da içerdiği fonksiyonlar
Gereksinimler ve Belirteçler
Kod:
Diag Port (COM)
SPC Code (Default : 000000)
QCN Yedek Yeri (Path)
Yedekleme İşlemi
Araçları indirip bir klasöre çıkartın.
Pencere_Aç.bat 'ı çalıştırın.
Karşınıza benzer şekilde bir komut satırı açılacak.
Aracı qc.exe yazıp çalıştırıyoruz ve herhangi bir yardım çıktısı alamıyoruz.
Programı incelemeye alıp gereksinimlerini inceliyoruz.
Araç bizden bir adet serialport yani DIAG Port ve filesave yani QCN yedeklenecek komut istiyor.
Yalnızca bu istenilenleri vermek yeterli olmayacaktır çünkü inceleme esnasında aracın birden çok fonksiyonu olduğunu gördüm, bu araç argumanlarla çalışıyor. Yedekleme işlemi için qcnread adlı argumanı kulanacağız.
Port argumanı için spesifik bir çalışma yapılmamış ne yazılsa tutacak şekilde yazılan argumanların sırasına göre alıyor.
Burada portu 3. argumandan alacak öncesine ek getirmemiş gerekiyor ben -p argumanını kullanmayı tercih ediyorum.
SPC bir gereksinim olduğu için bunu da tanıtmamız gerekiyor.
Yine yazılan argumanların sırasından aldığı çok belli. Arguman olarak -spc kullanalım. Eğer cihazın SPC kodunu bilmiyorsanız spc default olarak 000000 olacaktır.
Örnek kullanımı şu şekilde yapıyoruz
Kod:
qc.exe qcnread -p COM3 -f C:/Temp -spc 000000
Bir adet port için textbox, bir adet dosya kayıt yeri için savefiledialog ve log çıktısı bir textbox eklemeniz yeterli olur.
C#:
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = string.Concat(new string[]
{
"./c qc qcnread -p ",
this.comport.Text,
" -f ",
this.SaveFileDialog1.FileName.ToString(),
" -spc 000000"
});
process.Start();
string[] array = process.StandardOutput.ReadToEnd().Split(new char[]
{
'\n'
});
foreach (string text in array)
{
this.log_box1.AppendText(text.Replace("COM" + this.ComPortstrp2.Text, this.ComPortstrp22.Text));
}
this.updatelog("Backup QCN Done \r\n", Color.LightGreen, true);
Bir adet port için textbox, bir adet dosya kayıt yeri için savefiledialog ve log çıktısı bir textbox eklemeniz yeterli olur.
Kod:
Dim process As Process = New Process()
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardError = True
process.StartInfo.CreateNoWindow = True
process.StartInfo.FileName = "cmd.exe"
process.StartInfo.Arguments = String.Concat(New String() { "./c qc qcnread -p ", Me.ComPortstrp2.Text, " -f ", Me.SaveFileDialog1.FileName.ToString(), " -spc 000000" })
process.Start()
Dim array As String() = process.StandardOutput.ReadToEnd().Split(New Char() { vbLf })
For Each text As String In array
Me.log_box1.AppendText(text.Replace("COM" + Me.ComPortstrp2.Text, Me.ComPortstrp22.Text))
Next
Me.updatelog("Backup QCN Done " & vbCrLf, Color.LightGreen, True)
Kod:
.method private
instance void BackupWorker1_DoWork (
object sender,
class [System]System.ComponentModel.DoWorkEventArgs e
) cil managed
{
// Header Size: 12 bytes
// Code Size: 372 (0x174) bytes
// LocalVarSig Token: 0x1100004B RID: 75
.maxstack 4
.locals init (
[0] string,
[1] string,
[2] string[],
[3] class [System]System.Diagnostics.Process,
[4] string,
[5] string[],
[6] char[],
[7] int32,
[8] string[],
[9] bool
)
/* 0x0003003C 00 */ IL_0000: nop
/* 0x0003003D 02 */ IL_0001: ldarg.0
/* 0x0003003E 6F55000006 */ IL_0002: callvirt instance class QC_Network_Repair_Tool__Dev_Time__.HuraButton QC_Network_Repair_Tool__Dev_Time__.Form1::get_BackBTN()
/* 0x00030043 16 */ IL_0007: ldc.i4.0
/* 0x00030044 6FEA00000A */ IL_0008: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Enabled(bool)
/* 0x00030049 00 */ IL_000D: nop
/* 0x0003004A 73EB00000A */ IL_000E: newobj instance void [System]System.Diagnostics.Process::.ctor()
/* 0x0003004F 0D */ IL_0013: stloc.3
/* 0x00030050 7259050070 */ IL_0014: ldstr "netstat"
/* 0x00030055 0B */ IL_0019: stloc.1
/* 0x00030056 7269050070 */ IL_001A: ldstr "-aon"
/* 0x0003005B 0A */ IL_001F: stloc.0
/* 0x0003005C 09 */ IL_0020: ldloc.3
/* 0x0003005D 6FEC00000A */ IL_0021: callvirt instance class [System]System.Diagnostics.ProcessStartInfo [System]System.Diagnostics.Process::get_StartInfo()
/* 0x00030062 16 */ IL_0026: ldc.i4.0
/* 0x00030063 6FED00000A */ IL_0027: callvirt instance void [System]System.Diagnostics.ProcessStartInfo::set_UseShellExecute(bool)
/* 0x00030068 00 */ IL_002C: nop
/* 0x00030069 09 */ IL_002D: ldloc.3
/* 0x0003006A 6FEC00000A */ IL_002E: callvirt instance class [System]System.Diagnostics.ProcessStartInfo [System]System.Diagnostics.Process::get_StartInfo()
/* 0x0003006F 17 */ IL_0033: ldc.i4.1
/* 0x00030070 6FEE00000A */ IL_0034: callvirt instance void [System]System.Diagnostics.ProcessStartInfo::set_RedirectStandardOutput(bool)
/* 0x00030075 00 */ IL_0039: nop
/* 0x00030076 09 */ IL_003A: ldloc.3
/* 0x00030077 6FEC00000A */ IL_003B: callvirt instance class [System]System.Diagnostics.ProcessStartInfo [System]System.Diagnostics.Process::get_StartInfo()
/* 0x0003007C 17 */ IL_0040: ldc.i4.1
/* 0x0003007D 6FEF00000A */ IL_0041: callvirt instance void [System]System.Diagnostics.ProcessStartInfo::set_RedirectStandardError(bool)
/* 0x00030082 00 */ IL_0046: nop
/* 0x00030083 09 */ IL_0047: ldloc.3
/* 0x00030084 6FEC00000A */ IL_0048: callvirt instance class [System]System.Diagnostics.ProcessStartInfo [System]System.Diagnostics.Process::get_StartInfo()
/* 0x00030089 17 */ IL_004D: ldc.i4.1
/* 0x0003008A 6FF000000A */ IL_004E: callvirt instance void [System]System.Diagnostics.ProcessStartInfo::set_CreateNoWindow(bool)
/* 0x0003008F 00 */ IL_0053: nop
/* 0x00030090 09 */ IL_0054: ldloc.3
/* 0x00030091 6FEC00000A */ IL_0055: callvirt instance class [System]System.Diagnostics.ProcessStartInfo [System]System.Diagnostics.Process::get_StartInfo()
/* 0x00030096 7273050070 */ IL_005A: ldstr "cmd.exe"
/* 0x0003009B 6FF100000A */ IL_005F: callvirt instance void [System]System.Diagnostics.ProcessStartInfo::set_FileName(string)
/* 0x000300A0 00 */ IL_0064: nop
/* 0x000300A1 09 */ IL_0065: ldloc.3
/* 0x000300A2 6FEC00000A */ IL_0066: callvirt instance class [System]System.Diagnostics.ProcessStartInfo [System]System.Diagnostics.Process::get_StartInfo()
/* 0x000300A7 1B */ IL_006B: ldc.i4.5
/* 0x000300A8 8D4C000001 */ IL_006C: newarr [mscorlib]System.String
/* 0x000300AD 1305 */ IL_0071: stloc.s V_5
/* 0x000300AF 1105 */ IL_0073: ldloc.s V_5
/* 0x000300B1 16 */ IL_0075: ldc.i4.0
/* 0x000300B2 72B9080070 */ IL_0076: ldstr "./c qc qcnread -p "
/* 0x000300B7 A2 */ IL_007B: stelem.ref
/* 0x000300B8 00 */ IL_007C: nop
/* 0x000300B9 1105 */ IL_007D: ldloc.s V_5
/* 0x000300BB 17 */ IL_007F: ldc.i4.1
/* 0x000300BC 02 */ IL_0080: ldarg.0
/* 0x000300BD 6F45000006 */ IL_0081: callvirt instance class [System.Windows.Forms]System.Windows.Forms.ComboBox QC_Network_Repair_Tool__Dev_Time__.Form1::get_ComPortstrp2()
/* 0x000300C2 6FCF00000A */ IL_0086: callvirt instance string [System.Windows.Forms]System.Windows.Forms.ComboBox::get_Text()
/* 0x000300C7 A2 */ IL_008B: stelem.ref
/* 0x000300C8 00 */ IL_008C: nop
/* 0x000300C9 1105 */ IL_008D: ldloc.s V_5
/* 0x000300CB 18 */ IL_008F: ldc.i4.2
/* 0x000300CC 72DF080070 */ IL_0090: ldstr " -f "
/* 0x000300D1 A2 */ IL_0095: stelem.ref
/* 0x000300D2 00 */ IL_0096: nop
/* 0x000300D3 1105 */ IL_0097: ldloc.s V_5
/* 0x000300D5 19 */ IL_0099: ldc.i4.3
/* 0x000300D6 02 */ IL_009A: ldarg.0
/* 0x000300D7 6F5B000006 */ IL_009B: callvirt instance class [System.Windows.Forms]System.Windows.Forms.SaveFileDialog QC_Network_Repair_Tool__Dev_Time__.Form1::get_SaveFileDialog1()
/* 0x000300DC 6F0001000A */ IL_00A0: callvirt instance string [System.Windows.Forms]System.Windows.Forms.FileDialog::get_FileName()
/* 0x000300E1 6F0101000A */ IL_00A5: callvirt instance string [mscorlib]System.String::ToString()
/* 0x000300E6 A2 */ IL_00AA: stelem.ref
/* 0x000300E7 00 */ IL_00AB: nop
/* 0x000300E8 1105 */ IL_00AC: ldloc.s V_5
/* 0x000300EA 1A */ IL_00AE: ldc.i4.4
/* 0x000300EB 72C1050070 */ IL_00AF: ldstr " -spc 000000"
/* 0x000300F0 A2 */ IL_00B4: stelem.ref
/* 0x000300F1 00 */ IL_00B5: nop
/* 0x000300F2 1105 */ IL_00B6: ldloc.s V_5
/* 0x000300F4 28F300000A */ IL_00B8: call string [mscorlib]System.String::Concat(string[])
/* 0x000300F9 6FF400000A */ IL_00BD: callvirt instance void [System]System.Diagnostics.ProcessStartInfo::set_Arguments(string)
/* 0x000300FE 00 */ IL_00C2: nop
/* 0x000300FF 09 */ IL_00C3: ldloc.3
/* 0x00030100 6FEC00000A */ IL_00C4: callvirt instance class [System]System.Diagnostics.ProcessStartInfo [System]System.Diagnostics.Process::get_StartInfo()
/* 0x00030105 72DB050070 */ IL_00C9: ldstr "Tools\\"
/* 0x0003010A 6FF500000A */ IL_00CE: callvirt instance void [System]System.Diagnostics.ProcessStartInfo::set_WorkingDirectory(string)
/* 0x0003010F 00 */ IL_00D3: nop
/* 0x00030110 09 */ IL_00D4: ldloc.3
/* 0x00030111 6FF600000A */ IL_00D5: callvirt instance bool [System]System.Diagnostics.Process::Start()
/* 0x00030116 26 */ IL_00DA: pop
/* 0x00030117 09 */ IL_00DB: ldloc.3
/* 0x00030118 6FF700000A */ IL_00DC: callvirt instance class [mscorlib]System.IO.StreamReader [System]System.Diagnostics.Process::get_StandardOutput()
/* 0x0003011D 6FF800000A */ IL_00E1: callvirt instance string [mscorlib]System.IO.StreamReader::ReadToEnd()
/* 0x00030122 17 */ IL_00E6: ldc.i4.1
/* 0x00030123 8D80000001 */ IL_00E7: newarr [mscorlib]System.Char
/* 0x00030128 1306 */ IL_00EC: stloc.s V_6
/* 0x0003012A 1106 */ IL_00EE: ldloc.s V_6
/* 0x0003012C 16 */ IL_00F0: ldc.i4.0
/* 0x0003012D 1F0A */ IL_00F1: ldc.i4.s 10
/* 0x0003012F 9D */ IL_00F3: stelem.i2
/* 0x00030130 1106 */ IL_00F4: ldloc.s V_6
/* 0x00030132 6FD000000A */ IL_00F6: callvirt instance string[] [mscorlib]System.String::Split(char[])
/* 0x00030137 0C */ IL_00FB: stloc.2
/* 0x00030138 08 */ IL_00FC: ldloc.2
/* 0x00030139 1308 */ IL_00FD: stloc.s V_8
/* 0x0003013B 16 */ IL_00FF: ldc.i4.0
/* 0x0003013C 1307 */ IL_0100: stloc.s V_7
/* 0x0003013E 2B41 */ IL_0102: br.s IL_0145
// loop start (head: IL_0145)
/* 0x00030140 1108 */ IL_0104: ldloc.s V_8
/* 0x00030142 1107 */ IL_0106: ldloc.s V_7
/* 0x00030144 9A */ IL_0108: ldelem.ref
/* 0x00030145 1304 */ IL_0109: stloc.s V_4
/* 0x00030147 02 */ IL_010B: ldarg.0
/* 0x00030148 6F41000006 */ IL_010C: callvirt instance class [System.Windows.Forms]System.Windows.Forms.RichTextBox QC_Network_Repair_Tool__Dev_Time__.Form1::get_log_box1()
/* 0x0003014D 1104 */ IL_0111: ldloc.s V_4
/* 0x0003014F 72E9050070 */ IL_0113: ldstr "COM"
/* 0x00030154 02 */ IL_0118: ldarg.0
/* 0x00030155 6F45000006 */ IL_0119: callvirt instance class [System.Windows.Forms]System.Windows.Forms.ComboBox QC_Network_Repair_Tool__Dev_Time__.Form1::get_ComPortstrp2()
/* 0x0003015A 6FCF00000A */ IL_011E: callvirt instance string [System.Windows.Forms]System.Windows.Forms.ComboBox::get_Text()
/* 0x0003015F 28E400000A */ IL_0123: call string [mscorlib]System.String::Concat(string, string)
/* 0x00030164 02 */ IL_0128: ldarg.0
/* 0x00030165 6F43000006 */ IL_0129: callvirt instance class QC_Network_Repair_Tool__Dev_Time__.HuraComboBox QC_Network_Repair_Tool__Dev_Time__.Form1::get_ComPortstrp22()
/* 0x0003016A 6FCF00000A */ IL_012E: callvirt instance string [System.Windows.Forms]System.Windows.Forms.ComboBox::get_Text()
/* 0x0003016F 6F6D00000A */ IL_0133: callvirt instance string [mscorlib]System.String::Replace(string, string)
/* 0x00030174 6FDC00000A */ IL_0138: callvirt instance void [System.Windows.Forms]System.Windows.Forms.TextBoxBase::AppendText(string)
/* 0x00030179 00 */ IL_013D: nop
/* 0x0003017A 1107 */ IL_013E: ldloc.s V_7
/* 0x0003017C 17 */ IL_0140: ldc.i4.1
/* 0x0003017D D6 */ IL_0141: add.ovf
/* 0x0003017E 1307 */ IL_0142: stloc.s V_7
/* 0x00030180 00 */ IL_0144: nop
/* 0x00030181 1107 */ IL_0145: ldloc.s V_7
/* 0x00030183 1108 */ IL_0147: ldloc.s V_8
/* 0x00030185 8E */ IL_0149: ldlen
/* 0x00030186 B7 */ IL_014A: conv.ovf.i4
/* 0x00030187 FE04 */ IL_014B: clt
/* 0x00030189 1309 */ IL_014D: stloc.s V_9
/* 0x0003018B 1109 */ IL_014F: ldloc.s V_9
/* 0x0003018D 2DB1 */ IL_0151: brtrue.s IL_0104
// end loop
/* 0x0003018F 02 */ IL_0153: ldarg.0
/* 0x00030190 72E9080070 */ IL_0154: ldstr "Backup QCN Done \r\n"
/* 0x00030195 28E700000A */ IL_0159: call valuetype [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Color::get_LightGreen()
/* 0x0003019A 17 */ IL_015E: ldc.i4.1
/* 0x0003019B 6F62000006 */ IL_015F: callvirt instance void QC_Network_Repair_Tool__Dev_Time__.Form1::updatelog(string, valuetype [System.Drawing]System.Drawing.Color, bool)
/* 0x000301A0 00 */ IL_0164: nop
/* 0x000301A1 02 */ IL_0165: ldarg.0
/* 0x000301A2 6F55000006 */ IL_0166: callvirt instance class QC_Network_Repair_Tool__Dev_Time__.HuraButton QC_Network_Repair_Tool__Dev_Time__.Form1::get_BackBTN()
/* 0x000301A7 17 */ IL_016B: ldc.i4.1
/* 0x000301A8 6FEA00000A */ IL_016C: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Enabled(bool)
/* 0x000301AD 00 */ IL_0171: nop
/* 0x000301AE 00 */ IL_0172: nop
/* 0x000301AF 2A */ IL_0173: ret
Bir sonraki eğitimimizde QCN editleme işlemini yapmayı göstereceğim.
Konu altına istediğiniz herhangi bir konuda rehber talebinde bulunabilirsiniz.
İyi geliştirmeler dilerim.
Lütfen konu altına yorum yaparken Teşekkürler, Elinize sağlık, süper, sağol, helal olsun gibi kelimeler yazıp konuları kirletmeyelim. Herkes aradığını bu mesajlar yüzünden bulamıyor. Altta beğen butonuna basmanız yeterlidir. Konu ile ilgili sorununuzu veya çözümünüz varsa yorum yapın. Konu ile alakasız cevaplar silinecektir.
Moderatör tarafında düzenlendi: