User Form İle Lisans Girme

Katılım
29 Kasım 2008
Mesajlar
70
Excel Vers. ve Dili
Microsoft 2010
[ÇÖZÜLDÜ] User Form İle Lisans Girme

Öncelikle bu formun oluşmasında ve gelişmesinde emeği geçen tüm herkese çok teşekkür ederim. Sayenizde bilmediğimiz bir çok konuyu öğrenip bildiklerimizi de geliştirme fırsatımız oldu ve oluyor.

Formda bir çok kez neredeyse tüm başlıkları tek tek kontrol ederek arama yaptım, bu konu ile neredeyse aynı olan bir kaç konu da buldum fakat konular bir kaç yıl öncesine ait.


Bu Çalışmanın Amacı: Kendi hazırladığımız veya bir şekilde kullandığımız excel çalışma dosyalarımızın bizden izinsiz bir şekilde kullanımının bir nevi önüne geçmek. VB şifresi kırıldığı takdirde bu kodlara rahatlıkla erişebileceğini söyleyen arkadaşlar olabilir ki milyon dolarlık yazılımlar dahi kırılabiliyor. Cevap olarak; herkesin ileri düzeyde excel bilgisinin olmadığı varsayılarak böyle bir çalışma yapılmak istenmiştir diyebilirim.
Ayrıca "El Elden Üstündür" düşüncesi ile yazılmış olan makrolar geliştirilerek imkansız olmasa dahi şifreleri kırmak isteyeni uğraştıracak bir hale getirilebilir.

Aşağıda eklediğim dosya içerisine yapılmak istenilen işlemle alakalı kısa bir not ekledim fakat buradan da bahsedeyim.

Çalışma içerisinde 2 adet makro mevcut;

1. Makro: Hdd Seri Numarası bulmaya yarıyor.

2. Makro: Dosya açılışında, makro içerisindeki Hdd seri numarası ile bilgisayarın Hdd seri numarası sorgulanıyor ve uyuşuyorsa kullanıma izin veriyor değilse, lisans sayfasına yönlendiriyor.

Yapılmak İstenen: 2. Makro biraz geliştirilerek, Hdd sorgusunu arka planda yapacak (Her açılışta kullanıcıyı bıktırmamak adına) ve eğer seri numaralar uyuşmuyorsa kullanıcıya uyarı verecek ve lisans sayfasına (UserForm) yönlendirecek.
Diğer bir işlem ise, Hdd seri numarası makro içerisine olduğu gibi yazılıyor, bunun yerine elde edilen seri numarasına ekleme çıkarma çarpma vs ile belirlenecek bir işlemden sonra elde edilen değerin girilmesi.

Örnek: Hdd seri numarası 78985642 bu maraya 20 ekleyip 90'la çarpıp tekrar 30 ekledikten sonra elde edilecek sonuç (7108709610). Dolayısıyla makro ilk açılışta bu değerin olup olmadığını kontrol edecek.

Yapmak istediğim bu çalışmaya destek verecek olan tüm herkese şimdiden çok teşekkür ederim. Benim büyük bir ihtiyacımı karşılayacağı gibi umarım ihtiyacı olan diğer arkadaşlara da faydalı olur. Yukarıdaki fikirlerin gelişmesi adına tüm fikirlere ve desteğe açık olduğumu belirtmek istiyorum. Dediğim gibi "El Elden Üstündür"

Çalışma Dosyası: Buradan İndirebilirsiniz.


Not: Bu konu tarafımdan "Beyin Fırtınası" ve "Kullanıcı ve Parola Uygulamaları" başlıklarına bir kaç hafta önce eklenmiştir. Fakat söz konusu başlıklarda konu açma onaya bağlı olduğundan ve onay verilmediğinden en son bu bölüme açılmıştır. Bu başlığı inceleyen yetkili bir moderatör varsa lütfen diğer konu açma isteklerimi iptal ediniz.

! İstenilen sonuca ulaşılmıştır. Destek veren herkese teşekkürler
 
Son düzenleme:

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,354
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Merhaba;

Bulduğunuz hdd serial, her windows yüklemesinde değişen bir numaradır. Fiziksel hdd no ile yapın.
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Hdd numarası kullanırsanız başka bilgisayar kullanamaz. Bu da sıkıntı olabilir. Bunun için arka planda mail attırmanız ya da form veya sayfa doldurarak seri no istemeniz daha doğru olur. Size atılan mailde seri no da aldırabilirsiniz.
 
Katılım
29 Kasım 2008
Mesajlar
70
Excel Vers. ve Dili
Microsoft 2010
Evet Zeki, bey fiziksel adresi sorgulatmak daha doğru olacaktır. İlgili kod revize edilebilir.

Sayın askm, istenende tam olarak dosyanın izinsiz olarak başka bir bilgisayarda kullanımının önüne geçmektir. Lisans anahtarı için irtibata geçildiğinde HDD seri numarası istenip, kullanıcıya işlemler sonucunda elde edilen değer verilecektir. Buradaki amaç kullanmak isteyen kişiyi irtibata geçirmektir. Ayrıca veri girişi için çalışma içerisinde bir userform mevcut.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,354
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
HDD fiziksel noyu aşağıdaki fonksiyon ile alabilirsiniz.

Kod:
Function HD_SNo(DrvIdx As Byte) As String
    Dim strCls As String, strKey As String
    Dim WMI As Object
    Set WMI = GetObject("winmgmts:")
    strCls = "Win32_PhysicalMedia"
    strKey = strCls & ".Tag=""\\\\.\\PHYSICALDRIVE" & DrvIdx & """"
    HD_SNo = Trim(WMI.InstancesOf(strCls)(strKey).SerialNumber)
End Function
 

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,254
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
HDD fiziksel noyu aşağıdaki fonksiyon ile alabilirsiniz.

Kod:
Function HD_SNo(DrvIdx As Byte) As String
    Dim strCls As String, strKey As String
    Dim WMI As Object
    Set WMI = GetObject("winmgmts:")
    strCls = "Win32_PhysicalMedia"
    strKey = strCls & ".Tag=""\\\\.\\PHYSICALDRIVE" & DrvIdx & """"
    HD_SNo = Trim(WMI.InstancesOf(strCls)(strKey).SerialNumber)
End Function
Merhaba.
Zeki bey, DrvIdx As Byte
burada DrvIdx diskin index numarasımı?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,354
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Aynen öyle. Index "0" dan başlar. İkinci hdd varsa o da "1" dir.
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Aşağıdaki kod ile cpu id öğrenip ona göre de işlem yapabilirsiniz. Zira HDD daha çabuk bozulan bir yapıda.
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Kod:
Sub cpual()

Dim wmi, cpu, cpuid
  Set wmi = GetObject("winmgmts:")
  For Each cpu In wmi.InstancesOf("Win32_Processor")
   cpuid = cpuid + cpu.ProcessorID
  Next
  MsgBox cpuid
End Sub
 
Katılım
29 Kasım 2008
Mesajlar
70
Excel Vers. ve Dili
Microsoft 2010
Sayın askm kod için teşekkür ederim fakat bunu giriş sorgusuna bir türlü uyarlayamadım.

Kod:
Private Sub Workbook_Open()
Dim wmi, cpu, cpuid
  Set wmi = GetObject("winmgmts:")
  For Each cpu In wmi.InstancesOf("Win32_Processor")
   cpuid = cpuid + cpu.ProcessorID
If cpuid = BFEBFBFF000306C3 Then
MsgBox " Kayıtlı Kullanıcı Olduğunuz İçin Teşekkür Ederiz."
Exit Sub
Else
UserForm1.Show
End If
End Sub
nerede hata yapıyorum.
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Aşağıdaki şekilde deneyin. next kelimesini eklemeyi unutmuşsunuz.:)
Kod:
Private Sub Workbook_Open()
Dim wmi, cpu, cpuid
  Set wmi = GetObject("winmgmts:")
  For Each cpu In wmi.InstancesOf("Win32_Processor")
   cpuid = cpuid + cpu.ProcessorID
[bold]   Next [/bold]
If cpuid = BFEBFBFF000306C3 Then
MsgBox " Kayıtlı Kullanıcı Olduğunuz İçin Teşekkür Ederiz."
Exit Sub
Else
UserForm1.Show
End If
End Sub
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Sayın TR bu numara sanırım sabit çıkıyor. Farklı bilgisayarlarda deneyip öyle kullanın.
 
Katılım
29 Kasım 2008
Mesajlar
70
Excel Vers. ve Dili
Microsoft 2010
Yardım için teşekkür ederim. BFEBFBFF000306C3 kendi bilgisayarımın Cpu numarası o yüzden kayıtlı makroyu denemek için yazmıştım. Açılışta değil de buton ile denediğinizde de aynı seri numara mı çıkıyor ?
 
Katılım
31 Aralık 2014
Mesajlar
1,845
Excel Vers. ve Dili
Excel 2010
Merhaba
BFEBFBFF000306C3 ifadesi yukarıdaki kodlarınızda değeri "empty"
tırnak içine alınmalı.
If cpuid = "BFEBFBFF000306C3" Then
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
İşyerinde denemiştim aynı numarayı verdi. Şimdi evde denedim. Farklı numara verdi.
Bence ojinale yakın olması adına CPU Seri numarası (Harflerden oluşuyor genelde) ile HDD seri numaraı karışımı bir kombinasyon yaparak 4 er haneli 16 veya 20 karakterli bir seri oluşturabilirsiniz. Windowsta olduğu gibi.
 
Katılım
29 Kasım 2008
Mesajlar
70
Excel Vers. ve Dili
Microsoft 2010
Aslında bu kodla yapmak istediğim işlem üzerinde uğraşıyorum fakat bir türlü istediğimi yapamadım şöyleki;

Dosya açılışında,
Kod:
Private Sub Workbook_Open()
Dim wmi, cpu, cpuid
  Set wmi = GetObject("winmgmts:")
  For Each cpu In wmi.InstancesOf("Win32_Processor")
   cpuid = cpuid + cpu.ProcessorID
[bold]   Next [/bold]
If cpuid = BFEBFBFF000306C3 Then
MsgBox " Kayıtlı Kullanıcı Olduğunuz İçin Teşekkür Ederiz."
Exit Sub
Else
UserForm1.Show
End If
End Sub
Kodu ile Cpu id'sini sorgulatıp hazırladığım UserForm da bulunan TextBox1'de görüntülenmesini sağlamak ve "if cpuid= "" Then " kodu yerine "if TextBox1.Text Cpuid " ve TextBox2'deki değer örneğin; Cpu id'si + 90 ise dosya çalışsın, değil ise Kayıtsız Kullanıcı vs tarzında bir mesaj ile UserForm açılmaya zorlansın, UserForm açılmaz işlem iptal edilmek istenirse dosya komple kapansın.

Tekrar bir mesaj yazmak yerine diğer bir sorumu da buradan sorayım;
TextBox'lara girilen değeleri istediğimiz herhangi bir hücreye vs kaydedebiliyoruz, girdiğimiz değerin kaydet dediğimizde TextBox'ta kalmasını nasıl sağlayabiliriz. Yalnız koşullu bir kayıt butonu olacak, şart: cpuid + belirleyeceğim bir değer örneğin: cpuid + 90 ise kaydedecek değilse hata verecek ve dosya her açılışında Textbox içerisinde kalacak.
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Hücreye yaxdırıyorsanız ya da bir değere koşula göre ondan çekebilirsiniz. İsterseniz örneğinizi buraya eklerseniz sabah bakayım.
 
Katılım
29 Kasım 2008
Mesajlar
70
Excel Vers. ve Dili
Microsoft 2010
Aşağıdaki çalışma dosyasının açılışında HDD serial no sorgusu bulunmaktadır. (CPU serial numarasına matematiksel işlem yaptıramadığım için bunu tercih ettim.)
HDD serial no makro içerisinde yer almaktadır ve bu koşul doğrultusunda dosya kullanıma izin vermektedir.

Bir adet userform hazırlanmıştır ve TextBox1'de HDD serial no gösterilmektedir. TextBox2'ye HDD serial numarasına matematiksel bir işlem sonucunda elde edilen değerin girilmesi zorunlu kılınmıştır.
TextBox3 bilgi amaçlıdır ve işlemler tamamen bitip nihai sonuca ulaşıldığında kaldırılacaktır.

Yapılmak istenilen:
Dosya açılışında makro içerisindeki HDD serial no sorgusu yerine, HDD serial no TextBox1'e yazdırılıp eğer TextBox2 içerisindeki değer TextBox1'de yer alan HDD serial numarasının *90 katı ise (bu işlem çeşitlendirilebilir; çarpma, toplama, tekrar çarpma vs şeklinde) açılışa izin verecek değil ise userform açılacak.
Userform üzerindeki TextBox2'ye doğru sonuç girilip kaydet dendiğinde, girilen değer sürekli kayıtlı kalacak. Amaç: Her açılışta bu değeri sorgulayacağı için her kullanımda lisans kaydı istenmesin.

Hücre içerisine veya başka bir yere kaydolacak değer görülebileceğinden böyle bir mantık yürüttüm, bir kaç yöntem denedim fakat üstesinden gelemedim. İlgilenip yardımcı olacak herkese çok teşekkür ederim.

Not: HDD serial numarasının başında bulunan "-" işaretini iptal etmenin bir yolu varmıdır ? Var ise nasıl bir kod ile o kısmı iptal edebiliriz.
Hazırlanan Dosya: Buradan İndirebilirsiniz.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
.........
Not: HDD serial numarasının başında bulunan "-" işaretini iptal etmenin bir yolu varmıdır ? Var ise nasıl bir kod ile o kısmı iptal edebiliriz.
......
Merhaba.

Bu tür konularda hiç bilgim yok ancak
eğer HDD Seri Numarasının ilk karakteri her zaman "-" işareti ise aşağıdaki şekilde olabilir.
(bu "-" işareti olmayabiliyorsa; If.... şeklindeki bir kod satırıyla aşağıdakine benzer şekilde halledebilirsiniz.)
.
Kod:
[FONT="Arial Narrow"]TextBox1.Text = Mid(Surucu.SerialNumber, 2, Len(Surucu.SerialNumber) - 1)[/FONT]
 
Üst