Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual Basic => Konuyu başlatan: OG - 21 Nisan 2006, 00:58:24

Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 00:58:24
Bu tür dökümanları toplayabileceğimiz bir başlık.
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:00:18
Alıntı Yap
REGEDİT hakkında biraz bilgi
REGISTRY (REGEDIT)

Windows'un çalışmasında birinci sırada önem taşıyan dosyalardan birisi de Registry olarak bilinen kayıt veritabanıdır. Burada, kurulu yazılım ve donanımın yani sıra kullanıcıların bireysel ayarları hakkında da gerekli bilgiler saklanır.
Eğer Windows'u hızlandırmak istiyorsanız yolunuz mutlaka Registry'den de geçecektir. Artık ihtiyaç duyulmayan kayıtların temizlenmesi de sisteminize hız konusunda artılar getirir. Ancak sonuçlarından kesin olarak emin değilseniz Registry'de değişiklik yapmamaya dikkat etmelisiniz. Sistem kayıtları yani Registry, "System.dat" ve "User.dat" adı altında iki dosyadan oluşur. İlk dosyada sistemden alınan bilgiler, ikinci dosyada ise bireysel kullanıcı profili saklanır. Registry'yi oluşturan her iki dosya da sabit diskinizde Windows klasörü altında bulunur. Bu dosyalar gizli olarak belirtildikleri için default ayarları kullanarak Windows Gezgini ile klasöre göz attığınızda görünmezler. Ancak aşağıdaki işlemleri yaparak bu ve diğer bütün saklı dosyaları görünür hale getirebilirsiniz.
1- Önce Windows Gezgini'nde "Görünüm" menüsü altında yer alan "Klasör Seçenekleri..." ne tıklayın. (Windows Me'de ise Klasör Seçeneklerine Denetim Masası'ndan ulaşabilirsiniz)

2- Daha sonra açılan pencerede "Görünüm" kartına tıklayın ve listede "Gizli Dosyalar" altında yer alan "Tüm dosyaları göster" seçeneğini aktif hale getirin.

Windows'un güçlü ama tehlikeli kayıt düzenleyicisi ile çalışmak Eğer bu dosyaları normal bir metin düzenleyicisi ile açmak isterseniz karşınıza sadece karmaşık ve tanımlanamayan işaretler çıkacaktır. Kayıt veritabanının özel görüntüleme biçimine ise sadece Windows tarafından özel olarak geliştirilmiş düzenleyici ile ulaşabilirsiniz. Ancak bu araç, hatalı kullanımlarda gerçekten Windows için tehlike oluşturabileceğinden Microsoft tarafından gözlerden saklanmıştır. Dolayısıyla çalıştırmak için "Başlat" menüsünden "Çalıştır..."i kullanmanız gerekecektir.

Karşınıza çıkacak alana Win98/Me için regedit, Windows NT/2000 için ise regedit32 yazın ve "Tamam" tuşuna tıklayın.

Bu düzenleyicinin yapısının Windows Gezgini'ne büyük benzerlik gösterdiğini hemen fark edeceksiniz. Burada pencere iki bölümden oluşur. Sol pencerede kayıtların ana sütunu ve sağ pencerede ise bir kayda ait olan daha doğrusu alt bölümlere ait olan verileri görebiliriniz. Windows terminolojisinde bu bölümler "Anahtar" olarak adlandırılır. Bu tür bir anahtarın önünde yer alan artı işaretine tıklayarak diğer alt anahtarlara ulaşabilirsiniz. Böylelikle kompleks bir yapıya sahip kayıt veritabanının temellerine ulaşabilir ve kayıtları silip yenilerini de ekleyebilirsiniz. Örnek olarak Windows'a önceden girdiğiniz kullanıcı adini değiştirmek aşağıdaki adımları izleyerek değiştirebilirsiniz.

1- Önce yukarıda anlatıldığı gibi kayıt düzenleyicisini (Regedit) başlatın.
2- Daha sonra sırayla "HKEY_LOCAL_MACHINE" ana anahtarı altında yer alan "Software", "Microsoft" ve son olarak da "Windows" anahtarlarının önündeki artı (+) işaretine tıklayın.
3- Fare ile "Current Version" anahtarına tıklayın.
4- Gezginin sağ penceresinde "RegisteredOwner" tanımını arayın. Burada Windows'un başlatılması sırasında tanımladığınız adi bulacaksınız.
5- Bu adin üzerine çift tıkladığınızda küçük bir pencere açılır. Bu penceredeki alana yeni adi girebilirsiniz.
Kayıt düzenleyicisi ile çalışırken her zaman bir işlemi yapmadan önce 2 kere düşünün. Çünkü burada yapılacak hatalar oldukça tehlikelidir ve kayıt düzenleyicide bir işlemi gerçekleştirdiyseniz bir daha geriye dönüş yoktur. Bu da yanlışlıkla bir anahtar sildiğinizde artık onu ömür boyu unutabilirsiniz anlamında gelir. Düzenleme yaparken de her şey eski kayıtlar üzerine zamanlı olarak yazılır. Dolayısıyla bir hata durumunda eskisini geri yükleme gibi bir şansınız hiç yoktur. Son olarak hiç bir zaman da bir yanlış yaptığınızı anlama şansınız yoktur. Kayıt düzenleyici bu konuda hiçbir uyarı vermez. Sonuçları görmek için tek şans bilgisayarı bastan başlatmaktır. Ancak bu durumda da eğer daha önce yaptığınız giriş hatalı ise sistem bir daha açılmayabilir.

Kayıt içinde aradığınız bir anahtara hızlı bir şekilde ulaşılması
Bilgisayarınıza kurmuş olduğunuz yazılım ya da Windows ile bir özelliği değiştirmek için kullanacağınız anahtarların Registry içindeki tam yerini bilmiyorsanız aratıp kolayca bulabilirsiniz. Ancak özellikle yavaş bir sisteme sahipseniz bu arama işlemi oldukça uzun zaman alabilir. Ayrıca değiştirmeden önce bulduğunuz anahtarın aradığınız olup olmadığına da iyice emin olmanız gerekir. Arama yapabilmek için kayıt editörünü çalıştırdıktan sonra Düzen menüsünden Bul seçeneğine tıklayın (Ctrl - F kısa yolunu da kullanabilirsiniz).
Açılacak pencerede aranan alanına aradığınız anahtar kelimeyi yazın. Bakılacaklar kısmında is aramanın nerede gerçekleştirilmesini istiyorsanız o seçenekleri işaretleyin. Daha sonrada Sonrakini bul tuşuna basarak aramayı başlatabilirsiniz. Aradığınız sonuca ulaştıktan sonra, başka benzer anahtar olup olmadığını kontrol etmek için ise yine düzen menüsünden ulaşıp bu sefer Sonrakini Bul seçeneğini seçebilir ya da F3 kısa yol tuşunu kullanabilirsiniz.
Örneğin bilgisayarınızda daha önceden yüklü bir yazılımı bilgisayarınızdan kaldırıp, ilgili tüm parçalarını da sildiğinizi farz edin. Ancak bilgisayarınızı buna rağmen ilgili referansların halen Registry'de yer aldığını iddia ediyor ve hata veriyor. Üstelik bu kaydın Registry'nin neresinde olduğunu da bilmiyorsunuz. İşte bu durumda Registry'de programın ismi ile ilgili aramalar yapıp ilgili aramalar yapıp ilgili anahtarları bulup silmeyi deneyebilirsiniz. Eğer bulduğunuz sol tarafta ise yer alan bir anahtar yada bir değer ise güvenle silebilirsiniz.
Tabii ki bu işlemi yapmadan önce kaydın bir yedeğini almayı unutmayın. Ayrıca çok fazla değer silmeden önce arada bilgisayarı bastan başlatıp sorunun giderilip giderilmediğini kontrol etmekte de faydalı olacaktır. Eğer problem daha da büyüdüyse yedeğinden Registry'i geri yükleyip başka bir anahtar silmeyi deneyin.
Karışık gözükse de aslında Registry oldukça düzenlidir.
Window'un kayıt veritabanı basta "HKEY_CLASSES_ROOT" olmak üzere altı ana anahtardan oluşur.
HKEY_CLASSES_ROOT Sürükle bırak işlemleri ile ilgili yazılım ayarları, kısa yol ve tüm diğer kullanıcı ara birimi ile ilgili bilgileri içerir. Burada ilişkilendirilmiş her dosya için bir alt anahtar daha bulunur.

HKEY_CURRENT_USER O an oturumu açık onun kullanıcı ile ilgili bilgileri içerir. Burada 7 alt anahtar daha bulunur.
AppEvents: Sistem ve uygulamalarda kullanılmak üzere atanmış sesler ile ilgili ayarlar burada yer alir.
Control Panel: Burada Windows 3.x'deki System.i ni, Win.ini ve Control.ini dosyalarının içeriğine benzeyen denetim masası ayarları yer alir.
InstallLocationsMRU: Başlangıç klasöründe yer alan programların sabit diskteki yollarını belirler.
Keyboard layout: O an kullanılan klavye düzenine buradan da ulaşılabilir.
Network: Ağ bağlantı bilgileri burada yer alır.
Remote Access : Eğer çevirmeli ağ üzerinde ağ bağlantısı kullanılıyorsa o anki bağlantı bilgileri burada bulunur.
Software: Bilgisayara bağlı kullanıcının yazılım konfigürasyon ayarlarına buradan ulaşılabilir.

HKEY_LOCAL_MACHINE Her kullanıcı için ayni olan bu değerler bilgisayarda yer alan donanım ve yazılım ayarları üzerine bilgiler içerir. bu anahtarın altında da 7 alt anahtar bulunur.
Config: konfigürasyon bilgileri ve ayarlarına buradan ulaşmanız mümkün.
Enum: Donanım aygıt bilgi ve ayarları burada bulunur.
Hardware: Seri bağlantı noktaları ile bilgiler ve ayarları içerir.
Network: Kullanıcının o an bağlı bulunduğu ağ yada ağlar üzerine bilgiler burada bulunur.
Security: Ağ güvenlik ayarlarına buradan ulaşılabilir.
Software: Yazılımlara has özel bilgiler ve ayarları içerir.
System: Sistem başlangıç ve aygıt sürücüleri bilgileri ile işletim sistemi ayarları burada yer alır.
HKEY_USER İşletim sistemlerine bağlanan her kullanıcı için masaüstü ve kullanıcı ayarlarını içerir. Bu başlık altında her kullanıcıya ait bir anahtar daha bulunur. Ancak sadece tek bir kullanıcı varsa, bu durumda sadece "default" altında tek anahtar olacaktır.
HKEY_CURRENT_CONFIG HKEY_LOCAL_MACHINE ile bağlantılı olarak o anki donanım konfigürasyonu ile ilgili bilgileri içerir.
HKEY_DYN_DATA Bu anahtar Windows'un çalışması sırasında sık değişen veri kavramının anahtarını oluşturur. Bir USB aygıt bağladığınızda yada sistem çalışırken yapabileceğiniz bir değişiklikte Registry'nin bu alanındaki veriler değişir


Registry'nin bakımı ve yedeklenmesi
Registry Windows'un sorunsuz olarak çalışması için kaçınılmaz bir ihtiyaçtır. Bu yüzden işletim sistemi her gün sistemin çalıştırılmasıyla birlikte bir güvenlik kopyası alır. Bu güvenlik dosyası Windows klasörleri içerisinde gizli bulunan "Sysbckup" klasöründe bulunur. Güvenlik dosyası otomatik olarak paketlenir ve "rbxxx.cab" biçimine getirilir (burada xxx duruma göre değişen üç basamaklı bir sayıdır . Buna ek olarak Windows bu Backup dosyalarından beş tanesini de arşivler.İsterseniz Registry'de bir değişiklik yaptıktan sonra bunu geri alabilmek için bu güvenliği kendinizde yaptırabilirsiniz. Bunun için Başlat > Programlar > Donatılar > Sistem Araçları menüleri altında yer alan "Sistem Bilgisi" ni çalıştırın. Daha sonrada burada "Araçlar" menüsünde yer alan "Kayıt Tarayıcı" sini çalıştırın. Windows başlangıçta otomatik olarak güvenlik sağladığı için işlemin sonunda tekrar yedekleme yapmak isteyip istemediğinizi sorar. Eğer bu soruyu doğrularsanız Windows güncel kayıt veritabanının yedeğini saklayacaktır. Bu güvenlik yöntemine ek olarak kullana bileceğiniz bir başka seçenek de Kayıt Düzenleyicisi altında Export fonksiyonudur. Bu işlemi gerçekleştirebilmek için "Kayıt" menüsünden "Kayıt dosyası ver" seçeneğine tıklayın. Dosya adi ve saklanacağı konumu isteğinize göre belirleyebilirsiniz. Eğer ikinci bir sabit disk'iniz varsa bunu hedef olarak kullanabilirsiniz. Eğer bir CD yazıcınız varsa CD!leri yedekleme ortamı olarak kullanmak tabi ki çok daha iyi olacaktır. Ancak bir disket bu işlem için yeterli olmayacaktır. Çünkü kayıt veritabanının boyutu genellikle Megabyte'larca büyükte olabilir. Bu yüzden Windows'un otomatik olarak "Sysbckup" klasörüne yerleştirdiği güvenlik dosyası büyük şans oluşturur. Ancak sadece büyük kayıt veritabanı bir disketin kapasitesini aşacaktır.
Kayıt dosyasının çalışmasında sorunlar ile karsılaştığınızda ve bu yüzden zor durumda kaldığınızda bu güvenlik kopyalarından birini geri yüklemek için bilgisayarınızı DOS kipinde başlatmanız gerekir. Win95 ve Win98 işletim sistemlerinde bunu "Başlat" ve "Bilgisayarı Kapat" menülerinden gerçekleştirebilirsiniz. Ancak Windows Me sürümünde açılış disketine ihtiyacınız olacak. DOS-Prompt karşınıza geldiğinde scanreg/restore yazın. Simdi karşınıza Windows'ta yer alan güvenlik kaydından seçim yapacağınız bir ekran gelir. Yeni kayıt veritabanını oluşturacağınız güvenliği seçin. Eğer kayıt düzenleyicisinde bir kayıt dosyası kaydettiyseniz bunu ayni sekilde alabilirsiniz. Yukarıda anlatıldığı gibi Windows'un "Kayıt Düzenleyici" sini çalıştırın ve "Kayıt" menüsünden "Kayıt Dosyası Al"ı seçin. Dosyayı kaydettiğiniz klasörü ve dosya adini belirterek kayıt dosyasını Registry'e geri almış olursunuz.
Sistem performansının artırılması için kayıt dosyasının düzenlenmesi

Kayıtta saklanan verilerin artısı dosya boyutunun artmasını da beraberinde getirir. Bilgisayarınıza kurduğunuz ek donanımlar, yazılımlar ve sürücüler arkanızda kalan veriler ile iz bırakırlar. gerektiği gibi yerine getirilen bir program kaldırma sonrasında veri çöplüğü oluşturacaktır. Bu gereksiz kayıtların aranıp bulunması ve kayıt düzenleyicisi yardımıyla silinmesi çok zahmetli bir işlemdir. Ancak tüm bunlar özellikle bu işlem için hazırlanmış yazılımlar ile kolay ve hızlı bir biçimde gerçekleştirilebilir. Internet üzerinden Registry Cleaner başlığı altında bu tür ücretsiz Freeware ve ücretli Shareware olmak üzere sayısız programa ulaşmak da mümkündür. Bazı programlar gereksiz kayıtların otomatik olarak silinmesinin yani sıra kayıt dosyasının daha konforlu düzenlenmesi için ek fonksiyonlarda sunuyorlar. Bazı programlar ise kayıt veritabanını bastan oluşturabiliyorlar. Tabi ki bu tür programlar çok işlevli olmaları sayesinde de bir üstünlük sağlıyorlar. Kayıt dosyasını bastan oluşturmak için isterseniz Windows'un dahili araçlarına da başvurabilirsiniz. Windows 95'de kayıt düzenleyicisini çalıştırın ve kayıt veritabanını kaydedin. Daha sonra sistemi DOS kipinde başlatın. Komut satırına regedit /c ve ardından da kayıt dosyasının yerini, klasörünü ve dosya adini yazın. Windows 98'de ise "Başlat" menüsünden "Bilgisayarı kapat"a tıklayın. Daha sonra "MS Dos Kipinde Başlat"ı seçin.
Klasik Dos komut satırına düştüğünüzde scanreg /fix yazıp Enter'e basın. Windows Me'de sisteminde Dos kipi bulunmadığı için açılış disketi kullanmanız gerekmektedir. Daha sonraki İslamlar ise Windows 98'deki gibi gerçekleşir. Kayıt düzenleyici programlar olan Registry Cleaner'larin ise Windows ortamında çalışması gibi bir avantajı vardır ve Undo (Geri Al) seçenekleri ile daha güvenlidirler. Ancak yinede tekrar dikkatli olmanızı tavsiye ediyoruz. Her türlü güvenlik tedbirini almadan işlemlere başlamayın.
Çeşitli Windows problemlerine registry ile çözüm bulabilirsiniz
Windows veri kayıt tabanı üzerinde işlem yapan programların çoğu genel registry problemleri yada performans artırıcı bazı tedbirler üzerinde dururlar. Eğer daha spesifik problemlere çözüm arıyorsanız bu durumda kayda müdahale edip gerekli anahtarları elle değiştirmeniz gerekecektir. Bu şekilde normal kullanımda herhangi bir araç ile düzeltemeyeceğimiz ayarları düzeltebilir ve çalışması gerektiği gibi çalışmayan programlar ile araçlar için de çözüm üretebilirsiniz. En sik rastlanan sorunlar için aşağıdaki kısa ipuçlarına bir göz atin. Tabi ki anlatılan değişiklikleri yapmadan önce registry'nizin mutlaka bir yedeğini almayı unutmayın.

1- Registry'i sıkıştırmak
Eğer sizin bilgisayarınızdaki kayıt dosyası da çok fazla yer kaplıyorsa onu biraz daha kompakt bir hale sokmak isteyebilirsiniz. Bunun için öncelikle bilgisayarınızı gerçek DOS modunda başlatmanız gerekir. Windows altındaki DOS modu ise yaramayacaktır. Daha sonra regedit'i çalıştırıp kayıt dosyası ver seçeneği ile o anki kaydı örnek olarak Compact.reg adi altında kaydedin. Daha sonra regeditten çıkın ve "regedit /c compact.reg" (tırnaksız olarak) parametreleri ile çalıştırın. Sıkıştırma gerçekleşecektir.
2- Bir kayit anahtarinin otomatik olarak silinmesi
Normal olarak bir reg dosyasından registry anahtarını otomatik olarak silemezsiniz. Ancak bunun içinde bir yol bulunmaktadır. Ana anahtarın hemen basında yer alan parantezler içine bir eksi (-) işareti koymak yeterli olacaktır. Örneğin eğer HKEY_LOCAL_MACHINESoftwareMicrosoftOffice8.0CommonAssistans anahtarını silmek istiyorsanız anahtarı -HKEY_LOCAL_MACHINESoftwareMicrosoftOffice8.0CommonAssistans seklinde değiştirin. Sonuç olarak o ve altındaki diğer tüm alt anahtarlar da silinecektir.
3- Sabitdiskinizi başka bir bilgisayara taşımak
Eğer bilgisayarınızdaki sabit diskinizi donanımları tamamen farklı başka bir bilgisayara taşıdıysanız, daha sonradan sistemi başlatmanız sırasında problemleri ile karşılaşabilirsiniz. Bunu engellemek için önceden aygit yöneticisinden aygıtları kaldırmanız gerekir. Tek tek elle yapmaktansa regedit'i kullanabilirsiniz. Önce regedit'i çalıştırın ve HKEY_LOCAL_MACHINE anahtarına gidin. Buradaki Enum bölümünü sildiğinizde donanımlara ait tüm ayarlarda silinecektir.
4- CD'lerin Autorun sorunlarını çözümlemek
Bilgisayarınıza taktığınız Cd'leriniz artık otomatik başlama özelliğine cevap vermiyorsa ve gereken tüm ayarları değiştirmenize rağmen bir fayda sağlamadıysanız çözümü registry'de bulabilirsiniz.
Bunun için kayıt içinde HKEY_CURRENT_USERSSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer anahtarına ulaşın ve buradaki NoDriveTypeAutoRun'in değerinin 95 00 00 00 olduğundan emin olun değilse değiştirin. Sorun düzelecektir.
5- Başlat menülerinin açılış hızlarını değiştirmek
İşletim sistemi üzerinde Başlat menüsünde gezinirken alt menüler belli bir süre sonra otomatik olarak açılacaktır. Ancak alt menülerin eğer sadece tıkladığınızda açılmasını istiyorsanız bu düzenlemeyi de registry altından yapabilirsiniz. Bunun için Registry içinde HKEY_CURRENT_USERControl PanelDesktop anahtarı altına gelin. Burada sağ tarafta MenuShowDelay seklinde bir dize bulunması gerekir. Eğer yoksa yeni bir tane oluşturun ve değer olarak da 65534 yazın. Artık siz tıklamadan hiçbir menü açılmayacaktır. Bu değeri sıfır (0) yaptığınız takdirde ise menüler hiç beklemeden açılacaktır.
Artık Registry'den Korkmayın

İşletim sisteminizin beyni olarak nitelendirebileceğimiz registry'de oluşan problemler Windows'un hafıza ya da fonksiyon kaybına uğramasına yol açabilir. Bu yüzden registry korkunuzu yenip, tüm özelliklerini öğrenerek gerekli durumlarda müdahale edebilir hale gelmeniz gerekir. İşte size fırsat!
Sistem performansının artırılması için kayıt dosyasının düzenlenmesi
Kayıtta saklanan verilerin artışı dosya boyutunun artmasını da beraberinde getirir. Bilgisayarınıza kurduğunuz ek donanımlar, yazılımlar ve sürücüler arkanızda kalan veriler ile iz bırakırlar. Gerektiği gibi yerine getirilen bir program kaldırma işlemi sonucunda gereksiz duruma gelen kayıtlar silinir ancak yanlış gerçekleştirilen bir program kaldırma sonucunda veri çöplüğü oluşacaktır. Bu gereksiz kayıtların aranıp bulunması ve kayıt düzenleyicisi yardımıyla silinmesi çok zahmetli bir işlemdir. Ancak tüm bunlar özellikle bu işlem için hazırlanmış yazılımlar ile kolay ve hızlı bir biçimde gerçekleştirilebilir. Internet üzerinde Registry Cleaner (Kayıt düzenleyiciler) başlığı altında bu tür ücretsiz Freeware ve ücretli Shareware olmak üzere sayısız programa ulaşmak da mümkündür.

Bazı programlar gereksiz kayıtların otomatik olarak silinmesinin yanı sıra kayıt dosyanın daha konforlu düzenlenmesi için ek fonksiyonlar da sunuyorlar. Bazı programlar ise kayıt veritabanını
baştan oluşturabiliyorlar. Tabi ki bu tür programlar çok işlevli olmaları sayesinde de bir üstünlük sağlıyorlar. Kayıt dosyasını baştan oluşturmak için isterseniz Windows'un dahili araçlarına da başvurabilirsiniz. Windows 95'de kayıt Düzenleyicisini çalıştırın ve kayıt veritabanını kaydedin. Daha sonra sistemi DOS kipinde başlatın. Komut satırında regedit /c ve ardından da kayıt dosyasının yerini, klasörünü ve dosya adını yazın. Windows 98'de ise "Başlat" menüsünden "Bilgisayarı Kapat" a tıklayın. Daha sonra "MS-DOS kipinde başlat"ı seçin. Klasik DOS komut satırına düştüğünüzde scanreg /fix yazıp Enter'a basın. Windows Me'de de sisteminde DOS kipi bulunmadığı için açılış disketi kullanmanız gerekecektir. Daha sonraki işlemler ise Windows 98'deki gibi
gerçekleştirilir. Birazdan tanıtacağımız Registry-Cleaner'ların ise Windows ortamında çalışması gibi bir avantajı vardır ve Undo seçenekleri ile daha güvenlidirler. Ancak yine de tekrar dikkatli lmanızı tavsiye ediyoruz. Her türlü güvenlik tedbirini almadan işlemlere başlamayın.



Çeşitli Windows problemlerinize registry'i ile çözüm bulabilirsiniz
Windows kayıt veritabanı üzerinde işlem yapan programların çoğu genel registry problemleri ya da performans artırıcı bazı tedbirler üzerinde dururlar. Eğer daha spesifik problemlere çözüm arıyorsanız bu durumda kayda müdahale edip gerekli anahtarları elle değiştirmeniz gerekecektir. Bu şekilde normal kullanımda herhangi bir araç ile düzeltemeyeceğiniz ayarları düzeltebilir ve çalışması gerektiği gibi çalışmayan programlar ile araçlar için de çözüm üretebilirsiniz. En sık rastlanan sorunlar için aşağıdaki kısa ipuçlarına bir göz atın. Tabi ki anlatılan değişiklikleri yapmadan önce registry'nizin mutlaka bir yedeğini almayı da unutmayın.

1.Registry'yi sıkıştırmak: Eğer sizin bilgisayarınızdaki kayıt dosyası da çok fazla yer kaplıyorsa onu biraz daha kompakt bir hale sokmak isteyebilirsiniz. Bunun için öncelikle bilgisayarınızı gerçek DOS modunda başlatmanız gerekir. Windows altındaki DOS modu işe yaramayacaktır. Daha sonra regedit'i çalıştırıp Kayıt dosyayı ver seçeneği ile o anki kaydı örnek olarak COMPACT.REG adı altında kaydedin. Daha sonra regedit'den çıkın ve REGEDIT /C COMPACT.REG parametreleri ile tekrar çalıştırın. Sıkıştırma gerçekleştirilecektir.

2.Bir kayıt anahtarının otomatik olarak silinmesi: Normal olarak bir reg dosyasından registry anahtarlarını otomatik olarak silemezsiniz. Ancak bunun için de bir yol bulunmaktadır. Ana anahtar'ın hemen başında yer alan parantezler içine bir eksi (-) işareti koymak yeterli olacaktır. Örneğin eğer HKEY_LOCAL_MACHINE SoftwareMicrosoftOffice 8.0CommonAssistants anahtarını silmek istiyorsanız anahtarı [-HKEY_ LOCAL_ MACHINESoftwareMicrosoft Office8.0CommonAssistants] şeklinde değiştirin. Sonuç olarak o ve altındaki diğer tüm alt anahtarlar da silinecektir.

Windows'un çalışmasında birinci sırada önem taşıyan dosyalardan birisi de Registry olarak bilinen kayıt veritabanıdır. Burada, kurulu donanım ve yazılımın yanı sıra kullanıcıların bireysel ayarları hakkında da gerekli bilgiler saklanır. Eğer Windows'u hızlandırmak istiyorsanız yolunuz mutlaka Registry'den de geçecektir. Artık ihtiyaç duyulmayan kayıtların ara sıra temizlenmesi de sisteminize hız konusunda artılar getirir. Ancak sonuçlarından kesin olarak emin değilseniz Registry'de değişiklik yapmamaya dikkat etmelisiniz. Sistem kayıtları yani Registy, "System.
dat" ve "User.dat" adı altında iki dosyadan oluşur. İlk dosyada sistemden alınan bilgiler ikincisinde ise bireysel kullanıcı profili saklanır. Registry'yi oluşturan her iki dosya da sabit diskinizde Windows klasörü altında bulunur. Bu dosyalar gizli olarak belirtildikleri için default ayarları kullanarak Windows Gezgini ile klasöre göz attığınızda görünmezler. Ancak aşağıdaki işlemleri yaparak bu ve diğer tüm saklı dosyaları görünür hale getirebilirsiniz.



1. Önce Windows gezgininde "Görünüm" menüsü altında yer alan "Klasör seçenekleri..."ne tıklayın.
2. Daha sonra açılan pencerede "Görünüm" kartına tıklayın ve listede "Gizli Dosyalar" altında yer alan "Tüm dosyaları göster" seçeneğini aktif hale getirin
3.Sabit diskinizi başka bir bilgisayara taşımak: Eğer bilgisayarınızdaki sabit diskinizi donanımları tamamen farklı başka bir bilgisayara taşıdıysanız, daha sonradan sistemi başlatmanız sırasında problemleri ile karşılaşabilirsiniz. Bunu engellemek için önceden aygıt yöneticisinden aygıtları kaldırmanız gerekir. Tek tek elle yapmaktansa regedit'i kullanabilirsiniz. Önce regedit'i çalıştırın ve HKEY_LOCAL_ MACHINE anahtarına gidin. Buradaki Enum bölümünü sildiğinizde donanımlara ait tüm ayarlar da silinecektir.

4.CD'lerin autorun sorununu gidermek: Bilgisayarınıza taktığınız CD'leriniz artık otomatik başlama özelliğine cevap vermiyorsa ve gereken tüm ayarları değiştirmenize rağmen bir fayda sağlayamadıysanız çözümü registry'de bulabilirsiniz. Bunun için kayıt içinde HKEY_CURRENT_ USERSSoftwareMicrosoftWindows CurrentVersionPoliciesExplorer anahtarına ulaşın ve buradaki NoDriveTypeAutoRun'ın değerinin 95 00 00 00 olduğundan emin olun. Sorun düzelecektir.

5.Başlat menülerinin açılış hızını değiştirin: İşletim sistemi üzerinde Başlat menüsünde gezinirken alt menüler belirli bir süre sonra otomatik olarak açılacaktır. Ancak alt menülerin eğer sadece tıklandığında açılmasını istiyorsanız bu düzenlemeyi de registry altından yapabilirsiniz. Bunun için registry içinde HKEY_CURRENT_USERControl Panel Desktop anahtarı altına gelin. Burada
sağ tarafta MenuShowDelay şeklinde bir dize bulunması gerekir. Eğer yoksa yeni bir tane yaratın ve değer olarak da 65534 yazın. Artık siz üzerine tıklamadan hiçbir menü açılmayacaktır. Bu değeri sıfır yaptığınız takdirde ise menüler hiç beklemeden açılacaktır.

6.Program Ekle/Kaldır listesini temizlemek: Program Ekle/Kaldır özelliğini kullanarak kurulu bir programı kaldırmanıza ve sabit diskten tüm bileşenleri silmenize rağmen bazen sadece ismi listede kalabilir ve programı yeniden kurmanızı engelleyebilir. Bu durumda registry içindeki HKEY_LOCAL_MACHINE/SOFTWARE/ Microsoft/Windows/CurrentVersion/ Uninstall anahtarına başvurmanız
gerekir. Burada yer alan programlardan istediğinizi silebilirsiniz. Ancak bu işlem sadece listedeki ismi silecek ve asıl programlara dokunmayacaktır.

7.Run menüsünde istenmeyen programlar: Kurduğunuz çoğu program işletim sisteminin her başlatıldığında hafızaya yüklenmek isteyebilir. Bu yüzden de kendini Run menüsüne yazar. Ancak bu sayı artıkça açılış da gecikecektir. Açılışta istemediğiniz programları silmek için once regedit altından HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion altındaki Run ve RunServices anahtarları altında bulabilirsiniz. Daha sonra bulunan bu anahtar altındaki istenmeyen programları kaldırın. Artık Windows'u baştan başlatabilirsiniz.

8.Kayıtlı kullanıcının adını değiştirmek: Windows'un kayıtlı kullanıcısının adını değiştirmek registry altından aslında oldukça kolaydır. Bunun için sadece HKEY_LOCAL_MACHINE / SOFTWARE
/ Microsoft / Windows / CurrentVersion anahtarı altına ulaşıp Registered Owner anahtarı altındaki ismi değiştirmeniz yeterli olacaktır.

9.Masüstü ayarlarının kayıt edilmesi: Eğer Control Panel, Başlat menüsü programları ya da sıradan diğer masaüstü pencerelerin boyut, pozisyon ve simge düzeni gibi ayarları ayarladığınız gibi kalmıyorsa cevabı yine registry altında HKEY_CURRENT_ USERSoftwareMicrosoftWindows CurrentVersionPoliciesExplorer anahtarı altında bulabilirsiniz. Buada bir "NoSaveSettings" anahtarı yer almaktadır. Bunu silerek soruna çözüm üretebilirsiniz. Benzer şekilde [HKEY_USERSmahmutSoftware MicrosoftWindowsCurrentVersion PoliciesExplorer] altındaki anahtarı da silmeniz gerekebilir. (Burada mahmut kullanıcı adını belirtmektedir)

10. Outlook Express data dosyasının yeri: Normal olarak Outlook Express veri dosyalarını C:WindowsApplication DataMicrosoftOutlook Express klasörü içinde saklar. Bunu değiştirmek için öncelikle bu dosyaları başka bir klasöre kopyalayın. Daha sonra RegEdit'i başlatıp, Bul seçeneğini kullanarak Store Root anahtarını aratın. Bu dizenin değerini dosyaları daha önceden taşıdığınız klasör adıyla değiştirin.

11.Windows açılışına uyarı yazısı eklemek: Bu ilginç ipucu ile bilgisayarınızı ilk başlattığınız zaman daha oturum açmadan bir uyarı banner'ı görüntülenmesini sağlayabilirsiniz. Bunun için önce regedit'I başlatıp HKEY_LOCAL_MACHINE SOFTWAREMicrosoftWindows CurrentVersionWinLogon anahtarı altına gelin. şimdi burada LegalNoticeCaption adı altında yeni bir dize yaratmanız gerekecek. gerekecek. Bu dize'ye vereceğiniz değer menu çubuğunda görüntülenecektir. Daha sonra başka bir dize daha yaratıp bunun adını da LegalNoticeText olarak belirleyin ve ekrandaki diyalog kutusunda ne görüntülenmesini istiyorsanız yazın. Artık bilgisayarınızda kim oturum açmak isterse istesin hazırladığınız bu banner ekrana gelecektir. Bu özelliği kullanarak bilgisayarınızı izinsiz kullanmak isteyecek kişilere karşı yasal uyarılar hazırlayabilirsiniz.
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:04:37
Alıntı Yap
Sisteme active-x (ocx) kaydı
Sisteme active-x (ocx) kaydı
Visual basic ile yapılan programlarda ocx kullanmış iseniz bu programların başka bilgisayarlarda çalışması için ciddi bir sorunla karşı karşıyasınız demektir.
En iyi çözüm gibi görünen yol; programın visual basic ile gelen "setup wizard" kullanılmak suretiyle taşınmasıdır. Ki bu da gerçekte 10-100 Kb gibi küçük bir boyutta bulunan programlarınıza ek olarak 1.400 Kb boyunda çirkin bir ek demektir.
Eğer ocx'leri hedef sisteme kaydettirebilirseniz bu sorundan kurtulursunuz.
Bunun için ise kullanılan yöntemlerden biri visual basic ile birlikte gelen "regsvr32.exe" dosyasını kullanmaktır. Bu program kendisine parametre olarak verilen ocx dosyasını sisteme kayıt işlemlerini yapar. Tam kullanımı için dos satırında "regsrv32 /?" komutunu kullanabilirsiniz.
Ancak bu yöntem de -hedef bilgisayara "regsrv32.exe" dosyaının taşınması- profesyonel bir yaklaşım olmaz. Aslında her ocx içinde kendi kendini sisteme kayıt ettirme ve sistem kaydından çıkarma yordamları vardır. Bu yordamları kullanmamız gerekir.
Her ocx dosyasında; sisteme kayıt için;
DllRegisterServer Lib "Ocxismi.Ocx" () As Long
Ve sistem kaydından çıkarmak için;
DllUnregisterServer Lib "Ocxismi.Ocx" () As Long
yordamları bulunmaktadır.

Örnek olarak; visual basic grid kontrolü kullanarak yaptığımız programı başka bir bilgisayara nasıl taşıyacağımızı görelim (Bu örnekte takıldığınız konuları dökümanlar ve api örnekleri bölümünde bulabirsiniz).
1) "MsFlxGrd.Ocx" dosyasının içinde olduğu bir resource dosyası oluşturup bu dosyayı projemize dahil ediyoruz.
2) Programımız bir form ile başlamıyor. Bunun için bir modül ekleyip bu modüle bir "sub main" yordamı ekliyoruz. Project/Properties menüsünden "startup object" olarak "Sub Main'i" seçiyoruz.
3) Projeye ikinci bir modül daha ekliyoruz. Bu modülün amacı ocx'i sisteme kaydettirmek veya gerekirse silmek. Bunun için neden ikinci bir modül gerektiği konusu önemli. Çünkü biliyoruz ki "MsFlxGrd.Ocx" dosyası hedef bilgisayarda yok. Bu nedenle "MsFlxGrd.Ocx" kullandığımız her kod parçası hata verecek. Bunu önlemek için "Sub Main" yordamanın olduğu içinde "MsFlxGrd.Ocx" dosyasından hiç bir şey bulunmayan bir modül herşeyden önce çalışacak, Bizim ocx dosyamızı resource dosyadan söküp windows/system klasörüne kopyalayacak. Bundan sonra bu ocx'i sisteme kaydettirecek ve daha sonra programın ana formunu gösterecek.
"Sub Main" içinde ocx sistem klasörüne kopyalandıktan sonra Ocxkaydet fonksiyonu çağrılmalıdır. "OcxKaydet" fonksiyonu ise ikinci modül içine; aşağıdaki gibi yazılabilir.
Private Declare Function DllRegisterServer Lib _
"MsFlxGrd.Ocx" () As Long
Private Declare Function DllUnregisterServer Lib _
"MsFlxGrd.Ocx" () As Long

Sub OcxKaydet()
DllRegisterServer
End Sub

Sub OcxSil()
DllUnregisterServer
End Sub

Tekrarlamak gerekirse; program bir modül ile başlamalı, bu modülde ocx'e ihtiyaç duyan hiç bir kod parçası bulunmamalı. Bu modül ortamı hazırladıktan sonra ocx'e ihtiyaç duyan diğer modül veya formlar çalıştırılmalıdır

YORUM:
Alıntı YapUfak bir ayrıntı şayet kullandıgın ocx o bilgisayarda yoksa bu kod hıc bır ıse yaramaz, windows System32 ye gerekli ocx i koymak zorunda kalabilirsiniz, özellikle excel makro yazılımlarında offıce 2000 ile 2003 arasında uyusmayan 10 larca OCX vardır ve bunları regıstry etmek gerekbılır ama daha kısa bır yol system32 atın
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:05:44
Alıntı Yap
Bir ocx i reg e kaydetme nasıl yapılıyor
Aşağıdaki prosedür bileşenleri kod ile kayıt yapar. Regsvr32.exe yi kullanarak bu işi yapıyor:

Sub RegisterComponent(sFileName As String, Optional bUnRegister As Boolean = False, Optional bHideResults As Boolean = False)
If Len(Dir$(sFileName)) = 0 Then
'Dosya Yok
MsgBox "Unable to locate file "" & sFileName & """, vbCritical
Else
If bUnRegister Then
'Bileşen kayıtlı değil
If bHideResults Then
'Sonuşları gizle
Shell "regsvr32 /s /u " & """" & sFileName & """"
Else
'Sonuçları göster
Shell "regsvr32 /u " & """" & sFileName & """"
End If
Else
'Register a component
If bHideResults Then
'Sonuşları gizle
Shell "regsvr32 /s " & """" & sFileName & """"
Else
Sonuçları göster
Shell "regsvr32 " & """" & sFileName & """"
End If
End If
End If
End Sub
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:07:29
1-99 ARASI rakamları ses ile okutma
Alıntı Yap
" bu program visual basicde text kutularına diyelim ki 1 diğerin 2 girdik tekt3 e onu on ik diye yazar ve okut komut düğmesine tıkladığımızda onu hemem on iki diye okur güzel bir program visual basic in ayrıntılı konularını içerir NOT PROGRAMIN ÇALIŞMASI İÇİN PROJECT SEKMESİNDEN REFERENCES A TIKLAYIN BURADAN MİCROSOFT SPEECH OBJECT LİBRARY YE TIKLAYIN 3 TEXT KUTUSU VE 2 COMMAND BUTON EKLEYİNİZ ÇOK ZOR GÖZÜKSEDE ASLINDA ÇOK ÇOK BASİT HER KEZ YAPABİLİR "

'NOTTTTT PROGRAMIN ÇALIŞMASI İÇİN PROJECT SEKMESİNDEN REFERENCES A TIKLAYIN BURADAN MİCROSOFT SPEEC OBJECT LİBRARY YE TIKLAYIN 3 TEXT KUTUSU VE 2 COMMAND BUTON EKLEYİNİZ ÇOK ZOR GÖZÜKSEDE ASLINDA ÇOK ÇOK BASİT HER KEZ YAPABİLİR VE KODLARI YAPIŞTIRIN
Dim konus As New SpeechLib.SpVoice

Private Sub command2_click()

Select Case Val(Text1)
Case 1: m = "on"
Case 2: m = "yirmi"
Case 3: m = "otuz"
Case 4: m = "kırk"
Case 5: m = "elli"
Case 6: m = "altmış"
Case 7: m = "yetmiş"
Case 8: m = "seksen"
Case 9: m = "doksan"
End Select
Select Case Val(Text2)
Case 1: n = "bir"
Case 2: n = "iki"
Case 3: n = "üç"
Case 4: n = "dört"
Case 5: n = "beş"
Case 6: n = "altı"
Case 7: n = "yedi"
Case 8: n = "sekiz"
Case 9: n = "dokuz"
End Select
Text3 = m + n
End Sub

Private Sub command1_Click()

konus.Speak Text3.Text

End Sub
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:09:00
Kendi Serial Araçlarınız yapın

Alıntı Yap1. Serial Yapıcı
İlk önce kendimize serial yapma programı yapalım sizde kendi programınızdan bu dosyaya erişerek serial olarak kullanabilirsiniz.
form un üstüne 4 tane textbox ,1 tane de command koyun.

Serial Yapıcı Kod.
Private Sub Command1_Click()
s1 = Text1.Text ' değerleri atıyoruz
s2 = Text2.Text
s3 = Text3.Text
s4 = Text4.Text
If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Then ' eğer kutulardan herhangi biri boş ise
MsgBox ("Lütfen bütün boşlukları doldurunuz.") ' msj ver
Else ' değilse
Open "C:\serial.dat" For Output As #1 ' serial.dat dosyasını oluşturmak için aç
Print #1, s1' s1 değişkenine text1.text in içini atamıştık.Bunuda dosyaya Print ile yazdırıyoruz .Buraya direkt text1.text yazabilirdik
Print #1, s2
Print #1, s3
Print #1, s4
Close #1
MsgBox ("Dosya C:\... ye kaydedildi") ' işlem bittiği zaman msj yolla
End If
End Sub
2. Serial Okuyucu
Şimdi de yaptığımız seriali okuyacak bi program yapalım.
Form un üstüne 1 tane dirlistbox,1 tane filelistbox,1 tane command,4 tanede textbox koyun
Kod için:
Private Sub Form_Load()
Dir1.Path = "C:\" ' dirlistbox un dizinini C:\ olarak ayarlıyoruz
File1.Path = Dir1.Path ' filelistbox un göstereceği dosyaların dizinini dirlistbox un dizinine eşitliyoruz
File1.Pattern = "*.dat" ' filelistbox un göstereceği dosya formatı
End Sub

Private Sub Command1_Click()
On Local Error GoTo secme ' oluşacak hataları secme 'ye yolla
Open Dir1.Path & File1.FileName For Input As #1 ' dirlistbox un dizini ile filelistbox 'taki seçili dosyayı birleştirerek açar.Örn:dir1.path = "C:\mk" olsun list box ta da mk.dat dosyası seçili olsun.Bunlar birleşirse
"C:\mk\mk.dat" olur.
Line Input #1, s1 ' okuduklarını değişkenlere atar
Line Input #1, s2
Line Input #1, s3
Line Input #1, s4
Close #1
Text1.Text = s1 ' text lere okunan ları yolla
Text2.Text = s2
Text3.Text = s3
Text4.Text = s4
Exit Sub
secme: ' yukarıda da on local error goto secme yazmıştık.Hatalara karşı programı buraya yönlendiyordu.
MsgBox ("Lütfen bir dosya seçin")
Exit Sub
End Sub
Private Sub Dir1_Change()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
File1.Path = Dir1.Path
End Sub
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:11:15
PROGRAMLARINIZA UPDATE SİSTEMİ EKLEME
Alıntı Yap
" Mesela Bir Programınız Var. Ve siz bu programınızla müşterilerinizin yeni versiyonlardan haberdar etmek istiyorsunuz... OKU BENI!!!
"


En son yaptığım programda ALBATROS [ Sözlük Programı ] kullanıcıların programı her çalıştırdığında onlarla mesajlaşma olayının eksik olduğunu farkettim. Örnek olarak ben bir program indirdikten sonra eğer onun update sistemi yoksa ölsem yine aklıma gelmez update etmek. Onun için aslında bu kod biraz olsun bu olayı aza indiriyor. Kullanıcıya programın bilmem kaç sürümü çıktı bunu indirmek istermisiniz diye bir mesaj çıktığını ve Evet denildiğinde ise verilen url sayfasına yönlendirildiğini düşünelim............


KODLARA BAŞLAYALIM BUNLARI KOPYALAYIP PROJENİZİN İÇİNE YAPIŞTIRIN

Önce projemize Microsoft Internet Transfer Control Ekleyelim. Bunun için Ctrl+T tuşuna basın. Oradan Ocx dosyamızı bulun ve ekleyin.

Private Type update
Url As String
Versiyon_Me As String
Mesaj As String
M_OK As Boolean
Version_son As String
Url2 As String
End Type

Dim update As update

Private Sub Form_Load()
update.Url = "http://www.theblackcoders.com/programlar/albatros/"
update.Versiyon_Me = App.Major & "." & App.Minor & "." & App.Revision
update.M_OK = Inet1.OpenURL(update.Url & "MesajVar.txt")

If update.M_OK = True Then
update.Version_son = Inet1.OpenURL(update.Url & "version.txt")
If update.Version_son > update.Versiyon_Me Then
update.Mesaj = Inet1.OpenURL(update.Url & "Mesaj.txt")
update.Url2 = Inet1.OpenURL(update.Url & "url.txt")
MsgBox update.Url2
cevap = MsgBox(update.Mesaj, vbInformation + vbYesNo)
If cevap = 6 Then
Unload Me
Dim OpenU As Long
OpenU = Shell("explorer " & update.Url2)
End If
End If
End If
End Sub



AÇIKLAMAK GEREKİRSE ARKADAŞLAR...
Private Type update
Url As String
Versiyon_Me As String
Mesaj As String
M_OK As Boolean
Version_son As String
Url2 As String
End Type

Bunlarla bir type oluşturdum. Yani tam olarak türkçe karşılığını bilmiyorum ama oluşturdum şey aynen text1 kutusunun içeriğini nasıl text1.text ile alırsak bunuda değişkenlerin karışmaması açısından kolay geldiği için bu şekilde yaptım.

Değişkenlere bilgilerimizi ekleyelim...
update.Url = "http://www.theblackcoders.com/programlar/albatros/"
update.Versiyon_Me = App.Major & "." & App.Minor & "." & App.Revision
update.M_OK = Inet1.OpenURL(update.Url & "MesajVar.txt")

update.Versiyon_Me = App.Major & "." & App.Minor & "." & App.Revision bu kod programımızın versiyonlarını bulmamıza yarar.




If update.M_OK = True Then
update.Version_son = Inet1.OpenURL(update.Url & "version.txt")
If update.Version_son > update.Versiyon_Me Then
update.Mesaj = Inet1.OpenURL(update.Url & "Mesaj.txt")
update.Url2 = Inet1.OpenURL(update.Url & "url.txt")
cevap = MsgBox(update.Mesaj, vbInformation + vbYesNo)
If cevap = 6 Then
Unload Me
Dim OpenU As Long
OpenU = Shell("explorer " & update.Url2)
End If
End If
End If


update.M_OK ile sayfadaki içeriği aldık. Eğer 1 ise yani True ise
update.Version_son = Inet1.OpenURL(update.Url & "version.txt") son versiyonu alıyor. sonra diyorki eğer son versiyon benim projemin versiyonundan büyük ise ( Mesela benim projemin sürümü 1.0.0 olsun eğer sayfada 1.1.0 varsa son versiyon büyük olduğu için haber gelecek.. )

update.Mesaj = Inet1.OpenURL(update.Url & "Mesaj.txt") mesaj.txt dosyasından mesajı alıyor. Sonra
update.Url2 = Inet1.OpenURL(update.Url & "url.txt") ile yönlendirileceğimiz sayfanın urlsini alıyoruz. Ve son olarak
cevap = MsgBox(update.Mesaj, vbInformation + vbYesNo)
If cevap = 6 Then
Unload Me
Dim OpenU As Long
OpenU = Shell("explorer " & update.Url2)
End If

mesaj kutusunda mesajı görüntülüyoruz. Eğer cevabımız evet ise
OpenU = Shell("explorer " & update.Url2) yeni bir internet explorer geliyor ve o sayfaya yönleniyoruz...
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:13:43
Component Hazırlama
Alıntı YapBu örnekte size component dosyalarının nasıl hazırlandığını anlatacam ve artık herkes kendi component'ini yazıp dağıtabilecek. Lütfen sitede çok basit örnekler görüyoruz. Girişte parola, saat vb. Biraz daha gelişmiş örnekler gönderelim. "

Ocx projesi açıkken component'i aynı grupta ekleyemezsiniz. Yani dikkat ederseniz siz UserControl penceresini kapattığınızda Toolbox'daki component seçilebilir bir duruma gelecektir.

Formu ve Kontrolleri Uygun Hale Getirme
>>> Öncelikle Visual Basic programını çalıştırın ve "New Project ( Yeni Proje)" penceresinden ActiveX Control ‘ü seçin ve "Aç"a tıklayın. Karşınıza "UserControl1" adında bir form çıkacaktır. Ardından projemizin adını "CSaat" ve "UserControl1"in adını "Saat" olarak değiştirelim. Proje'nin adı, kaydedilen component'in adı; UserControl1'in adı ise mouse'nin imlecini Toolbox'daki nesnemizin üzerinde bekletildiğinde ToolTipText olarak yazacak olan yazıyı belirtir. ( Textbox' ın üzerinde imleç beltetildiğinde "Textbox" yazması gibi.) Önce UserControl'ün rengini kırmızı veya mavi olarak değiştirelim. Biraz sonra ekleyeceğimiz labellere de arkaplan rengine uygun bir renk seçmeliyiz. Component'imize Toolbox'da gözükecek resmi eklemek için UserControl'ün Properties penceresinden ToolboxBitmap'a tıklayın ve aşağıdaki saat resmini ekleyin. Sonra UserControl'e 2 ( iki ) adet "Label" ekleyelim ve birinin adını "cMetin", Caption'nunu "Saat", BackStyle'ını "0 – Transparent", Font'unu "Verdana", "Kalın" ve "10", diğerinin adını "Saat", BackStyle'ını "0 – Transparent", Font'unu "Verdana", "Kalın" ve "10" olarak değiştirelim. 1 ( bir ) tane de Timer ekleyelim ve adını "tmrSaat", Intreval'ını "500" olarak değiştirelim. UserControl'ü ise labellerimiz gözükecek şekilde küçültelim.

Kod Yazma
Aşağıdaki kodları UserControl'ün kod penceresine yapıştırın.


Private Sub tmrSaat_Timer()
Saat.Caption = Time 'Saat.Caption da o anki saat gösterilecek.
End Sub

Public Property Get Metin() As Variant
Metin = cMetin.Caption 'Properties - Saat bölümünden Metin özelliğinde yazılı olan metni alır.
End Property

Public Property Let Metin(ByVal vNewValue As Variant)
cMetin.Caption = vNewValue 'Eklenen özellik değiştirilebilir olacak.
End Property

OCX Dosyasını Derleme ve Kullanma
>>> OCX dosyasını derlemek için "File" menüsünden "Make CSaat.ocx…"e tıklayalım ve Make Project penceresinde projemizi derlemek istediğimiz yeri seçtikten sonra "OK" tuşuna tıklayalım. Evet, artık COMPONENT'imiz kullanıma hazır…

COMPONENT'i (OCX Dosyasını) Test Etme ve Kullanma
>>> Şimdi ise Ocx projemizi kapatalım. Sonra yeni bir "Standart EXE" projesi açalım ve Toolbox'a sağ tıklayıp "Components…"'i seçelim. Daha sonra "Browse…" tuşuna tıklayıp açılan pencereden derlediğimiz Ocx dosyasını seçelim ve açalım. Eğer bir hata yapmadıysanız Toolbox'da seçtiğimiz simgede bir component göreceksiniz ve mouse üzerine getirdiğinizde "Saat" yazacak. Artık componentimizi seçebilir ve forma ekleyebiliriz. Artık componentimiz kullanıma hazır. Bu arada "Saat" yazan labelin etiketini componentimizin Properties ( Özellikler ) ‘inde Metin olarak görebilir ve değiştirebilirsiniz. Artık siz de kendi componentinizi yazabilirsiniz. Ayrıca bu componentleri ticari amaçla kullanmak istiyorsanız deneme sürümü olan componentler bile hazırlayabilirsiniz. Eğer bunun nasıl olacağını öğrenmek istiyorsanız bana mail atın. Vaktim olursa burada yazarım. Umarım bu örnek size yardımcı olur. Bence çok güzel bir şey bu. Görüşlerinizi yazabilirsiniz.

₪₪₪ Component'imizin ToolboxBitmap'ına resmini ekleyebilirsiniz.₪₪₪
Bu kodları ve açıklamaları ismim belirtilmek şartıyla başka yerlerde yayınlayabilirsiniz.
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:15:14
VB ile GIS Uygulaması
Alıntı Yap" Coğrafi Bilgi Sistemleri "

Merhaba Arkadaşlar,

Hepinizin bildiği gibi GIS(Geograghic Information System=Çoğrafi Bilgi Sistemleri) uygulamaları; özellikle Kent Bilgi Sistemleri günümüzün en populer uygulamaları oldu ve olmaya da devam ediyor. Bunun yanında mobil uygulamalar(GPS ile), Araç takibi(Mobil ekip takibi),
İnteraktif olarak sözel veriden sayısal veriye erişim(Adres bilgi sistemleri) popüler olmaya başladı. Bu tür uygulamaların ileri seviyesi DirectX yada OpenGL ile yer şekillerini canlandırılması ve sanki orda geçiyormuş gibi her şeyin simüle edilmesi.

Bu makalemizde Visual Basic ile MapInfo uygulamasını haberleştirerek, MapInfo aracılığıyla temel GIS(Geograghic Information System) uygulamasını yapacağız. MapBasic komutları sayesinde halihazır görüntüleri seçme, yakalama, büyütme ve küçültme işlemlerini yapacağız. Ayrıca workspace dosyası yükleme ve bu workspace dosyası üzerinde bulunan bir parseli bulma ve gösterme, herhangi bir işlemeye ait, ada ve parseli bilinen bir binaya grafik ekranda ulaşabileceğiz.

Mapinfo uygulaması için kullandığımız üç komut var. Bunlar DO, EVAL, FETCH dir.
DO bir komutu çalıştırmak herhangi bir işlem yaptırmak için kullanılır.
EVAL mapinfo' dan bir değer almak için kullanılır.
FETCH kayıtlar arasında gezmek, belirli kayıtları seçmek için kullanılır.

Bu uygulamamızda MapInfo' da hazırladığımız workspace göstermek, üzerinde işlem yapmak için Picture nesnesi kullanacağız.
Bunun için aşağıdaki komutları kullanacağız:

MI.do "Set Window Info Parent " & frmGRAFIK.hwnd ' Bağlantının yapılacağı form
MI.do "Set Application Window " & frmGRAFIK.Picture1.hwnd
' Tüm işlemlerin yapılacağı nesne(Picture)

MI.do "Set Next Document Parent " & frmGRAFIK.Picture1.hwnd & " Style 1"
' MapInfo için picture nesnesini kullanacağımız belirtiyoruz

Tüm bağlantı ve uygulamaları aşağıdaki kodlarla yapacağız.
Tüm bağlantı ve kodları elimden geldiğince anlaşılabilir bir şekilde açıklamaya çalıştım.
Tüm soru ve sorunlarınız, takıldığınız yerler için bana e-mail ile ulaşabilirsiniz.


Global MI As Object ' MapInfo nesnesi
Global theResponder As Object ' MapInfo ile VB arasındaki haberleşmeyi sağlayacak nesnemiz
Global kosuyor As Boolean

Dim strfile1 As String, strfile2 As String, strfile3 As String
Dim strSQL as string


' Parsel göstermek için kullanılacak

Sub Parsel_Goster(pID As String, pADA As Long, pPARSEL As Long)
' Gösterilecek parselin İşletme ID si, Adası ve parseli parametre olarak geliyor


Workspace_Yukle (pID) ' İşletmeye ait Workspace yükleme

' İstenilen işletmenin ID, Ada, Parsele göre SQL cümlesi Sel1 geçici tablosuna atılıyor.

strSQL = "select * from PARSEL where ISLETME_ID=" & Chr(34) & pID & Chr(34) & " and " _
& "ADA = " & Chr(34) & pADA & Chr(34) & " and " & "PARSEL = " _
& Chr(34) & pPARSEL & Chr(34) & " into sel1"

MI.do strSQL ' SQL cümlemiz MI da çalıştırılıyor
MI.do "add map layer sel1" ' sel1 tablomuz haritaya ekleniyor
MI.do "set map zoom entire layer sel1" ' sel1 tablosunu ekrana sığacak şekilde zoomla
MI.do "REMOVE map layer sel1" ' sel1 i haritadan kaldır

End Sub

Sub Bina_Goster(bID As String, bADA As Long, bPARSEL As Long, bNO As Integer)
Dim z As Double

' İşletme ID, Ada, Parsel ve Bina no su verilen işletmeye ait workspace yükleniyor
Workspace_Yukle (bID)

' parametre olan gelen İşletme ID, Ada, Parsel ve Bina no ya ait SQL cümlesi çıkartılıyor
strSQL = "select * from BINA where ISLETME_ID=" & Chr(34) & bID & Chr(34) & " and " _
& "ADA = " & Chr(34) & bADA & Chr(34) & " and " & "PARSEL = " _
& Chr(34) & bPARSEL & Chr(34) & " and " & "BINA_SIRA_NO = " & bNO & " into sel2"


MI.do strSQL ' MapInfo da SQL cümlesi işleteliyor
MI.do "add map layer sel2" ' Geçici katmanımız haritaya ekleniyor
MI.do "set map zoom entire layer sel2"
' SQL in sonucunda oluşturduğumuz katman ekrana tam sığacak şekilde zoom yapılıyor
MI.do ("set distance units ""m""") ' Zoom için kullanılan ölçek Metre olarak setleniyor
MI.do "set map zoom 500 units ""m"" layer sel2 "
' Geçici katman için zoom seviyesi 500 metre olarak atanıyor
MI.do "remove map layer sel2" ' Haritadan geçici katman kaldırılıyor

End Sub


' Workspace yüklemek için kullanılılıyor
Sub Workspace_Yukle(strID As String)
Dim app_yolu As String ' Uygulanın çalıştığı path
Dim dosya_yolu As String ' Dosya yolu
Dim dosya_adi As String ' Dosya adı
Dim tabName As String ' MapInfo tablosunun adı

dosya_adi = strID & ".wor" ' Dosya adlarımızı Isletmet ID.wor şeklinde oluşturuyoruz
app_yolu = App.Path ' Uygulama yolu
strfile = app_yolu & "\data\" & strID & "\" & dosya_adi ' Dosya yolu ve adı

If Len(Trim(strfile)) > 0 Then
If FileExist(strfile, "") = True Then
If strMapinfoWorkSpace <> strfile Then ' Workspace i ikinci kez açmamak için
If strMapinfoWorkSpace <> "" Then ' Daha önce açık ise kapat
MI.do "Close All Interactive"
End If

strMapinfoWorkSpace = strfile
InitializeMapInfoConnection ' MapInfo bağlantısını başlat
Mapinfo_Run ' MapInfo yu koştur

MI.do "run application """ & strMapinfoWorkSpace & """"
frmGRAFIK.lstLayers.Clear
frmGRAFIK.tvwInfo.Nodes.Clear

Mapinfo_Run
thereIsAMap = True
kosuyor = True
End If
frmGRAFIK.Show ' MapInfo formunu goster
frmGRAFIK.tbarMain.Visible = True
Workspace_Yuklu = True ' Workspace in yuklu oldugunu tutan değişken
Else
MsgBox strfile & " Dosya Bulunamadi."
End If
End If

End Sub



' MapInfo uygulamasını koşturan prosedürümüz

Sub Mapinfo_Run()

If MI Is Nothing Then ' MapInfo uygulamsı daha önce oluşturulmamıssa olustur
Set MI = CreateObject("MapInfo.Application")
' ' Set theResponder = New mmcallback
' VB ile MapInfo arasındaki haberleşmeyi yapacak responder ı oluştur
' Şimdilik bu class ı kullanmayacağız.
InitializeMapInfoConnection ' MapInfo yu başlat
Else
InitializeMapInfoConnection
End If

End Sub


' MapInfo uygulamasını başlatmak için değişkenelri setlemek ve gerekli bağlantıları yapma
Public Sub InitializeMapInfoConnection()

frmGRAFIK.tbarMain.Buttons("Seç").Value = tbrPressed
MI.SetCallback theResponder ' Haberleşme için Responder ı çalıştır


' Sağ tuşa tıklanınca ekrana çıkan Zoom Seviyesi, Ölçü Değeri, Kursorun Koordinat düzelmindeki gerçek yeri,
' Katman Kontrolu, Tablo Aç gibi popup menu seçeneklerini oluşturma ve setleme

MI.do "Create Buttonpad ""Callback"" As Toolbutton ID 2001 DrawMode 34 Cursor 138 Calling OLE ""QueryTool"""
MI.do "Create Menu ""TitleBarMenu"" As " & _
"""!+Zoom Seviyesi"" ID 1101 Calling OLE ""HandleMenuSelection"", " & _
"""!Ölçü Değeri"" ID 1102 Calling OLE ""HandleMenuSelection"", " & _
"""!Kursör Yeri"" ID 1103 Calling OLE ""HandleMenuSelection"""
MI.do "Create Menu ""MapperShortcut"" ID 17 As " & _
"""Katman Kontrolü.."" ID 1001 Calling OLE ""HandleMenuSelection"", " & _
"""Status Barda Göster"" As ""TitleBarMenu"", " & _
"""(-"", " & _
"""Tablo Aç..."" ID 1002 Calling OLE ""HandleMenuSelection"", " & _
"""Seçili Katmanı Kapat"" ID 1003 Calling OLE ""HandleMenuSelection"""


MI.do "Create ButtonPad ""Custom Tools"" As " & _
"ToolButton ID 2001 DrawMode 34 Calling OLE ""HandleToolButton"" " & _
"ToolButton ID 2002 DrawMode 32 Calling OLE ""HandleToolButton"""


' Form ve kullanılacak Picture nesnesinin MapInfoya bağlanması
MI.do "Set Window Info Parent " & frmGRAFIK.hwnd
MI.do "Set Application Window " & frmGRAFIK.Picture1.hwnd
MI.do "Set Next Document Parent " & frmGRAFIK.Picture1.hwnd & " Style 1"



mapWinID = CLng(MI.Eval("FrontWindow()")) ' MapInfo penceresinin Handlerı alınıyor
MI.RunMenuCommand M_TOOLS_SELECTOR ' MapInfo nun seç toolu aktif yapılıyor.

End Sub

' Alan seçme toolu aktif yapılıyor
Sub Alan_Sec()
MI.RunMenuCommand M_TOOLS_SELECTOR
End Sub

' Yakalama toolu aktif yapılıyor
Sub Alan_Yakala()
MI.RunMenuCommand M_TOOLS_RECENTER
End Sub

' ZoomIn
Sub ZoomIn()
MI.RunMenuCommand M_TOOLS_EXPAND
End Sub

' ZoomOut
Sub ZoomOut()
MI.RunMenuCommand M_TOOLS_SHRINK
End Sub

' Haritayı ortalar
Sub Ortala()
MI.do "Set Map Zoom Entire"
End Sub

' Kapalı lan bilgi almak için
Sub Alan_Bilgi()
MI.do "Run Menu Command ID 2001"
End Sub
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 01:17:41
Visual Basic 6.0 GPIB Haberleşmesi
Alıntı Yap
" General Purpose Interfacing Bus Nedir?
GPIB Protokolu ile nasıl haberleşilir? "

GPIB VE UYGULAMALARI EGITIM NOTLARI .

1
GPIB VE UYGULAMALARI EGITIM NOTLARI
Hazirlayan: Suat OCAKÇI
TÜBITAK Gebze – KOCAELI
Ekim 2002
GPIB VE UYGULAMALARI EGITIM NOTLARI .

2
IÇINDEKILER
GPIB VE UYGULAMALARI EGITIM NOTLARI.................... 1
IÇINDEKILER............................................................ 2
1.GIRIS................................................................... 3
2.GPIB BUS YAPISI.................................................... 4
2.1. GPIB Sinyalleri Lojik Seviyeleri ............................. 5
2.2. Veri Hatlari .........................................................5
2.3. Kontrol Hatlari .....................................................6
3. GPIB EL SIKISMA (HANDSHAKING) PROTOKOLÜ ..........8
4. BUS ÇALISMASI.......................................................9
4.1. Bus Komutlari ..................................................... 9
4.1.1. Talk/Listen Komutlari ....................................... 11
4.1.2. Universal Komutlar.............................................11
4.1.3. Adreslenmis Komutlar........................................ 12
5. GPIB UYGULAMA ÖRNEGI: Hasta Görüntüleme Için Çoklu Bir Sistem.............15
5.1. Veri Erisimi.....................15
5.2. Alarm Çalismasi .............16
5.3. Pratik Notlar................... 17
6. GPIB ARABIRIM KARTLARI... 18
7. DEGISIK GPIB ARABIRIM KART PROGRAMLARI ..... 20
7.1. Agilent VXI Plug&Play Instrument Arabirim Karti Için Örnek Program ..... 20
7.1.1. Bilgisayardan Cihaza Komut Gönderme Programi ... 21
7.1.2. Cihazdan Bilgisayar Veri Alma ...... 21
7.2. Keithley Arabirim Karti Için Örnek Program............... 21
7.2.1. Bilgisayardan Cihaza Komut Gönderme Programi .. 21
7.2.2. Cihazdan Bilgisayar Veri Alma Programi ............... 22
7.3. NI Arabirim Karti Için Örnek Program....................... 22
7.3.1. Bilgisayardan Cihaza Komut Gönderme Programi .. 23
7.3.2. Cihazdan Bilgisayar Veri Alma Programi ............... 24
KAYNAKLAR..................................................................25
EK - AGILENT VXI PLUG & PLAY KARTI IÇIN ÖRNEK PROGRAM ...26

GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
3
1. GIRIS
20 yildan fazladir, sayisal kontrollü bir çok cihaz gelistirilmistir. Laboratuar cihazlari arasinda
standardizasyonda, Hewlett-Packard HPIB (Hewlett-Packards Interface Bus) adi altinda bir
haberlesme ve kontrol stratejisi gelistirmistir. Diger üreticiler, bu bus'i kullanan cihazlar
gelistirmisler ve en son olarak IEEE (Institute of Electrical And Electronics Engineers) bu bus'i
tanimlayan standart bir doküman hazirlamistir. 1978'de IEEE bu son bus GPIB (General Purpose
Instrument Bus) veya IEEE 488 Standart olarak isimlendirilmistir [1]. Standart bir kontrol
hattinin kullanimi ile, tek bir bilgisayar (PC) ve bir arabirim elemani kullanilarak 15 adet cihazin
kontrolünü saglanmnistir. Eger böyle bir standart olmasa idi, 15 adet cihaz için 15 ayri arabirim
ve 15 farkli yazilim gerekecekti.
Bus'a baglanan bir cihaz, byte'lar halinde veya komutlar olarak verilerini diger bagli 14 cihaz
gibi gönderebilir. GPIB bus'i asenkron el sikismali (handshake) veri iletisimini kullanmasi
yüzünden, veriler cihazlarin farkli haberlesme oranlarina sahip olmalari durumunda da iletilirler.
Donanim bilesenleri, pratikte maksimum veri iletim hizini yaklasik 250 kbyte/s ‘de sinirlar, fakat,
daha yüksek veri iletim oranlarinda GPIB bir çok cihazi kontrol için kullanilabilir (printer, disk
sürücü, ..) [2].
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
4
2. GPIB BUS YAPISI
GPIB 16 hatli bir gruptan olusur. Bu grubun 8 tanesi veri veya komut tasir, diger 8 tanesi ise
kontrol için kullanilir. 8 kontrol hattinin 3 tanesi, el sikismali çalismada veri transferini koordine
etmek için ve diger 5 tanesi bus kontrol fonksiyonlari için kullanilir.
Herhangi bir cihaz GPIB bus'ina baglandiginda bus'a veri gönderebilir, ki bu durumda konusucu
(talker) olarak isimlendirilir, veya bus'tan veri alabilir, ki bu durumda da dinleyici (listener)
olarak isimlendirilir, hem listener hem de talker olabilir ve bus'a bagli cihazlardan en az bir
tanesi de bus kontrolcüsü (controller) olarak görev yapar. Talker, Listener ve Controller
cihazlarin hatta baglantisinin bir örnegi Sekil 2.1'de gösterilmistir. Bir cihaz bu fonksiyonlarin
kombinasyonunu içerebilir. Eger 15'den fazla cihaz baglanirsa, bus'in asiri yüklenmesinden
dolayi güvenli olmayan bir çalisma söz konusu olur.
Genel Arabirim
Yönetimi
Veri Byte
Transfer Kontrol
Data Hatlari
DI01-DI08
Controller,
Talker,
Listener
Talker,
Listener
Sadece Talker,
Sadece Listener
Veri Giris/Çikis
DAV (Data Valid)
NRFD (not ready for data)
NDAC (not data accepted)
IFC (interface clear)
SRQ (service request)
REN (remote enable)
EOI (end or identify)
ATN (attention)
Sekil 2.1. Genel GPIB Yapisi
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
5
Bir çok cihazin bir arada kullanilmasi durumunda, bus controller'ne örnek bir PC'dir. PC
cihazlara veri gönderebilir ve alabilir, kontrol sinyalleri gönderebilir ve alabilir ve gelen verileri
saklayabilir. Talker için bir frekans sayici veya bir voltmetre örnek olarak verilebilir. Listener
için x-y plotter, dalga sekillendirme jeneratörü , motor kontrolcüsü örnek olarak verilebilir. Hem
listener hem de talker için, manyetik teyp sürücüsü ve programlanabilir spektrum analizör örnek
olarak verilebilir.
2.1. GPIB Sinyalleri Lojik Seviyeleri
GPIB üzerindeki tüm hatlar TTL gerilim seviyelerinde çalisirlar, fakat, hatlar open collector
sürücüler tarafindan sürüldüklerinden dolayi negatif lojik sevileri de kullanilir. Yani 0.8 V'tan
küçük gerilimler lojik 1 seviyesi ve 2.5V'tan büyük gerilimler lojik 0 seviyesine denk gelir.
Open Collector devrelerinin çikis ucu, çikis transistörünün kollektör ucuna dogrudan baglidir.
Transistörün emitörü topraga (Ground) baglidir. Çikis transistörü iletimde oldugunda, çikis
toprak seviyesinde olur. Transistör iletimde değilken, çikis yüksektir (high). Hat kullanilirken,
sürücü aktif değilken hat uçlarini +5 V'a çekmek için, sürücü uçlarinin çikisi +5V'a dirençler
üzerinden baglanmistir.
2.2. Veri Hatlari
GPIB üzerindeki 8 veri hatti, veri ve komut kelimelerini bir cihazdan (talker) digerlerine
(listener) aktarmada kullanilir. Veri hattina baglanan cihazlar okunan verileri bir buffer'da
saklayarak bus'i asiri yüklemeden kurtarirlar.
2.3. Kontrol Hatlari
GPIB 8 ayri kontrol hatti kullanir. Bunlar DAV (data valid), NRFD (not ready for data),
NDAC(not data accept), ATN (attention), IFC (interface clear), SQR (service request), REN
(remote enable) ve EIO (end or identify)'dir. Birçok bus prosedürleri kontrol hattinin durumunu
rapor etmek için ayni kontrol hattini kullanan birden fazla cihaza ihtiyaci duyarlar. Örnegin,
veriler iki cihaza dogru gönderilmeye baslandiginda, her bir cihaz NDAC'i kullanarak gelen
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
6
sinyali kabul edebilir. Her iki cihaz da verileri kabul edinceye kadar NDAC hattinda sinyal
olmamalidir. Bu tip kontrol hatti islemi open collector sürücüsü ile saglanir.
NDAC hatti durumunda, iki cihaz veri kabulü için beklerken, NDAC hattini düsük seviyeye
çekerler. Bir cihazin veri kabulünün hemen ardinda, hatlar inaktif konuma geçerler, fakat kontrol
hatlari düsük seviyede kalirlar, son cihaz kontrol sinyallerinin farkina varincaya kadar veriler hat
üzerinde kalirlar. Bus inaktif oldugunda, tüm hatlar +5V'ta (lojik 0) olurlar.
DATA VALID (DAV). DAV, GPIB üzerinde veri iletimi kontrolü yapan el sikismali haberlesme
prosedüründe kullanilan 3 hattan biridir. DAV üzerindeki lojik 1 seviyesi (gerilim seviyesi
0.8V'tan küçüktür) verinin veri hatlari üzerinde hazir oldugunu ifade eder.
NOT READY FOR DATA (NRFD). NRFD, GPIB üzerinde veri iletimi kontrolü yapan el
sikismali haberlesme prosedüründe kullanilan 3 hattan diger biridir. Veri alan cihazlar, veri
almaya hazir olduklari sinyalinde NRFD kullanirlar. Tüm cihazlar veri almaya hazir
olduklarinda, cihazlar NRFD'i serbest birakirlar, böylece gerilim seviyesini +5V'a çekilmesine
izin verirler. NRFD'nin lojik 0 seviyesi tüm listener cihazlarin veri almaya hazir oldugunu ifade
eder.
NOT DATA ACCEPTED (NDAC). NDAC, GPIB üzerinde veri iletimi kontrolünü yapan el
sikismali haberlesme prosedüründe kullanilan 3. hattir. Veri alan cihazlar iletim yapan cihazlara
veriyi okuduklarini göstermek için NDAC'i kullanirlar. Bus'a bagli cihazlar bus üzerindeki veriyi
okuduklarinda NDAC'i gönderirler. Yani NDAC hatti lojik 0 seviyesine gider. Bu sinyal iletim
yapan cihaza gönderilen verinin hepsi tarafindan alindigini ifade eder.
ATTENTION (ATN). ATN, komut gönderildi sinyalini kontrol eden cihaz tarafindan kullanilir.
Lojik 1 (gerilim seviyesi 0.8V'tan küçük) seviyesi, controller komutlari tarafindan byte larin
iletildigini ifade der.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
7
INTERFACE CLEAR (IFC). IFC bus controller tarafindan bus üzerindeki tüm cihazlari
baslangiç konumuna getirmek için kullanilir. Bir düsük gerilim seviyesi (lojik 1), bus'a bagli tüm
cihazlarin baslangiç durumlarina reset lenmesine neden olur.
SERVICE REQUEST (SQR). Bus üzerindeki cihazlar SQR'i bus controller'a servis
gereksinimlerini bildirmek için kullanirlar. Bus üzerindeki cihaz, karsilikli veri alis verisi
tamamlamadiginda, çalisma esnasinda hata olustugunda SQR'i kullanir. Bus'i kontrol eden cihaz
düsük seviyeli SQR tespit ettiginde, hangi cihazdan servis istegi geldigini arastirir. Servis istegi
olan cihaz tespit edildiginde bus controller servis gereksinimi çikisi verir.
REMOTE ENABLE (REN). REN, bus üzerindeki veri ve komutlari cihazlarin alabilmelerini
saglamak amaciyla bus controller tarafindan kullanilir. REN üzerindeki düsük seviyesi bus
üzerindeki tüm cihazlarin GPIB tarafindan kontrol edilmelerine izin verir.
END OR IDENTIFY (EOI). EOI'nin iki fonksiyonu vardir. Bus üzerindeki veri gönderen
herhangi bir cihaz iletilen verinin sonunu belirtmek için EOI sinyalini (EOI'yu düsük seviyeye
çekerek) gönderirler. Ayrica EOI bus controller tarafindan paralel çalismayi baslatmak içinde
kullanilir. Hem EOI hem de ATN sinyalleri gönderildiginde, paralel çalisma baslatilmistir,
paralel çalisma için konfigüre edilen cihazlarin durumlarini gösteren bitler veri hattinda olurlar.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
8
3. GPIB EL SIKISMA (HANDSHAKING) PROTOKOLÜ
GPIB üzerinde iletilen veriler bir t aninda bir byte olarak iletilirler. DAV, DRFD ve NDAC
kontrol hatlari alici ve verici cihazlar arasindaki el sikismali çalisma ile byte transferini
yönetirler. El sikisma prosedürü, tüm listener cihazlarin bus üzerindeki veriyi almaya hazir
olduklarinda, bir byte veriyi bus üzerine birakmayi saglar. Ardindan listener bus üzerine birakilan
veriyi okur. Veri gönderici cihaz, tüm listener cihazlar alincaya kadar, veriyi bus üzerinde tutar.
Bu prosedüre için zaman diyagrami Sekil 3.1'de verilmistir.
Geçerli Veri Veri
DAV
NRFD
NDAC
Sekil 3.1. GPIB Elsikismali Çalisma Zaman Diyagrami
Herhangi bir verinin bus üzerine konulmasindan önce, verici cihaz NRFD sinyalinin high seviye
gelmesini beklemelidir. NRFD open collector sürücüsü tarafindan sürüldügünden, bus üzerindeki
tüm cihazlar bu sinyali gönderdiklerinde high seviyeye gelir. NRFD high oldugunda bus
üzerindeki tüm cihazlar veri almaya hazir olur.
NRFD bir kez high oldugunda, verici cihaz veriyi bus a gönderir. Verici cihaz DAV sinyalini
göndererek (DAV'i "low" seviyesine çekerek) bus üzerine geçerli bir veri konuldugunu belirtir.
Alici cihazlar DAV üzerinde düsük (low) seviye oldugunu fark ettiklerinde, bus üzerindeki veriyi
okurlar. Her bir cihaz veriyi okumayi bitirdiklerinde, NDAC sinyalini gönderirler. Bus üzerindeki
veriyi okuyan en son cihazda NDAC sinyalini gönderdikten sonra NDAC high olur. Bus
üzerindeki tüm cihazlar veriyi aldiktan sonra, verici cihaz bus üzerindeki veriyi kaldirir ve DAV
sinyalini gönderir.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
9
4. BUS ÇALISMASI
GPIB'ye baglanan cihazlar, veri alip verebilir, bus'i kontrol edebilir veya bu üç bus
fonksiyonunun hepsini beraber gerçeklestirebilir. Herhangi bir veri iletiminden önce, bus
controller hangi cihazin talker, hangi cihazin listener oldugunu belirler. Bus controller geri kalan
diger bus fonksiyonlarini da yapar. Bus fonksiyonlari diger cihazlara bus üzerinden bus
komutlarini göndererek baslatilir.
Bus komutlari bus a gönderilen veriler gibi ayni yönde gönderilirler, fakat bu arada bus controller
bir komutun gönderildigini belirtmek için ATN hattini lojik 1 yapar. Bir komut bus üzerine
gönderildiginde, bus a bagli tüm cihazlar komutu okur ve controller ile el sikismasi yapar.
4.1. Bus Komutlari
Bus controller, bus üzerindeki diger cihazlara dört farkli komut gönderebilir;
· Adreslenmis,
· Listen,
· Talk,
· Universal
Her komut ASCII olarak tanimlanabilsin diye, komutlar için veri bus'inin sadece ilk 7 biti
kullanilir. Sekil 4.1'de GPIB komut kodlari gösterilmistir.
Komutun tipi 5., 6. ve 7. bitlerin degerleri ile belirlenir. Bu bitlere göre komut tipleri Sekil 4.2'de
verilmistir. Eger 5., 6. ve 7. bitler lojik 0 olurlarsa, komut adreslenmis komuttur. Eger, 6. ve 7. bit
lojik 0 fakat 5. bit lojik 1 ise komut universal komuttur. Komut bitlerinden 6. ve 7. bit listen ve
talk komutlarini belirtir. Eger, 6. bit 1 ve 7.bit 0 ise komut listen komutudur. Benzer sekilde 6. bit
0 ve 7. bit 1 ise komut talk komutudur.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
10
Sekil 4.1. GPIB Komut Kodlari.
b7 b6 b5 Komut Tipi
0
0
0
1
1
0
0
1
0
1
0
1
x
x
x
Adreslenmis
Universal
Listen
Talk
Ikincil
Sekil 4.2. Komut Tipi Bit Kodlari
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
11
Eger, 6. bit ve 7. bitin ikisi de 1 ise komut byte'i ikincil komuttur. Genelde, ikincil komut paralel
çalisma veya ikincil adreslere gönderimli devre konfigurasyonlarinda kullanilir.
4.1.1. Talk/Listen Komutlari
Isim olarak, talk komutu data aktarilan talker'i, listen komutu ise listener'i belirtir. Controller
tarafindan talk veya listen komutu gönderildiginde komutun son bes biti hangi devrenin talk veya
listen edilecegini belirler. GPIB üzerinden bagli olan devreler 0'dan 30'a kadar bus adresine
sahip olmak zorundadir ve bu sekilde ayarlanmalidir.
Komut bitinin en anlamsiz bes bitinin adresledigi devreye listen komutu gönderildiginde, bu
adrese uyan cihaz bu komutu algilar ve listen moduna geçer. Listen modunda GPIB bus cihazi
bus üzerinde bulunan tüm veriyi okur. Benzer sekilde talk komutunda adrese uyan devre talk
moduna geçer. Kontroller komut gönderimini tamamladiginda talker bus'a data gönderebilir.
Eger talk komutu en anlamsiz bes bit 1 yapilarak gönderilirse (1FH veya decimal 31) bu durum
untalk (UNT) komutu olur ve talk modundaki tüm cihazlar bos (idle) moda geçerler. Benzer
sekilde, 31 adresine listen komutu gönderilirse, bu unlisten (UNL) komutu olarak anlasilir. UNL
gönderildikten sonra tüm listen modundaki cihazlar bu moddan çikarlar ve bus'tan daha fazla
veri alma veya gönderme yapmazlar.
4.1.2. Universal Komutlar
Universal komutlar, tüm bus'taki cihazlari etkilerler. Yalnizca bes tip universal komut vardir;
Local Lockout (LLO), Device Clear (DCL), Paralel Poll Unconfigure (PPU), Serial Poll Enable
(SPE) ve Serial Poll Disable (SPD).
Local Lockout (LLO): Local Lockout komutu ASCII 11H kodu ile tanimlanir. LLO komutu
bus'a bagli tüm cihazlarin ön panel kontrollerini devre disi birakilmasini saglar. Böylelikle, ön
panelden girilecek komutlar ile bus'dan gönderilecek komutlar arsinda bir uyusmazlik olmaz.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
12
Device Clear (DCL): Device Clear, ASCII 141H kodu ile tanimlanir. Bu komut adindanda
anlasilacagi gibi bus üzerinde bulunan tüm cihazlari resetler.
Parallel Poll Unconfigure (PPU): PPU komutu ASCII 15H kodu ile tanimlidir. Bir PPU komutu
GPIB bus üzerinde paralel çalisan tüm cihazlari resetler ve yeni paralel çalisma modu için bus
üzerindeki cihazlari tanimlar.
Serial Poll Enable (SPE) ve Serial Poll Disable (SPD): SPE ve SPD komutlari sirasiyla 18H ve
19H ASCII kodu ile tanimlidir ve bus'a bagli cihazlarin seri modda çalismalarinda kullanilirlar.
Bus controller servis gereksinimi tespit ettiginde, gereksinim belirtmeden önce hangi cihazin
gereksinimi oldugunu belirler. SPE komutu gönderildiginde, tüm cihazlar talk komutlarini, tek
durum kelimelerini, controller'a göndererek cevap verirler.
Controller ilk gönderilen SPE komutu ile seri çalismayi baslatir. SPE komutu gönderildikten
sonra, controller talk komutlarini bir cihazdan digerine gönderir. Tüm talk komutlari
gönderildikten sonra, controller talk komutuna cevap vermis cihazlardan gelen durum
kelimelerini okur. Controller cihazlari buldugunda, SPD komutunu gönderir. SPD komutu ,
controller servis gereksinimini verebilsin diye, bus üzerindeki tüm cihazlari bir önceki modlarina
dönmelerine neden olur.
4.1.3. Adreslenmis Komutlar
Adreslenmis komutlar sadece daha önce listener olan cihazlari etkiler. Böylelikle sadece seçilmis
cihazlar bu komutlardan etkilenirler. Bes adet adreslenmis komut vardir. Bunlar; Go To Local
(GTL), Selected Device Clear (SDL), Parallel Poll Configure (PPC), Group Trigger (GET), Take
Control (TCT).
Go To Local(GTL): GTL komutu ASCII 1H kodu ile tanimlidir. GTL komutu bus üzerine
gönderildiginde, tüm listener konumdaki cihazlar "local" konuma geçerler. Yani panelleri
üzerindeki kontrol tus veya butonlari aktif hale geçer. Bu komut LLO komutu ile iptal edilir.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
13
Selected Devices Clear (SDC): SDC komutu ASCII 4H kodu ile tanimlidir. Bu komut, listen
komutlarini alan cihazlari resetler.
Parallel Poll Configure (PPC): PPC komutu ASCII 5H kodu ile tanimlidir. Bu komut paralel
çalisacak cihazlari hazir hale getirir. SRQ low oldugunda, paralel çalisma bus üzerinde hangi
cihazin servis gereksinimi oldugunu tespit eder.
Paralel çalisma ATN ve EOI sinyallerinin her ikisinin de controller tarafindan gönderilmesi ile
baslatilir. Böylece, paralel çalisma için konfigüre edilen cihazlarin durum bitleri bus hatlarinin
birinin üzerine denklestirilir. Ardindan controller servis gereksiniminin hangi cihazdan geldigini
tespit eder.
PPC komutu, hangi cihazin hangi biti servis gereksiniminde kullanacagini ve bu bitin 1 mi yoksa
0 mi oldugunda servis gereksinimi oldugunu gösterecegini belirler. PPC gönderildikten sonra,
listener cihazlar ikincil komutu almak için beklerler. Ikincil komutun en anlamsiz 3 biti, hangi
cihazin paralel çalisma sirasinda durumunu göstermede hangi biti kullanacagini belirler. Örnegin,
ikincil komutun en anlamsiz üç biti 000 ise, cihaz en anlamsiz biti durumunu göstermek için
kullanacaktir. Ikincil komutun en anlamsiz üç biti 001 oldugunda, ver basinin 2. bitinin durum
göstermek için kullanilacagini gösterir. Ikincil komutun 4. biti cihazin servis gereksinimini nasil
verecigini belirtmek için kullanilir. Ikincil komutun 4. bitindeki lojik 0 degeri, cihaz servis
gereksiniminde lojik 0 gönderecegini ifade eder. 4. bit lojik 1 ise, servis gereksinimi lojik 1 ile
yapilacak demektir.
Paralel çalisma sirasinda, birden fazla cihaz ayni veri bitini durumunu göstermek için
kullanabilir. Bu durumda ayni biti kullanan cihazlardan herhangi biri servis gereksinimi
duydugunda her ikisi de servis gereksinimi duyuyormus gibi algilanir.
Group Trigger (GET): GET komutu ASCII 8H kodu ile tanimlidir. GET cihazlarin
senkronizasyonunu saglar. Cihazlar tetiklendiklerinde, tetiklenen cihazlar bazi özel haberlesmeler
için programlanabilirler. Cihazlar GET komutu aldiginda, cihazlar aralarindaki haberlesmeye
baslarlar.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
14
Take Control (TCT): TCT komutu ASCII 9H kodu ile tanimlidir. Bu komut bus controller
görevini bus üzerindeki baska bir cihaza transfer eder. Yeni bus controller yapilan cihaza TCT
komutundan sonra listen komutu gönderilir. TCT komutu alincaya kadar, cihaz bus üzerindeki
diger cihazlara komutlar gönderebilir.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
15
5. GPIB UYGULAMA ÖRNEGI: Hasta Görüntüleme Için Çoklu Bir
Sistem
Bir bilgisayar ile hastanede hasta verilerinin görüntülenmesi GPIB için iyi bir örnek uygulamadir.
Sekil 5.1'de böyle bir uygulama semasi verilmistir. Bu varsayilan sistemde 8 adet hastanin kalp
ritimlerinin, kan basinçlarinin, solunum ritimlerinin bir kontrol merkezinden gözetlenmesi
amaçlanmaktadir. Monitörlerin hepsi merkezi bilgisayara beklenmeyen bir durumda alarm
vermem özelligine sahiptirler. Bu sistemde merkezi bilgisayarda toplanan veriler kayit edilmekte
ve analizlerinin yapilmakta oldugu varsayilmistir.
Sistem Controller
(PC)
Hasta
Monitörü
1
Hasta
Monitörü
2
Hasta
Monitörü
3
Hasta
Monitörü
4
GPIB
Sekil 5.1. GPIB Kontrollü Hasta Görüntüleme Sistemi
5.1. Veri Erisimi
Normal kosullar altinda bilgisayar her dakika sekiz hasta monitöründen veri alip kaydedecektir.
Birinci hasta veri okumasi, öncelikle istenmeyen cihazlarin listener konumuna alinmamasini
garantiye almak için, bir UNL komutuna ihtiyaç duyacaktir. UNL komutundan sonra bus
controller birinci hasta monitörünün adresi ile bir listen komutu yollamalidir.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
16
Listen için dogru hasta monitörü seçildikten sonra controller ATN sinyalini serbest birakacak ve
monitöre komutlar gönderecektir. Controller hastanin kalp ritmini okumak istedigini belli etmek
için "H" karakterini monitöre gönderebilir. H sunu gösterecektir: monitör hastanin kalp ritmi
üzerine controller verisi göndermelidir. Komutun sona erdigini göstermek için "." kullanilmalidir.
Monitör için komuttan sonra monitörü listen konumundan kurtarmak için controller baska bir
UNL komutu göndermelidir.
Monitör simdi kalp ritmini merkez bilgisayara göndermek için hazirlanmalidir. Bilgisayar,
monitörün veriyi iletmesine izin vermek için, birinci monitörün adresi ile bir talk komutu
göndermelidir.
Bilgisayara kalp ritmi verisini gönderdikten sonra EIO yardimiyla monitör iletiminin bittigini
gösterecektir. Veriyi ve mesaj sinyalin bitisini aldiktan sonra merkez bilgisayar bir UNT komutu
göndermek ve baska hasta monitöründen veri örneklemesi almak için serbest hale gelmelidir.
5.2. Alarm Çalismasi
Bir hastanin kalp ritminde, kan basincinda ya da nefes alislarinda ani ve keskin degisiklik
durumunda bir monitör servis gereksini yoluyla merkez bilgisayari bilgilendirecektir. Çogu GPIB
arabirimler servis teklifi alindiginda yerine getirilecegini garanti ederek servis teklifinin kontrol
yapan bilgisayari kesmeye (interrupt) izin verir.
Bilgisayarin kesme servis prosedürü, hangi cihazin servis gereksinimi istedigini belirlemek için
bir bus cihazi ile baglanti kuracaktir. Birkaç milisaniyede seri yada paralel bir kontak kuracaktir.
Eger bir seri çalisma kullanilirsa, tüm monitörleri listen modundan kurtarmak için controller bir
UNL komutu gönderecektir. UNL'yi bir SPE komutu takip edecek ve bu monitörleri bir seri
çalismaya hazirlayacaktir. Controller daha sonra sirayla her bir monitöre talk komutu gönderecek
ve her birinin durum bitlerini okuyacaktir. Bir durum biti sadece hangi cihazin servis teklif
ettigini değil ayni zamanda servisi gereksinimi duyan hayati isareti gösterebilir.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
17
Sistem çalismaya basladiginda monitörler dogru bir sekilde kurulursa, paralel çalisma hangi
monitörün servis gereksinimi oldugunu belirlemede kullanilabilir. Bir paralel çalismaya cevap
vermek için monitörlerin konfigürasyonunun basit bir semasi, veri bus'in bir biti ile 8 monitör
kontrol edilebilir. Eger bir monitör bir paralel çalisma sirasinda servis gereksinimi duyarsa bus
hattini lojik 1 yapar.
Monitörler, bus üzerindeki tüm cihazlarin listening modunda olmadiklarini temin etmek için, ilk
gönderilen unlisten komutu ile konfigüre edilirler. Controller birinci monitöre bir listen komutu
gönderir. Ardindan 0C8H ikincil komutu ile birlikte bir PPC komutu gönderilmelidir. Bu
durumda, veri bitinin birinci biti birinci monitörün servis gereksinimini göstermek amaciyla
ayarlanmis olur. Her monitörü konfigüre etmek için benzer prosedür takip edildikten sonra bir
UNL komutu gönderilmelidir.
Paralel çalismayi basarmak için, controller ATN ve EOI sinyallerini ayni anda gönderir ve veri
bus'i okur. Monitör servis gereksinimi oldugunda kendi bitini lojik 0 yapar. Hangi monitörün
servis gereksinimi oldugu tespit edildikten sonra bilgisayar hangi hastanin zor durumda oldugunu
hemsireye verecegi bir ikaz ile belli eder.
5.3. Pratik Notlar
· Hasta görüntüleme çalismasi, GPIB üzerinden birden fazla cihazin kontrol edilmesine iyi
bir örnektir fakat, bus'a baglanacak cihaz sayisinin belli bir sayiyi asamamasi bu
çalismayi pek pratik olmadigini göstermektedir.
· GPIB gürültüsüz olarak 20 m uzunluga kadar çalisabilmektedir.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
18
6. GPIB ARABIRIM KARTLARI
Bilgisayara takilabilen ve GPIB bus baglantisi saglayana Agilent, National Instrumenet, Keithley,
Ics, Iotech, Metra Byte, Qua Tech., Real Time Devices gibi üreticilerin degisik bir çok arabirim
kartlari vardir. Bu arabirim kartlari genellikle, VLSI GPIB entegre devreleri içerirler. Örnegin,
Intel arabirim karti, 8291 talker/listener, 8292 GPIB controller ve iki adet 8293 GPIB bus
alici/vericisi içerir [3]. Bir GPIB karti, bir PC'yi talker/listener/controller yapabilir ve küçük bir
yazilim ile kontrolü saglayabilir.
Eger kullanici sinirli bir GPIB kontrolüne ihtiyaci varsa, basitçe Sekil 6.1'de gösterildigi gibi, iki
adet paralel 8 bit giris portu, iki adet paralel 8 bit çikis portu ve 16 adet open collector hat
sürücüsü ile GPIB kontrolü saglanabilir. Çikis portlari GPIB veri hatlari ve kontrol hatlarina bagli
open collector bufferlarini sürer. Giris portlari ise, bus hatlari üzerindeki seviyeleri görüntüler.
Herhangi bir arabirim bus üzerinde tüm yönlerde iletisim için yazilim gereksinimi duyar, fakat bu
uygulamada sadece tek yönde bir iletisim vardir. Örnegin, bir komut göndermek için, bilgisayar
önce ATN hattini high yapar (ATN bus seviyesi topraga çekilir). Bilgisayar daha sonra NRFD'yi
test eder. NRDF'de high seviye tespit edildiginde, bilgisayar çikis portuna bagli veri hattina
komut kodlarini yükler ve DAV'i gönderir. Ardindan, veri kabul edilmisse, NDAC bitinin high
olup olmadigi test edilir. NDAC'in high oldugu gözlenirse, islem tamamlanmis demektir.
Bu basit arabirim, kullanilmayan bus hatlarini çalisma süresinde high olmasini temin etmelidir.
Örnegin, eger bilgisayar veri aliyorsa GPIB veri bus'ini sürmeyi önlemek için, veri çikis
bufferina OFFH yüklenmelidir.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
19
Kontrol Çikis
Portu
(8255 PortC)
Kontrol Giris
Portu
(8255 PortA)
Open Collector
inverter (7405)
+5V
Pull-up
Dirençleri
(1KW)
DAV
NRFD
NDAC
IFC
ATN
SRQ
REN
EOI
Sekil 6.1. GPIB-Bilgisayar Kontrol Sinyal Arabirimi
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
20
7. DEGISIK GPIB ARABIRIM KART PROGRAMLARI
GPIB uygulamalarina örnek olarak Visual Basic Programlaam Dili ile Keithley, National
Instrument (NI) ve Agilent firmalarinin üretmis oldugu arabirim kartlari ile hazirlanmis
programlar verilmistir. Bu programlarin hepsinde, hazirlanan programa "Module" olarak her ara
birim kartin bilgisayar kurumu için beraberinde verilen CD veya disket içindeki programlar
kullanilmistir. Bu program parçalari her kartin kendine özgü haberlesme protokolünü
içermektedir. Keithley arabirim karti için modüle olarak kullanilacak dosyalar IEEEvb.Bas
dosyasi, NI arabirim karti için NIglobal.Bas ve Vbib-32.Bas dosyalari ve Agilent VXI plug&play
instrument arabirim karti için VppType.Bas ve Visa32.Bas dosyalaridir. Bu tip arabirimler için
hazirlanacak bir programin kütüphanesine belirtilen dosyalar tanittirildiktan sonra, protokol
yazmaya gerek kalmadan dorudan GPIB üzerinde bagli cihaza erisim için bir iki komut kulanimi
yeterli olacaktir.
7.1. Agilent VXI Plug&Play Instrument Arabirim Karti Için Örnek
Program
Asagida verilen satirlarin çalistirilmasi ile Agilent'in ürettigi VXI plug&play instrument
arabirimini bilgisayara tanittirilir.
status = viOpenDefaultRM(defrm)
status = viOpen(defrm, "GPIB0::13::INSTR", 0, 0, vi)
Bu komutm satirlarinda 13 cihaz adresini göstermektedir. Cihaza komut göndemeke için module
olarak kullanilan dosyalar içinde hazir bulunan viWrite ve veri okumak için viRead prosedürleri
kullanilir.
Asagidaki satirin çalistirilmasi ile bilgisayar ile arabirim karti arasindaki haberlesme sona
erdirilir.
Call viClose(defrm)
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
21
7.1.1. Bilgisayardan Cihaza Komut Gönderme Programi
Asagida verilen komut satirinin çalistirilmasi ile cihaza komut gönderimi saglanmaktadir. Bu
komut GPIB karti tanitimi yapilirken belirtilen adresteki cihaza K komutunu göndermek için
kullanilmistir.
status = viVPrintf(vi, K+Chr$(10), 0)
7.1.2. Cihazdan Bilgisayar Veri Alma Programi
Asagida verilen komut satirinin çalistirilmasi ile cihazdan veri okumasi saglanmaktadir. Bu
komut satirindaki strRes degiskeninin içine cihazdan okunan veri yazilmaktadir.
status = viVScanf(vi, "% t ", strRes)
7.2. Keithley Arabirim Karti Için Örnek Program
Kullanilan arabirimi bilgisayara tanitmak için asagidaki komut satirinin çalistirilmasi gereklidir.
Call initialize(21, 0)
Bu arabirim karti için module olarak kullanilan dosya içerisinde bulunan enter isimli prosedür
veri almak için, send isimli prosedür komut göndermek için kullanilir.
7.2.1. Bilgisayardan Cihaza Komut Gönderme Programi
Asagida verilen komut satirinin isleme konulmasi ile A ile verilecek adreste buluna cihaza K
komutunun gönderilmesi mümkün olacaktir.
Call send(A, K, status%)
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
22
7.2.2. Cihazdan Bilgisayar Veri Alma Programi
Asagida verilen komut satirinin isleme konulmasi ile A adresli cihazdan L uzunlukta gönderdigi
verinin B kadarini a$ degiskeni içine atilir. Yani a$ degiskeni cihazdan gelen veriyi tutar.
Call enter(a$, L, B, A, status%)
7.3. NI Arabirim Karti Için Örnek Program
Bu kartin bilgisayar tanittirilmasi için asagidaki satirlarin çalistirilmasi gereklidir.
Call ibonl(device, 0)
Call ibsic(board)
Call ibonl(board, 0)
OPEN_DEVICE1
address = A
OPEN_DEVICE2
Address degiskeninin içerigi (A) cihazin adresi belirtir. OPEN_DEVICE1 ve OPEN_DEVICE2
alt programlarinin içerigi ise;
Private Sub OPEN_DEVICE1()
Call ibfind("gpib0", board)
If (ibsta And EERR) Then
Call errmsg("error opening a descriptor for the board.")
Exit Sub
End If
Call ibsic(board)
If (ibsta And EERR) Then
Call errmsg("error sending interface clear.")
Exit Sub
End If
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
23
Call ibsre(board, 1)
If (ibsta And EERR) Then
Call errmsg("error setting remote enable line.")
Exit Sub
End If
End Sub
Private Sub OPEN_DEVICE2()
Call ibdev(0, address, 0, 13, 1, 0, device)
If (ibsta And EERR) Then
Call errmsg("error opening a descriptor to the device.")
Exit Sub
End If
End Sub
Bu arabirim karti için module olarak kullanilan program içerisindeki haberlesme protokolünde
veri almak için receive isimli alt prosedür, komut göndermek için send isimli alt prosedür
kullanilir.
7.3.1. Bilgisayardan Cihaza Komut Gönderme Programi
Asagida verilen send alt prosedürü ile adresi daha önce belirtilmis cihaza, wcommand degiskeni
içine yazilmis komutlar gönderilir.
Private Sub Send()
Call ibwrt(device, wcommand)
If (ibsta And EERR) Then
Call errmsg("error writing a descriptor to the device.")
Exit Sub
End If
End Sub
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
24
7.3.2. Cihazdan Bilgisayar Veri Alma Programi
Asagida verilen receive alt prosedürü ile adresi daha önce belirtilmis cihazdan, buffer degiskeni
içine okunacak veriler yazilir.
Private Sub Receive()
Call ibrd(device, buffer)
If (ibsta And EERR) Then
Call errmsg("error reading from the device.")
Exit Sub
End If
End Sub
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
25
KAYNAKLAR
[1] "IEEE 488-1978 Standart Digital Interface For Programmable Instrumentation", IEEE. 1978,
Newyork.
[2] Tompkins, W.J., Webster J.G., "Interfacing Sensors to the IBM, PC", Prentice Hall, 1988,
New Jersey.
[3] "Microprocessor and Peripheral Handbook", Intel 1983, Vol 2., Santa Calara, CA.
GPIB VE UYGULAMALARI EGITIM NOTLARI .
. .
26
EK - AGILENT VXI PLUG & PLAY KARTI IÇIN ÖRNEK PROGRAM
Bu bölümde Visula Basic ile yapilan bir program örnegi verilmistir. Program bir adet formdan,
ve dört adet modülden olusmaktadir. Programdaki formun görünüsü Sekil Ek.1'de verilmistir.
Modüllerden 1. ve 2.si kullanilan arabirim kartinin haberlesme protokollerinin yazili oldugu
modüllerdir. 3. modül zaman gecikmesi içeren bir prosedür içermekte ve 4. modül ise GPIB'ye
bagli cihazlardan okunan verilerin Excel'e aktarimi prosedürünü içermektedir.
Formdaki, Measure butonuna basilmasi ile, seçilmis olan Power Sensor frekanslarina HP 83650B
sinyal kaynagini set edilir ve HP34401 dijital voltmetreden okuma yapilir. Okunan degerler ve
frekans degerleri formdaki gride yazilir ve ölçüm sonunda bu degerler Excel'e aktarilir.
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 21 Nisan 2006, 03:02:55
Api'ler icin güzel bir kaynak

Alıntı YapApi sorularina güzel bir kaynak program icinde cözüleride mevcut

benim tavsiyem api guide ve api viewer'i indirin, visual basic'ciler icin süper bir olay.

adresi

http://www.mentalis.org/agnet/apiguide.shtml
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 30 Nisan 2006, 22:54:14
Alıntı YapProjeler izin içine dosya (EXE,DLL,OCX,....) yerleştirin

Projeler izin içine dosya yerleştirin

Merhaba arkadaşlar öncelikle bu gün hazırladığım dokümanı okuyarak ne kazanacaksınız onu söyleyeyim. Bu dokümanla örneğin Setup programları oluştura bilirsiniz veya bir program yazdınız arkadaşınıza atıyorsunuz arkadaşım bunu al sonra bu ocx dosyasını ve bu dll dosyasınıda al derseniz kalabalık olur ve hoş olmaz (Ne biliyim en azından ban öyle geliyor). Şimdi birazda kodlarımız konuşsun dimi.
1)Masaüstünüze bir klasör oluşturun
2)Yeni bir VB 6.0 Projesi açın ve açtığınız klasörün içine kaydedin
3)Ve form'unuza bir adet command butonu koyun
4)Ve yukarda gördüğünüz "Tools" menüsüne gelin orada "Resource Editor" olucak.Eğer yoksa korkmayın "Add-ins" menüsünden "Add-in Manager" ve orada bulunan "VB 6 Resource Editor" bölümünü "Loaded" yapın.Şimdi "Resource Editor" çalıştırın
5) "Resource Editor" çalıştırdığınız editor de istediğiniz dosyaları ekleyin fakat bir şeye dikkat edin.Eklediğiniz dosyaların adına.Mesala bir exe dosyası atalım "Orhun.exe" olsun dosyamızın adı
8)Command butonumuzun içine aşağıdaki kodları yazın

Private Sub Command1_Click()
Dim resbytes() As Byte
resbytes = LoadResData(101, "CUSTOM")
Dim no As Byte
no = FreeFile
Open "C:\Orhun.exe" For Binary As #no ‘Projenizden Orhun.exe dosyası Kopyalanıyor
Put #no, , resbytes
Close #no
Shell "C:\Orhun.exe", vbNormalFocus ‘Dosyayı Açıyor
End Sub

9)Oluşturduğumuz projeyi kayıt edin tekrar
10)File menüsünde Make exe yapın sonra oluşturduğunuz klasör içinden çalıştırın projenizi

Ben bu dökümanı bayadır arıyorum fakat bulamıyordum öğretmenime sordum onlardan aldığım bilgi ile bu dökümanı hazırladım diğer Orhunlar eziyet çekmesin diye işallah işinize yaramıştır
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 30 Nisan 2006, 23:04:27
Alıntı Yap
Visual Basicte Yazıcı Kontrolleri

Vb de printer kontrolü; printer nesnesi kullanılarak VB'de ekrana çıktı yapıyormuş gibi yazıcıya
çıktı yapılabilir. Printer nesnesine uygulanan birçok yöntem ve metot form veya Picture nesnesine
uygulanıyormuş gibi uygulanabilir.
Printer'ın kullanılan özelliklerinden;
devicename= yazıcının ismini bu yöntemle öğrenebiliriz
Drivername= yazıcı sürücüsünün ismi bu özellikle öğrenilir. Geriye dönene değer yazıcı için
kullanılan sürücü dosyasının ismidir
Port= yazıcının hangi porta bağlı olduğunu bu özellik ile öğrenebiliriz.
Paperbin= kağıt besleme kaynağı bu özellikle öğrenilip değiştirilebilir.
Colormode= yazıcının siyah mı beyaz mı olduğunu gösterir.
Copies= aynı sayfadan yazdırılacak kopya sayısı bu özellik ile öğrenilip değiştirilir.
Duplex= kullanılan yazıcı çift yönlü yazdırmayı destekliyor ise bu özellikle yazdırma işleminin
nasıl yapılacağı öğrenilebilir ve değiştirilebilir.
Orientation = yazdırma işleminin yatay mı dikey mi yapılacağını gösterir.
Papersize= sayfa boyutlarını ayarlar
Printqulity= sayfa çıktısının kalitesi
zoom= kullanılan yazıcı ölçeklemeyi destekliyor ise çıktının yüzde oranı ayarlanır.
Page= yazdırılan aktif sayfanın numarasını verir.
Printer'ın methodları;
Print= yazıcıdan font özellikleri ile belirlenen fontta çıktı almaya yarar.
Circle,line,pset= yazıcıda çizim yapmaya yarar.
Enddoc= dokümanın bittiğini belirten komutu yazıcıya gönderir. Yazdırma işlemi sona erdiğinde
bu komut kullanılmalıdır.
Newpage= aktif sayfayı bitirir ve yeni bir sayfaya geçer.
Killdoc= yazdırma işlemini iptal eder ve yazıcı kuyruğundan siler.
Scale(x1,x2,y1,y2)= scale metodu formda olduğu gibi yazıcıda da koordinat sistemini yeniden
belirlemeye yarar.
Textwidth,Textheight= bu özellik seçilen font özelliklerine göre bir yazıcının genişliğini
ve yüksekliğini verir.

Private Sub Form_Load()
Show
Print "paper bin "; Printer.PaperBin
Print "colormode "; Printer.ColorMode
Print " copies"; Printer.Copies
Print " device name"; Printer.DeviceName
Print "driver name"; Printer.DriverName
Print "duplex"; Printer.Duplex
Print "orientation "; Printer.Orientation
Print "papersize "; Printer.PaperSize
Print "port"; Printer.Port
Print "printqulity"; Printer.PrintQuality
Print "track default"; Printer.TrackDefault
Print "zoom"; Printer.Zoom End Sub
Başlık: Programınız İstemediğiniz Bilgisayarda Çalışmasın
Gönderen: OG - 30 Nisan 2006, 23:50:27
Programınız İstemediğiniz Bilgisayarda Çalışmasın

Alıntı Yap" Programınızın sadece izin verdiğiniz bilgisayarlardamı çalışmasını istiyorsunuz. Bunu engellemenin yolu O bilgisayara özel olan bir şeyi sorgulamak. "

Programınızı yazdınız, lisansını aldınız, bundan gelir elde ediyorsunuz, ama oda ne programınızın yüzlerce kopyası internet üzerinde dolaşıyor. Arghhhh. Çok sinirlendiniz ama yapacak bişi yok emeklerinizin size getirdiği şey maddi gelir değilde sadece about penceresindeki isminizin görünmesi olcak. Haydi Bunu engellemeye çalışalım.

Her bilgisayarın kendisine özgü olan bazı değerleri vardır.(İşlemci No, HardDisk Id vs…)
Bunlardan En kolayı Harddisk Id si olmalıki internet üzerinde en çok bunun örnekleri var.
Bizde bu numarayı kullanarak bir sorgulama yapalım. Burası oldukça uzun bir kod Copy/Paste yapmanız önerilir.


--------------------------------------------------------------------------------


Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const CREATE_NEW = 1
Private Const INVALID_HANDLE_VALUE = -1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const IDENTIFY_BUFFER_SIZE = 512
Private Const OUTPUT_DATA_SIZE = IDENTIFY_BUFFER_SIZE + 16

Private Type GETVERSIONOUTPARAMS
bVersion As Byte
bRevision As Byte
bReserved As Byte
bIDEDeviceMap As Byte
fCapabilities As Long
dwReserved(3) As Long
End Type

Private Type IDEREGS
bFeaturesReg As Byte
bSectorCountReg As Byte
bSectorNumberReg As Byte
bCylLowReg As Byte
bCylHighReg As Byte
bDriveHeadReg As Byte
bCommandReg As Byte
bReserved As Byte
End Type

Private Type SENDCMDINPARAMS
cBufferSize As Long
irDriveRegs As IDEREGS
bDriveNumber As Byte
bReserved(2) As Byte
dwReserved(3) As Long
bBuffer() As Byte
End Type

Private Const IDE_ID_FUNCTION = &HEC
Private Const IDE_EXECUTE_SMART_FUNCTION = &HB0

Private Const SMART_CYL_LOW = &H4F
Private Const SMART_CYL_HI = &HC2

Private Type DRIVERSTATUS
bDriverError As Byte
bIDEStatus As Byte

bReserved(1) As Byte
dwReserved(1) As Long
End Type

Private Type IDSECTOR
wGenConfig As Integer
wNumCyls As Integer
wReserved As Integer
wNumHeads As Integer
wBytesPerTrack As Integer
wBytesPerSector As Integer
wSectorsPerTrack As Integer
wVendorUnique(2) As Integer
sSerialNumber(19) As Byte
wBufferType As Integer
wBufferSize As Integer
wECCSize As Integer
sFirmwareRev(7) As Byte
sModelNumber(39) As Byte
wMoreVendorUnique As Integer
wDoubleWordIO As Integer
wCapabilities As Integer
wReserved1 As Integer
wPIOTiming As Integer
wDMATiming As Integer
wBS As Integer
wNumCurrentCyls As Integer
wNumCurrentHeads As Integer
wNumCurrentSectorsPerTrack As Integer
ulCurrentSectorCapacity As Long
wMultSectorStuff As Integer
ulTotalAddressableSectors As Long
wSingleWordDMA As Integer
wMultiWordDMA As Integer
bReserved(127) As Byte
End Type

Private Type SENDCMDOUTPARAMS
cBufferSize As Long
DRIVERSTATUS As DRIVERSTATUS
bBuffer() As Byte
End Type

Private Const SMART_ENABLE_SMART_OPERATIONS = &HD8

Public Enum STATUS_FLAGS
PRE_FAILURE_WARRANTY = &H1
ON_LINE_COLLECTION = &H2
PERFORMANCE_ATTRIBUTE = &H4
ERROR_RATE_ATTRIBUTE = &H8
EVENT_COUNT_ATTRIBUTE = &H10
SELF_PRESERVING_ATTRIBUTE = &H20
End Enum

Private Const DFP_GET_VERSION = &H74080
Private Const DFP_SEND_DRIVE_COMMAND = &H7C084
Private Const DFP_RECEIVE_DRIVE_DATA = &H7C088

Private Type ATTR_DATA
AttrID As Byte
AttrName As String
AttrValue As Byte
ThresholdValue As Byte
WorstValue As Byte
StatusFlags As STATUS_FLAGS
End Type

Private Type DRIVE_INFO
bDriveType As Byte
SerialNumber As String
Model As String
FirmWare As String
Cilinders As Long
Heads As Long
SecPerTrack As Long
BytesPerSector As Long
BytesperTrack As Long
NumAttributes As Byte
Attributes() As ATTR_DATA
End Type

Private Enum IDE_DRIVE_NUMBER
PRIMARY_MASTER
PRIMARY_SLAVE
SECONDARY_MASTER
SECONDARY_SLAVE
TERTIARY_MASTER
TERTIARY_SLAVE
QUARTIARY_MASTER
QUARTIARY_SLAVE
End Enum

Private Declare Function CreateFile Lib "kernel32" _
Alias "CreateFileA" _
(ByVal lpFileName As String, _
ByVal dwDesiredAccess As Long, _
ByVal dwShareMode As Long, _
lpSecurityAttributes As Any, _
ByVal dwCreationDisposition As Long, _
ByVal dwFlagsAndAttributes As Long, _
ByVal hTemplateFile As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Declare Function DeviceIoControl Lib "kernel32" _
(ByVal hDevice As Long, _
ByVal dwIoControlCode As Long, _
lpInBuffer As Any, _
ByVal nInBufferSize As Long, _
lpOutBuffer As Any, _
ByVal nOutBufferSize As Long, _
lpBytesReturned As Long, _
lpOverlapped As Any) As Long

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(hpvDest As Any, _
hpvSource As Any, _
ByVal cbCopy As Long)

Private Type OSVERSIONINFO
OSVSize As Long
dwVerMajor As Long
dwVerMinor As Long
dwBuildNumber As Long
PlatformID As Long
szCSDVersion As String * 128
End Type

Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" _
(LpVersionInformation As OSVERSIONINFO) As Long


Private Function GetDriveInfo(drvNumber As IDE_DRIVE_NUMBER) As DRIVE_INFO

Dim hDrive As Long
Dim di As DRIVE_INFO

hDrive = SmartOpen(drvNumber)

If hDrive <> INVALID_HANDLE_VALUE Then

If SmartGetVersion(hDrive) = True Then

With di
.bDriveType = 0
.NumAttributes = 0
ReDim .Attributes(0)
.bDriveType = 1
End With

If SmartCheckEnabled(hDrive, drvNumber) Then

If IdentifyDrive(hDrive, IDE_ID_FUNCTION, drvNumber, di) = True Then

GetDriveInfo = di

End If
End If
End If
End If

CloseHandle hDrive

End Function

Private Function IdentifyDrive(ByVal hDrive As Long, _
ByVal IDCmd As Byte, _
ByVal drvNumber As IDE_DRIVE_NUMBER, _
di As DRIVE_INFO) As Boolean


Dim SCIP As SENDCMDINPARAMS
Dim IDSEC As IDSECTOR
Dim bArrOut(OUTPUT_DATA_SIZE - 1) As Byte
Dim cbBytesReturned As Long

With SCIP
.cBufferSize = IDENTIFY_BUFFER_SIZE
.bDriveNumber = CByte(drvNumber)

With .irDriveRegs
.bFeaturesReg = 0
.bSectorCountReg = 1
.bSectorNumberReg = 1
.bCylLowReg = 0
.bCylHighReg = 0
.bDriveHeadReg = &HA0
If Not IsWinNT4Plus Then
.bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
End If

.bCommandReg = CByte(IDCmd)
End With
End With

If DeviceIoControl(hDrive, _
DFP_RECEIVE_DRIVE_DATA, _
SCIP, _
Len(SCIP) - 4, _
bArrOut(0), _
OUTPUT_DATA_SIZE, _
cbBytesReturned, _
ByVal 0&) Then

CopyMemory IDSEC, bArrOut(16), Len(IDSEC)

di.Model = StrConv(SwapBytes(IDSEC.sModelNumber), vbUnicode)
di.SerialNumber = StrConv(SwapBytes(IDSEC.sSerialNumber), vbUnicode)

IdentifyDrive = True

End If

End Function


Private Function IsWinNT4Plus() As Boolean

Dim osv As OSVERSIONINFO

osv.OSVSize = Len(osv)

If GetVersionEx(osv) = 1 Then

IsWinNT4Plus = (osv.PlatformID = VER_PLATFORM_WIN32_NT) And _
(osv.dwVerMajor >= 4)

End If

End Function

Private Function SmartCheckEnabled(ByVal hDrive As Long, _
drvNumber As IDE_DRIVE_NUMBER) As Boolean


Dim SCIP As SENDCMDINPARAMS
Dim SCOP As SENDCMDOUTPARAMS
Dim cbBytesReturned As Long

With SCIP

.cBufferSize = 0

With .irDriveRegs
.bFeaturesReg = SMART_ENABLE_SMART_OPERATIONS
.bSectorCountReg = 1
.bSectorNumberReg = 1
.bCylLowReg = SMART_CYL_LOW
.bCylHighReg = SMART_CYL_HI

.bDriveHeadReg = &HA0
If Not IsWinNT4Plus Then
.bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
End If
.bCommandReg = IDE_EXECUTE_SMART_FUNCTION

End With

.bDriveNumber = drvNumber

End With

SmartCheckEnabled = DeviceIoControl(hDrive, _
DFP_SEND_DRIVE_COMMAND, _
SCIP, _
Len(SCIP) - 4, _
SCOP, _
Len(SCOP) - 4, _
cbBytesReturned, _
ByVal 0&)
End Function

Private Function SmartGetVersion(ByVal hDrive As Long) As Boolean

Dim cbBytesReturned As Long
Dim GVOP As GETVERSIONOUTPARAMS

SmartGetVersion = DeviceIoControl(hDrive, _
DFP_GET_VERSION, _
ByVal 0&, 0, _
GVOP, _
Len(GVOP), _
cbBytesReturned, _
ByVal 0&)

End Function

Private Function SmartOpen(drvNumber As IDE_DRIVE_NUMBER) As Long

If IsWinNT4Plus() Then

SmartOpen = CreateFile("\\.\PhysicalDrive" & CStr(drvNumber), _
GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
ByVal 0&, _
OPEN_EXISTING, _
0&, _
0&)

Else

SmartOpen = CreateFile("\\.\SMARTVSD", _
0&, 0&, _
ByVal 0&, _
CREATE_NEW, _
0&, _
0&)
End If

End Function

Private Function SwapBytes(b() As Byte) As Byte()
Dim bTemp As Byte
Dim cnt As Long

For cnt = LBound(b) To UBound(b) Step 2
bTemp = b(cnt)
b(cnt) = b(cnt + 1)
b(cnt + 1) = bTemp
Next cnt

SwapBytes = b()

End Function


--------------------------------------------------------------------------------


‘Buraya kadar olan kodlar HardDisk Id sini almak içindi şimdi bunu sorgulayalım.
Eğer Sizin belirlediğiniz serial noya eşit ise program sorun çıkarmadan çalışacaktır.Değilse kullanıcı bir mesaj kutusu ile karşılacaktır.


--------------------------------------------------------------------------------


Private Sub Form_Load()
Dim di As DRIVE_INFO
Dim drvNumber As Long
di = GetDriveInfo(drvNumber)
With di
serialno = Trim$(.SerialNumber)
End With
If serialno <> "SizinSerialNonuz" Then ‘sorgulamamız başlıyor
MsgBox "Program pu bilgisayarda çalışmak üzere yazılmamıştır"
End
Else
End If ‘ bitti
End Sub


--------------------------------------------------------------------------------


Aşağıdaki Dosya ile kendi Hard Disk İd nizi bulabilirsiniz.

http://www.hemenpaylas.com/download/409502/SerialNo.zip.html

Evet kodlarımız işte böyle bir sonraki yazımızda elde edilen serinoyu internetteki bir liste üzerinden sorgulayarak her seri no ekleyişinizde kullanıcıların programı yenilemesi gerekmeden yapmasını sağlıcaz.


BeelzeBuB


Yorumlar, Sorular:


Alıntı Yapbildiğim kadarıyla format işleminden sonra hdd nin sanal seri numarası değişiyor
lisans sahibi format atıp programı yeniden kurarsa ne olur..

İşte bende bu yüzden sanal seri nosu değilde fabrikada üzerinde basılan etiketinde olan seri nosunu kullanıyorum :D Eğer programı indirip bakarsan Hard Diskinin üzerindeki etiketteki ile aynı olduğunu görürüsün
Başlık: Shell32.dll nimetleri
Gönderen: OG - 30 Nisan 2006, 23:59:00
Shell32.dll nimetleri

Alıntı Yap" Tesadüfen keşfettiğim bir konuyu paylaşayım dedim.. işte birçok işlemi tek satırda halletmenin yöntemleri.. "

Tesadüfen keşfettiğim bir konuyu paylaşayım dedim.. Şimdi bir çoğumuz klasöre gözat pencereleri vardırya hatta yeni klasör butonu olanından:) bu pencereyi yapmak için veya word,Excel v.s dosyalarını açmak, web sayfası açmak, mail göndermek için modül, birden fazla satırlı apiler felan biliyoruz.. eğer sizde böyle yapıyorsanız, o zaman şaşıracaksınız… sadece bu değil apilerle v.s yapılan birçok win işlemini tek satırda yapabiliriz.. Aklınıza gelen her türlü dosyayı açmak içinde birebir.. deneyin ve görün..

İlk önce Project-References den shell32.dll dosyasını ekleyin.. bilmeyene Windows\system32 dedir..

‘declare kısmına
Dim opt As New Shell
Dim klasor As Folder


Private Sub Command1_Click()
On Error Resume Next
Set klasor = opt.BrowseForFolder(hWnd, "İşte klasöre gözat penceresi, yeni klasör butonlusundan :)", 1)

‘eğer sadece istediğiniz bir dizinten itibarenki klasörleri göstermek istiyorsanız
‘Set klasor = opt.BrowseForFolder(hWnd, "İşte klasöre gözat penceresi, yeni klasör butonlusundan :)", 1,"C:\Deneme\")

With klasor.Items.Item
Text1.Text = .Path
Text2.Text = "İsim: " & .Name & vbCrLf & _
"Klasör Türü: " & .Type & vbCrLf & _
"Konum: " & .Parent & vbCrLf & _
"Son Değişiklik: " & .ModifyDate & vbCrLf
End With
End Sub

Private Sub Command2_Click()
opt.ControlPanelItem "inetcpl.cpl" ‘internet seçeneklerini açar
'desk.cpl 'masaüstü özellikleri
'sysdm.cpl 'sistem özellikleri
'appwiz.cpl 'program ekle kaldır
'daha fazlası için windows\system32 de *.cpl diye aratın
End Sub

Private Sub Command9_Click()
Opt.open "c:\rifocan.doc" ‘ahada word dosyası açıyo :D)
‘Opt.open "c:\rifocan.xls"
‘Opt.open "c:\rifocan.reg" v.s
End Sub

Private Sub Command3_Click()
opt.FindFiles ‘dosya arama
End Sub

Private Sub Command4_Click()
opt.FileRun ‘çalıştır penceresi
End Sub

Private Sub Command5_Click()
opt.Open "http://www.rimerbilisim.tr.cx"
‘opt.Open "mailto:rifaterdemir@hotmail.com"
‘opt.open app.path
End Sub

Private Sub Command6Click()
opt.SetTime
End Sub

Private Sub Command7_Click()
opt.MinimizeAll ‘yelkenler fora ;)
End Sub

Private Sub Command8_Click()
If MsgBox("Windows u kapatacak mısınız?", 32 + 4) = vbNo Then Exit Sub
opt.ShutdownWindows ‘ahada walla windows kapat :D)
End Sub
Başlık: API FONKSİYONLARI
Gönderen: OG - 01 Mayıs 2006, 00:02:09
API FONKSİYONLARI

Alıntı Yap" windowsu yeniden başlatan,cd room açan kapatan kodlar... kısaca bilgisayarınızı kodlarla yönetin "

Windows işletim sisteminin bazı fonksiyonlarının Visual Basic uygulaması içerisinde kullanılması istendiğinde API fonksiyonlarından yararlanılır. Böylece kullanıcı işletim sistemi ile karşı karşıya gelmeden sistemin bazı fonksiyonlarını VB uygulaması içerisinden yapabilmektedir. API (Application Programming Interface)'ler Windows'un dahili fonksiyonlarıdır.

API fonksiyonları hakkında bilgi almak için API Text Viewer kullanılır.
Başlat – Programlar – MS Visual Studio 6.0 – MS Visual Studio 6.0 Tools - API Text Viewer kullanılır.

veya

VB de Add-Ins menüsünden Add-In Manager kullanılabilir. VB 6 API Viewer seçilir ve Load Behaviors çerçevesinden Loaded/Unloaded ve Load On StartUp işaretlenirse VB her açıldığında Add-Ins menüsünden de erişilebilir.

API Viewer da File – Load Text File dan Win32api.txt dosyası seçilir.

Windows'u yeniden başlatma ve kapama
1- API Viewer dan ExitWindowsEx fonksiyonu seçilir.
2- Form tasarlanır.
3- Projeye bir modül eklenir.
4- Kullanacağımız ExitWindowsEx API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Option Explicit

Public Declare Function ExitWindowsEx Lib "user32" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long

5- Private Sub Command1_Click()
Dim sonuc As Long
sonuc = ExitWindowsEx(2, 0)
End Sub

Private Sub Command2_Click()
Dim sonuc As Long
sonuc = ExitWindowsEx(1, 0)
End Sub
CD-ROM sürücüyü açıp-kapatan program
1- API Viewer dan mciExecute fonksiyonu seçilir.
2- Form tasarlanır


3- Projeye bir modül eklenir.
4- Kullanacağımız mciExecute API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Public Declare Function mciExecute Lib "winmm.dll" _
(ByVal lpstrCommand As String) As Long

5- Program kodu yazılır:

Private Sub Command1_Click()
Dim sonuc As Long
sonuc = mciExecute("Set CDAudio door Open")
End Sub

Private Sub Command2_Click()
Dim sonuc As Long
sonuc = mciExecute("Set CDAudio door closed")
End Sub


Dosya kopyalama
1- API Viewer dan CopyFile fonksiyonu seçilir.
2- Form tasarlanır
3- Projeye bir modül eklenir.
4- Kullanacağımız CopyFile ve DeleteFile API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" _
(ByVal lpFileName As String) As Long

5- Program kodu yazılır:

Private Sub Command1_Click()
Dim sonuc As Long, kaynakdosya As String, hedefdosya As String
kaynakdosya = InputBox("Kopyalanacak dosyanın adını ve yolunu giriniz")
hedefdosya = InputBox("Yeni dosyanın adını ve kopyalanacağı yeri giriniz")
sonuc = CopyFile(kaynakdosya, hedefdosya, 0)
End Sub

Private Sub Command2_Click()
Dim sonuc As Long, silinecekdosya As String
silinecekdosya = InputBox("Silinecek dosyanın adını ve yolunu giriniz")
sonuc = DeleteFile(silinecekdosya)
End Sub

Başlık: Listbox ın fare ile kontrolü
Gönderen: OG - 01 Mayıs 2006, 00:04:32
Listbox ın fare ile kontrolü

Alıntı Yap" Listbox elemanlarının liste içinde fare ile taşınması (yer değiştirme) "

Dim ilkOge As String
'tasinacak ogeyi tanimliyoruz
Dim ikinciOge As String
'birinci oge ile yer degisecek ikinci ogeyi tanimliyoruz...
Dim ogeNo As Integer ' listindex i tutacagimiz degisken

Private Sub Form_Load()
'birkac oge ekliyoruz
List1.AddItem "1-Ahmet"
List1.AddItem "2-Ayşe"
List1.AddItem "3-Naciye"
List1.AddItem "4-Pakize"
List1.AddItem "5-Cemal"
List1.AddItem "6-Nuri"
End Sub
Public Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then 'farenin sol tusuna basildiysa
ilkOge = List1.Text 'ilk ogemizi sakliyoruz
ogeNo = List1.ListIndex 'index numaramizi aliyoruz
End If
End Sub
Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If ilkOge = List1.Text Then Exit Sub
'eger tikladigimiz ogenin uzerindeysek islem yapmiyoruz
If ilkOge = "" Then Exit Sub
'secili oge yoksa islem yapmiyoruz

ikinciOge = List1.Text
'ikinci ogenin uzerine gelince onu da aliyoruz

List1.List(ogeNo) = ikinciOge
've ikinci ogeyi az önce bilgilerini sakladigimiz
'birinci ogenin yerine gonderiyoruz


ogeNo = List1.ListIndex
'oge numaramiza su an uzerinde bulundugumuz ikinci ogenin
'index numarasini veriyoruz
List1.List(ogeNo) = ilkOge
've ilk ogemizi ikinci ogenin yerine geciriyoruz...
End Sub
Başlık: SQL QUERYSINI HIZLANDIRMAK
Gönderen: OG - 01 Mayıs 2006, 00:07:56
SQL QUERYSINI HIZLANDIRMAK

Alıntı YapSQL SERVERDA SAYET SIZ BIR TARAFTAN SELECT QUERYSI ILE BIR SEYLER ALMAK ISTERKEN DIGER KULLANICILAR ISE AYNI TABLODA DELETE ,INSERT, UPDATE GIBI QUERYLERINI CALISTIRIYORLAR ISE BU DURUMDA SIZIN SELECT QUERINIZ BINDE BIR DE OLSA DEADLOCK DURUMUNA DUSER BUNU ONLEMEK ICIN UFAK BIR YOL VAR ;


SELECT A_KOLUNU FROM TABLO1 (WITHNOLOCK) WHERE ......

BURDA KOYDUGUMUZ WITHNOLOCK O SIRADA DEGISEN KAYITLARI ESKI HALLERI ILE SIZE GETIRECEK BU SEKILDE SIZDE DEADLOCK DURUMUNA DUSMEZSINIZ AYRICA QUERY PERFORMANSINIDA BELLI BIR OLCUDE HIZLANDIRABILIRSINIZ. UMARIM ISINIZE YARAR
Başlık: Visual Basic'te port kontrolu
Gönderen: OG - 01 Mayıs 2006, 00:10:37
Visual Basic'te port kontrolu

Alıntı YapOpen komutu ile seri ve paralel iletisim saglanabilinir.
Bu komutu hatirlayalim;

Open "Dosya Adi" For ErisimModu As #DosyaNo
Örnek olarak: Open sayilar.txt For Output As #1

Buradaki dosya adi yerine seri port "COM1:" veya "COM2:", yada paralel port "LPT1:" veya "LPT2:" kullanilabilinir.

Simdi Open komutu ile LPT2 portunu açalim ve Write# komutu ile bu porta bilgi gönderelim. Gönderdigimiz bilgiler eger LPT2 üzerinde printer varsa çikti alabiliriz.


Kod:
Private Sub Form_Load()
Open "lpt2:" For Output As #1
Write #1, "Bu satirlar yazicidan cikicak"
Write #1, "Bu kod ile printer kablolarinizda bir sorun olup olmadigini"
Write #1, "kontrol edebilirsiniz"
Close #1
End Sub


Eger printerimiz LPT2 portuna bagliysa bu bilgiler yazicidan çikicaktir.Bu kod ile printerimizin fiziksel ayalarinda bir sorun olup olmadigini da denetlemis oluyoruz.

Bir baska örnekte bugünlerde çok moda olan dialer programlarinin benzeri birsey yaratabiliriz
COM2`ye baglanmis bir modem`e 2252442 nolu numarayi çevirmesini söyleyelim. Modeme bir numara çevirmesini söylemek için "ATDT" komutu kullanilir.


Kod:
Private Sub Form_Load()
Open "com2:" For Binary As #1
Put #1, , "ATDT 2252442" & vbCr
Close #1
End Sub


Yazicaginiz degisik kodlar ile firewall ve virüs koruma programlari kolayca atlatilabilinir.
Başlık: Tüm Form Unload Olaylarında Onay Alma
Gönderen: OG - 01 Mayıs 2006, 00:14:45
Tüm Form Unload Olaylarında Onay Alma

Alıntı Yap" Programınız ister görev yöneticisinden kapansın ister form içinden kapasın yinede onay almadan kapanmayacaktır... "

Private Sub Form_UnLoad(Cancel As Integer)

Set Form1 = Nothing 'Burada formumuzun kapandıktan sonra bellekte yer edinememesini sağlıyoruz

Dim i As Integer
For i = Forms.Count - 1 To 1 Step -1
Unload Forms(i)
Next
If Me.WindowState <> vbMinimized Then 'Formumuzun son halini belleğe kaydettiriyoruz
SaveSetting App.Title, "Settings", "MainLeft", Me.Left
SaveSetting App.Title, "Settings", "MainTop", Me.Top
SaveSetting App.Title, "Settings", "MainWidth", Me.Width
SaveSetting App.Title, "Settings", "MainHeight", Me.Height
End If
Dim intmsg As Integer, intbutton As Integer
intmsg = vbYesNo + vbQuestion
intbutton = MsgBox("Devam etmek istiyormusunuz ?", intmsg, "Porgramdan Cikmak Uzeresiniz")
Select Case intbutton
Case vbYes
Cancel = 0 'form kapatilir
Dim n As Long
Unload Me
Case vbNo
Cancel = -1 'form kapatilmaz
End Select
End Sub


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Select Case UnloadMode
Case vbAppWindows
Dim intmsg1 As Integer, intbutton1 As Integer
intmsg1 = vbYesNo + vbQuestion
intbutton1 = MsgBox("Devam etmek istiyormusunuz ?", intmsg1, "Programdan Cikmak Uzeresiniz")
Select Case intbutton1
Case vbYes
Cancel = 0 'form kapatilir
Unload Me
Case vbNo
Cancel = -1 'form kapatilmaz
End Select

Case vbAppTaskManager 'TaskManager (Görev Yöneticisi) Unload olayı
Dim intmsg2 As Integer, intbutton2 As Integer
intmsg2 = vbYesNo + vbQuestion
intbutton2 = MsgBox("Devam etmek istiyormusunuz ?", intmsg2, "Programdan Cikmak Uzeresiniz")
Select Case intbutton2
Case vbYes
Cancel = 0 'form kapatilir
Unload Me
Case vbNo
Cancel = -1 'form kapatilmaz
End Select

Case vbFormMDIForm 'MDI Form Unload olayı
Dim intmsg3 As Integer, intbutton3 As Integer
intmsg3 = vbYesNo + vbQuestion
intbutton3 = MsgBox("Devam etmek istiyormusunuz ?", intmsg3, "Programdan Cikmak Uzeresiniz")
Select Case intbutton3
Case vbYes
Cancel = 0 'form kapatilir
Unload Me
Case vbNo
Cancel = -1 'form kapatilmaz
End Select
End Select
End Sub

Umarım işinize yarar benim uzun süre işime yaradı sizlerle paylaşmak istedim...
Onay alma işlerleri sırasında form'unuza bazı işlemleri yaptırabilirsiniz mesela...
Başlık: çalışan forma nasıl resim eklenir
Gönderen: OG - 01 Mayıs 2006, 00:20:56
çalışan forma nasıl resim eklenir

Alıntı Yapimage veya pictureboxta aynı işlem yapılıyo şaşırmayın

ben image ile göstereceğim

bu örnek için formunuza commondialog eklemeniz lazım

image1.picture=loadpicture(commondialog1.filename)
Başlık: Visual Basic'te MSFlexGrid ile listelemede maximum hız
Gönderen: OG - 01 Mayıs 2006, 00:22:28
Visual Basic'te MSFlexGrid ile listelemede maximum hız

Alıntı YapArkadaşlar VisualBasic'le uğraşanlar bilirler ki MSFlexGrid'e yada MSHFlexGrid'e eğer kodla listeleme yaptırıyorsanız ve de listeleyeceğiniz kayıtlşar mesela 10000-100000 kayıt gibi çok fazla ise listeleme işlemi çok uzun sürecek ve dolayısıyla programın kitlenmesine bile sebep olabilecektir. İşte bu durmdan kurtulmak için listeleme yapmadan önce gridin visible özelliğini "False" yapıyoruz. Listeleme bittikten sonrada tekrar visible özelliğni "True" yapıyoruz. Bu sayede belki dakikalarca sürecek listeleme işlemi birkaç saniye içinde gerçekleşiyor. Aşağıda örnek kullanım mevcuttur. Hepinize çalışmalarınızda başarılar....



'ÖRNEK KULLANIM:
'---------------------------------------------------------
On Error Resume Next
MSFlexGrid1.Visible = False
Data1.RecordSource = "Select * from [URUNLER] order by [katalogadi] asc"
Data1.Refresh
For i = 1 To Data1.Recordset.RecordCount
MSFlexGrid1.Row = i
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = Data1.Recordset![UrunKodu]
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = Data1.Recordset![UrunAdi]
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = Data1.Recordset![KatalogAdi]
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = Data1.Recordset![AlFiyati]
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = Data1.Recordset![SatFiyati]
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = Data1.Recordset![FiyatTuru]
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = "% " & Data1.Recordset![KDV]
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = Data1.Recordset![StokSayisi]
MSFlexGrid1.Col = 8
MSFlexGrid1.Text = Data1.Recordset![BirimOlcu]
MSFlexGrid1.Col = 9
MSFlexGrid1.Text = Data1.Recordset![GarSuresi]
MSFlexGrid1.Col = 10
MSFlexGrid1.Text = Data1.Recordset![Aciklama]
Data1.Recordset.MoveNext
next
MSFlexGrid1.Visible = True
Başlık: Formunuz daha aktif olsun
Gönderen: OG - 01 Mayıs 2006, 00:24:44
Formunuz daha aktif olsun

Visual Basic te labellarınız veya pictureboxlarınız yeni olaylara rağmen hiçbir değşikliğe uğramıyormu ? Nasıl yani ? Mesela sürekli caption u değişecek bir labelınız veya resmi sürekli değişecek bir picturebox ınız arada sırada da olsa değişimiyor takılıyor mu ? İşte o zaman formunuzun AutoRedraw özelliğini True yapın ve bu gibi sorunlardan kurtulun....Bu özelliği her zaman True yapmanız önerilir.Özellikle hareketli objeleri kullanıyor veya oyun yapıyorsanız.....
Başlık: Kullandığınız bilgisayarın dış ip numarası, iç ip n
Gönderen: OG - 01 Mayıs 2006, 00:29:35
Kullandığınız bilgisayarın dış ip numarası, iç ip numarası, bilgisayarınızın adını, kullanıcı adını

Alıntı YapKullandığınız bilgisayarın dış ip numarası, iç ip numarası, bilgisayarınızın adını, kullanıcı adını gösteren ufak bir çalışma
Not:Yazı içindeki bazı kodlar bu site içinden alınmış ve yine sizlere bir çalışma olarak sunulmuştur.Emeği geçenlere teşekkür ederim.

bir form açın
form içine 1 adet frame ekleyin
frame içine 5 adet label, 2 adet buton yerleştirin
1 adet timer, 1 adet inet nesnesi yerleştirdikten sonra aşağıdaki kodu formunuza yerleştirin



Function VeriAl(AnaMetin, OnMetin, ArkaMetin) ' dış İp numarasını öğrenmek için
Dim Baslangic, Bitis, Uzunluk As Long
Baslangic = InStr(1, AnaMetin, OnMetin) + Len(OnMetin)
Bitis = InStr(Baslangic, AnaMetin, ArkaMetin)
Uzunluk = Bitis - Baslangic
VeriAl = Mid(AnaMetin, Baslangic, Uzunluk)
End Function
Public Function NetworkUserName() As String ' network user nameyi bulmak
Dim lpBuff As String * 25
Dim retval As Long
retval = GetUserName(lpBuff, 25)
NetworkUserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
End Function

Private Sub Command1_Click()' formunuzu kapatmak için
End
End Sub

' internet bağlantınız kesildiği zaman Dış ip numaranız değişir
' yeni numarayı öğrenmek için tıklayın
Private Sub Command2_Click()
Timer1.Enabled = True
End Sub

Private Sub Form_Load()
Label1.ForeColor = vbBlue
Label2.ForeColor = vbBlue
Label3.ForeColor = vbBlue
Label4.ForeColor = vbBlue
Label5.ForeColor = vbBlue
Label1.FontBold = True
Label2.FontBold = True
Label3.FontBold = True
Label4.FontBold = True
Label5.FontBold = True
Frame1.Caption = "Dış-İç İp, Kullanıcı Adı,Pc Adı "
Frame1.ForeColor = vbRed
Frame1.FontBold = True
Command1.Caption = "Kapat"
Command2.caption="Yenile"
End Sub
Private Sub Timer1_Timer()
Label1 = "Dış İp No : " + (VeriAl(Inet1.OpenURL("www.whatismyip.com"), "displaycopy(' ", "' )")) ' dış ip numarasını bul
Label2 = "Pc Adı : " + GetIPHostName() ' PC adını bul
Label3 = "İç İp No : " + GetIPAddress() ' iç ip numarası
If Label3 = "İç İp No : " + "127.0.0.1" Then ' internet bağlantısı kesikse ikaz ver
Label5 = "Bağlantı Kesik"
Else
Label5 = "Bağlantı Sağlandı"
End If
Timer1.Enabled = False
Call NetworkUserName
Label4 = "Kullanıcı Adı : " + NetworkUserName
End Sub
Başlık: Listbox ları senkronize etmek
Gönderen: OG - 01 Mayıs 2006, 00:36:07
Listbox ları senkronize etmek

Alıntı YapListbox ları nasıl sekronize ederiz yani üç tane listbox umuz olduğunu düşünün
Müşteri adı , müşteri soyadi , müşteri bilgisi .Şimdi 3 tane listboxu ve bu listboxların ne işe yaradığını anlatan labelleri yaptık
Şimdi bir sorunumuz olacak diyelimki biz 1 .listboxtan müşteri adını seçtiğimizde diğer listboxların o müşteriyle ilgili soyisim ve müşteri bilgilerine ulaşamamızı VB
Nasıl yapacak ? işte burada listboxların iki özelliği topindex ve listindex özelliği orataya çıkıyor.

Şimdi kodumuzu yazalım

Private sub List1_click (index as integer )

Dim i , ind , tind

ind = List1 (index).listindex
tind = List1(index).topindex
For i=0 to 2

List1(i).listindex=ind
List1(i).topindex =tind
Next
End sub

İşte bu kod ile Listboxları istediğiniz gibi sekronize edebilirsiniz. Seçtiğiniz 1. listbox ların 1 kaydı için , 2. listboxların ve 3. listboxların 1. kayıtları karşınıza çıkar.
Başlık: PROGRAMINIZA ONLINE DOVIZ KURUNU GÖMÜN
Gönderen: OG - 01 Mayıs 2006, 00:57:33
PROGRAMINIZA ONLINE DOVIZ KURUNU GÖMÜN

Alıntı Yapİlk önce Project/Components Menüsünden İnternet Tarnsfer Control Seçeneğini seçip uygula diyoruz.Daha sonra Form'umuza 1 tane inet ve 34 tane text ekliyoruz. Ve ardındanşu kodları yazıyoruz. (Döviz Kurunu TCMB'nin sitesinden alır)

Private Sub Command1_Click()
Dim strkur
strkur = Inet1.OpenURL("http://www.tcmb.gov.tr/kurlar/today.html") 'TCMB Sitesine bağlanır.
Text1.Text = Mid(strkur, InStr(strkur, "USD") + 41, 7) 'Alış Fiyatını texte yazdırır
Text2.Text = Mid(strkur, InStr(strkur, "USD") + 53, 9) 'Satış Fiyatını texte yazdırır
Text3.Text = Mid(strkur, InStr(strkur, "AUD") + 41, 7)
Text4.Text = Mid(strkur, InStr(strkur, "AUD") + 53, 9)
Text5.Text = Mid(strkur, InStr(strkur, "DKK") + 41, 7)
Text6.Text = Mid(strkur, InStr(strkur, "DKK") + 53, 9)
Text7.Text = Mid(strkur, InStr(strkur, "EUR") + 41, 7)
Text8.Text = Mid(strkur, InStr(strkur, "EUR") + 53, 9)
Text9.Text = Mid(strkur, InStr(strkur, "GBP") + 41, 7)
Text10.Text = Mid(strkur, InStr(strkur, "GBP") + 53, 9)
Text11.Text = Mid(strkur, InStr(strkur, "CHF") + 41, 7)
Text12.Text = Mid(strkur, InStr(strkur, "CHF") + 53, 9)
Text13.Text = Mid(strkur, InStr(strkur, "SEK") + 41, 7)
Text14.Text = Mid(strkur, InStr(strkur, "SEK") + 53, 9)
Text15.Text = Mid(strkur, InStr(strkur, "CAD") + 41, 7)
Text16.Text = Mid(strkur, InStr(strkur, "CAD") + 53, 9)
Text17.Text = Mid(strkur, InStr(strkur, "KWD") + 41, 7)
Text18.Text = Mid(strkur, InStr(strkur, "KWD") + 53, 9)
Text19.Text = Mid(strkur, InStr(strkur, "NOK") + 41, 7)
Text20.Text = Mid(strkur, InStr(strkur, "NOK") + 53, 9)
Text21.Text = Mid(strkur, InStr(strkur, "SAR") + 41, 7)
Text22.Text = Mid(strkur, InStr(strkur, "SAR") + 53, 9)
Text23.Text = Mid(strkur, InStr(strkur, "JPY") + 41, 7)
Text24.Text = Mid(strkur, InStr(strkur, "JPY") + 53, 9)
Text25.Text = Mid(strkur, InStr(strkur, "BGL") + 41, 7)
Text26.Text = Mid(strkur, InStr(strkur, "BGL") + 53, 9)
Text27.Text = Mid(strkur, InStr(strkur, "SYP") + 41, 7)
Text28.Text = Mid(strkur, InStr(strkur, "SYP") + 53, 9)
Text29.Text = Mid(strkur, InStr(strkur, "JOD") + 41, 7)
Text30.Text = Mid(strkur, InStr(strkur, "JOD") + 53, 9)
Text31.Text = Mid(strkur, InStr(strkur, "ILS") + 41, 7)
Text32.Text = Mid(strkur, InStr(strkur, "ILS") + 53, 9)
Text33.Text = Mid(strkur, InStr(strkur, "IRR") + 41, 7)
Text34.Text = Mid(strkur, InStr(strkur, "IRR") + 53, 9)
End Sub

OG Notu: Arkadaşlar ben denedim güzel çalışıyor. Kurların içinden gerekli olanları secebilirsiniz. Alınan değerler "Döviz Alış" "Döviz Satış" sırası iledir. "Efektif Alış ve Satış" olarak kullanmak isterseniz 41 değerini 70 , 53 değerini 81 ile değiştirmeniz gerekir.
Başlık: Common Dialoglarda Birden Fazla Dosya türünü Açmak İste
Gönderen: OG - 01 Mayıs 2006, 01:15:07
Common Dialoglarda Birden Fazla Dosya türünü Açmak İstediğinizde

Alıntı YapCommonDialog.InitDir = App.path
CommonDialog.DialogTitle = "Select Multi Page TIFF"
CommonDialog.DefaultExt = "*.TIF"
CommonDialog.filter = "TIF Files|*.TIF|TIFF Files|*.TIFF"

gibi araya | işareti koyarak farklı dosya tiplerini veya açıklamalar yazabilirsiniz..
Başlık: İnet nesnesi ile pc kontrolü
Gönderen: OG - 01 Mayıs 2006, 01:33:18
İnet nesnesi ile pc kontrolü

Alıntı Yapİnet nesnesi ile pc kontrolune basit bir ornek vermek istedim :)

Mantık Şu inet ile programimiz belirledigimiz txt dosyasina bağlanarak orda ki yazılanı kontrol
ederek İşlem yapması........

Formumuza 1 Inet nesnesi 1 Timer ve 1 tane de textbox ekliyoruz (timer intervalı 1000 olmalı)


Öncelikle free bir host ediniyoruz.Daha sonra icine kendi belirledigimiz bir isimde txt dosyasi
koyuyoruz.Txt dosyasina Benim yaptıgımın programda "Kapan" dedim ama siz istediginizi yazabilirsiniz...


Private Sub Timer1_Timer()
Text1.Text = Inet1.OpenURL("http://www.orneksite.com/ornek.txt")
If Text1.Text = "Kapan" Then 'Kapan yerine sitenizdeki txt dosyasındaki komutu yazın.
Shell "shutdown.exe -s", vbNormalFocus 'Herhangibir komut yazın.

End If

End Sub
Başlık: Windows, System v.s klasörlerinin yerini, bilgisayar ismi v
Gönderen: OG - 01 Mayıs 2006, 01:40:06
Windows, System v.s klasörlerinin yerini, bilgisayar ismi, domain adı v.s

Alıntı Yap
" Environ komutu ve özellikleri "

Benim gördüğüm bu kodla tanışmayan bir çok programcı arkadaş Windows, System v.s klasörlerinin yerini, bilgisayar ismi, domain adı v.s gibi bilgileri apilerle birden fazla satır kodlarla ulaşır. İşte size Environ komutu.
Tek satır kodla çok güzel sonuçlar elde edebilirsiniz.

Tabi bu Environ komutundan sonuç elde etmek için bazı parametrelere ihtiyaç duyar bu parametrelerin bazılarını aşağıya yazdım.

Kullanımı ;

Dim winyol
Winyol = Environ("WinDir") ‘işte bu satırla Windows klasörünün yolunu buluruz..
Text1.text= winyol

İşte bazı parametreler;
COMPUTERNAME=RIFAT ‘bilgisayar isminiz
ComSpec=C:\WINDOWS\system32\cmd.exe ‘Ms-Dos kontrol paneli yolu
HOMEDRIVE=C: ‘Geçerli işletim sisteminin yüklü olduğu sürücü
HOMEPATH=\Documents and Settings\Administrator ‘Geçerli kullanıcının kullanıcı klasörü
LOGONSERVER=\\RIFAT ‘Pc nin kullandığı server adı
OS=Windows_NT Â‘İşletim sistemi türü
USERDOMAIN=RIFAT ‘Veri alışverişi yaptığı domain ismi
USERNAME=Administrator ‘Kullanıcı ismi
USERPROFILE=C:\Documents and Settings\Administrator ‘Açık olan kullanıcı profilinin klasörü
windir=C:\WINDOWS ‘Windows klasörü

Diğer bütün parametreleri görmek için Ms-Dos komutunda set yazıp enter tıklayın.

Private Sub Form_Load()
' bu şekildede bütün özelliklerini text2 ye aktarabilirsiniz
Dim i As Integer
Dim txt As String

For i = 1 To 10000
If Environ(i) <> "" Then
txt = txt & Environ(i) & vbCrLf
Else
Exit For
End If
Next i
Text2.Text = txt
End Sub
Başlık: Programınızı Regedit'e Kaydettirin
Gönderen: OG - 01 Mayıs 2006, 01:50:04
Programınızı Regedit'e Kaydettirin

Alıntı YapAçıklama : Eğer yaptığınız bir programda visual basic′in .ocx′leri veya dll′leri veya ekstradan oluşturduğunuz .ocx′ler veya dll′ler başka bilgisayarlarda çalışmıyorsa bunu şu şekilde düzeltebilirsiniz.Bu yöntemle Programınızda kullandığınız .ocx′ler veya dll′ler aşağıdaki kodlar sayesinde regedite kaydedilecek ve programınız bi daha hata vermiyecektir.Bu kodları programınızın load eventine yazabilirsiniz.

* Formunuza 3 adet text kutusu koyun (ben örnek göstermek için 3 tane koydum siz daha fazla .ocx′siniz veya dll′liniz varsa o kadar eklersiniz), 1 tanede command button koyun.

* Text1′e ocx′sinizin yolunu yazın, text2′yede dll′linizin yolunu yazın.

Not:Aşağıdaki kodları direk forma yapıştırıp çalıştırırsanız, daha iyi anlarsınız.

Private Sub Form_Load()
Text1.Text = "regsvr32" & " " & Chr(34) & App.Path & Chr(92) & "mscomctl.ocx" & Chr(34) & " " & "/s"
Text2.Text = "regsvr32" & " " & Chr(34) & App.Path & Chr(92) & "msvbvm60.dll" & Chr(34) & " " & "/s"
End Sub

Private Sub Command1_Click()
Call Shell(Text1.Text)
Call Shell(Text2.Text)
End Sub

* Yukarıdaki /s ne anlama geliyor, hemen onu belirtiyim.Eğer onları koymazsanız yine kaydolur fakat size kaydoldu diye bi uyarı penceresi gelir(isterseniz bi de öyle yaparak deneyin), eğer koyarsanız o uyarı penceresi gelmeden kaydolur ve buda programın daha hoş durmasını sağlar.
Başlık: vb üzerinden excel'de arama yapmak
Gönderen: OG - 01 Mayıs 2006, 02:25:10
vb üzerinden excel'de arama yapmak

Alıntı Yap
" Diyelimki bir okul programı hazırladınız ve programı yüklerken okul koduna göre (yaklaşık 45000 kurum kodu var) okulun adını girdirmek istiyorsunuz.Yani programı yüklerken ilk açılışta okul kodunu isteyecek ve programa okulun adını atacak. "

Bu kodları, hazırladığım bir okul zili programında kullanmıştım, aynen yolluyorum.....

Açıklama :
Bir adet klasör oluşturun, http://ilsis.meb.gov.tr/home/download/devlet_kurumlari.zip adresinden kurum kodları listesini çekin, zipi açın, zipin içindeki devlet_kurumlari.xls dosyasını oluşturduğunuz klasörün içine atın.

Project/References menülerinden "Microsoft Excel 10.0 Object Library" ekleyin,

Formunuza 9 adet text kutusu, 9 adet label ve bir adet command butonu ekleyin,

ve aşağıdaki kodları olduğu gibi forma yapıştırın ve çalıştırın.

Private Sub Form Load()
Dim c As Excel.Range
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet


Sub ExcelAra()
On Error GoTo hata
Set xlApp = New Excel.Application

Text2.Text = ""

Set xlBook = Workbooks.Open(App.Path & "\devlet_kurumlari.xls", , True)
Set xlSheet = xlBook.Worksheets("sheet 1")


With xlSheet.Range("a1:c65536")
Set c = .Find(Trim(Text1.Text), lookin:=xlValues)
If Not c Is Nothing Then

firstAddress = c.Address

Text2.Text = c.Address


Range(Text2.Text).Select
Text3.Text = Excel.ActiveCell.Row

′??????_______Kurum Adı
Range("$d$" & Text3.Text).Select
Text4.Text = Excel.ActiveCell

′??????_______Kurum İli
Range("$a$" & Text3.Text).Select
Text5.Text = Excel.ActiveCell

′??????_______Kurum İlçesi
Range("$b$" & Text3.Text).Select
Text6.Text = Excel.ActiveCell

′??????_______Kurum Telefonu
Range("$e$" & Text3.Text).Select
Text7.Text = Excel.ActiveCell

′??????_______Kurum Fax
Range("$f$" & Text3.Text).Select
Text8.Text = Excel.ActiveCell

′??????_______Kurum Adres
Range("$g$" & Text3.Text).Select
Text9.Text = Excel.ActiveCell



Do
c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

If Text2.Text = "" Then Text2.Text = "Bulunamadı..."




xlBook.Close False
xlApp.Quit

Exit Sub
hata:
MsgBox Err.Description
End Sub



Private Sub Command1_Click()
ExcelAra
End Sub
Başlık: text box ' ı form boyutuyla aynı yapma
Gönderen: OG - 01 Mayıs 2006, 03:21:57
text box ' ı form boyutuyla aynı yapma

Alıntı YapSub Form_Resize()
Text1.Top = 0
Text1.Left = 0
Text1.Width = ScaleWidth
Text1.Height = ScaleHeight
End Sub
Başlık: Excele yeni işlev
Gönderen: OG - 01 Mayıs 2006, 04:43:57
Excele yeni işlev

Alıntı Yap
" Excele yeni işlev fonksiyon kazandırma "

Excel kullananlar bilirler. Excelin kendi standart fonksiyonları vardır. Topla,etopla,eğer,esayıysa gibi ama biz excelin standart fonsiyonlarında ihtiyacımızı karşılayamıyoruz onun için kendi fonksiyonumuzu tanıtıyoruz. Bunun için Visual Basic bilgimiz olması gerekmektedir.

Excel Dosyasını açın. Araçlar>Makro>Visual basic düzenleyicisini açın.
yeni bir modul ekleyin. Modulun içerisine

Function SINIFAL(MAMULKODU As String)

SINIFAL = Mid(MAMULKODU, 1, 2) & Mid(MAMULKODU, 4, 4) & Mid(MAMULKODU, 3, 1) & Mid(MAMULKODU, 13, 2)

End Function

Daha Sonra excel dosyasını farklı kaydet diyerek kayıt türü olarak Microsoft Office excel eklentisi (*.xla) seçin ve kaydedin.

Kaydedilecek adrese "c:Documents and settingsAdministratorApplication DataMicrosoftAddIns" burasıdır.

artık işimiz bitmiştir. Fonksiyonumuzu oluşturduk şimdi sıra kullanmaya geldi boş bir excel çalışma kitabi açtık.

örnek A1 hücresinde benim 200ARGSS030403001 diye bir Ürün kodum vardı. Ama bana lazım olan bu kod içerisinden 20ARGS003 sınıf kodunu görmek istiyordum. Hemen oluşturduğum fonksiyonu çalıştırdım.

Herhangi boş bir hücreye =SINIFAL(A1) yazdım entere bastım bana 20ARGS003 diye sonuç verdi.

Aynı işi birde excelin kendi fonksiyonu ile denersek;

parçaal(A1;1; 2) & parçaal(A1; 4; 4) & parçaal(A1; 3; 1) & parçaal(A1; 13; 2) aynı sonucu alırız

ama ben yukarıdaki gibi parçaal fonksiyonu ilede yapardım bu işi ama daha uzun zaman alacağı için bir fonksiyon yazdım ve bu işi kolaylaştırdım.

Yorumlar:

Alıntı YapFunction Sayıyadönüştür(Sayıdönüştür) As String
If Sayıdönüştür = "1/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "1400"
If Sayıdönüştür = "1/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "1340"
If Sayıdönüştür = "1/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "1280"
If Sayıdönüştür = "1/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "1220"
If Sayıdönüştür = "2/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "1340"
If Sayıdönüştür = "2/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "1280"
If Sayıdönüştür = "2/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "1220"
If Sayıdönüştür = "2/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "1165"
If Sayıdönüştür = "2/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "1110"
If Sayıdönüştür = "2/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "1055"
If Sayıdönüştür = "3/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "1280"
If Sayıdönüştür = "3/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "1220"
If Sayıdönüştür = "3/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "1165"
If Sayıdönüştür = "3/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "1110"
If Sayıdönüştür = "3/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "1055"
If Sayıdönüştür = "3/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "1010"
If Sayıdönüştür = "3/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "965"
If Sayıdönüştür = "3/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "920"
If Sayıdönüştür = "4/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "1165"
If Sayıdönüştür = "4/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "1110"
If Sayıdönüştür = "4/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "1055"
If Sayıdönüştür = "4/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "1010"
If Sayıdönüştür = "4/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "965"
If Sayıdönüştür = "4/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "920"
If Sayıdönüştür = "4/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "855"
If Sayıdönüştür = "4/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "850"
If Sayıdönüştür = "4/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "815"
If Sayıdönüştür = "5/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "1010"
If Sayıdönüştür = "5/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "965"
If Sayıdönüştür = "5/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "920"
If Sayıdönüştür = "5/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "885"
If Sayıdönüştür = "5/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "850"
If Sayıdönüştür = "5/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "815"
If Sayıdönüştür = "5/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "785"
If Sayıdönüştür = "5/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "755"
If Sayıdönüştür = "5/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "725"
If Sayıdönüştür = "6/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "885"
If Sayıdönüştür = "6/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "850"
If Sayıdönüştür = "6/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "815"
If Sayıdönüştür = "6/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "785"
If Sayıdönüştür = "6/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "755"
If Sayıdönüştür = "6/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "725"
If Sayıdönüştür = "6/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "700"
If Sayıdönüştür = "6/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "675"
If Sayıdönüştür = "6/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "650"
If Sayıdönüştür = "7/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "785"
If Sayıdönüştür = "7/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "755"
If Sayıdönüştür = "7/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "725"
If Sayıdönüştür = "7/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "700"
If Sayıdönüştür = "7/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "675"
If Sayıdönüştür = "7/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "650"
If Sayıdönüştür = "7/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "630"
If Sayıdönüştür = "7/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "610"
If Sayıdönüştür = "7/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "590"
If Sayıdönüştür = "8/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "700"
If Sayıdönüştür = "8/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "675"
If Sayıdönüştür = "8/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "650"
If Sayıdönüştür = "8/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "630"
If Sayıdönüştür = "8/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "610"
If Sayıdönüştür = "8/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "590"
If Sayıdönüştür = "8/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "575"
If Sayıdönüştür = "8/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "560"
If Sayıdönüştür = "8/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "545"
If Sayıdönüştür = "9/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "630"
If Sayıdönüştür = "9/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "610"
If Sayıdönüştür = "9/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "590"
If Sayıdönüştür = "9/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "575"
If Sayıdönüştür = "9/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "560"
If Sayıdönüştür = "9/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "545"
If Sayıdönüştür = "9/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "530"
If Sayıdönüştür = "9/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "515"
If Sayıdönüştür = "9/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "500"
If Sayıdönüştür = "10/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "575"
If Sayıdönüştür = "10/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "560"
If Sayıdönüştür = "10/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "545"
If Sayıdönüştür = "10/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "530"
If Sayıdönüştür = "10/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "515"
If Sayıdönüştür = "10/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "500"
If Sayıdönüştür = "10/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "490"
If Sayıdönüştür = "10/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "480"
If Sayıdönüştür = "10/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "470"
If Sayıdönüştür = "11/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "530"
If Sayıdönüştür = "11/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "515"
If Sayıdönüştür = "11/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "500"
If Sayıdönüştür = "11/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "490"
If Sayıdönüştür = "11/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "480"
If Sayıdönüştür = "11/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "470"
If Sayıdönüştür = "11/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "460"
If Sayıdönüştür = "11/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "450"
If Sayıdönüştür = "11/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "440"
If Sayıdönüştür = "12/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "490"
If Sayıdönüştür = "12/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "480"
If Sayıdönüştür = "12/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "470"
If Sayıdönüştür = "12/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "460"
If Sayıdönüştür = "12/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "450"
If Sayıdönüştür = "12/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "440"
If Sayıdönüştür = "12/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "435"
If Sayıdönüştür = "12/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "430"
If Sayıdönüştür = "12/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "425"
If Sayıdönüştür = "13/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "460"
If Sayıdönüştür = "13/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "450"
If Sayıdönüştür = "13/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "440"
If Sayıdönüştür = "13/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "435"
If Sayıdönüştür = "13/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "430"
If Sayıdönüştür = "13/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "425"
If Sayıdönüştür = "13/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "420"
If Sayıdönüştür = "13/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "415"
If Sayıdönüştür = "13/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "410"
If Sayıdönüştür = "14/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "435"
If Sayıdönüştür = "14/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "430"
If Sayıdönüştür = "14/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "425"
If Sayıdönüştür = "14/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "420"
If Sayıdönüştür = "14/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "415"
If Sayıdönüştür = "14/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "410"
If Sayıdönüştür = "14/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "405"
If Sayıdönüştür = "14/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "400"
If Sayıdönüştür = "14/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "395"
If Sayıdönüştür = "15/9" Or Sayıdönüştür = "9" Then Sayıyadönüştür = "420"
If Sayıdönüştür = "15/8" Or Sayıdönüştür = "8" Then Sayıyadönüştür = "415"
If Sayıdönüştür = "15/7" Or Sayıdönüştür = "7" Then Sayıyadönüştür = "410"
If Sayıdönüştür = "15/6" Or Sayıdönüştür = "6" Then Sayıyadönüştür = "405"
If Sayıdönüştür = "15/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "400"
If Sayıdönüştür = "15/4" Or Sayıdönüştür = "4" Then Sayıyadönüştür = "395"
If Sayıdönüştür = "15/3" Or Sayıdönüştür = "3" Then Sayıyadönüştür = "390"
If Sayıdönüştür = "15/2" Or Sayıdönüştür = "2" Then Sayıyadönüştür = "385"
If Sayıdönüştür = "15/1" Or Sayıdönüştür = "1" Then Sayıyadönüştür = "380"
If Sayıdönüştür = "1/5" Or Sayıdönüştür = "5" Then Sayıyadönüştür = "0"

Exit Function
Sayıyadönüştür = Sayıdönüştür
End Function
Memur Maaş Göstergeleri
Başlık: Comport Send Receiver
Gönderen: OG - 05 Kasım 2006, 20:34:48
http://rapidshare.com/files/2124217/CommPortSendRecv.zip.html
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 03 Ocak 2007, 17:41:00
Alıntı Yap"768 adet VBörneği downlaod linki-Tek dosya halinde"

http://www.filearsivi.com/download.php?file=07b12fbcfb0fcd36f2103f63f8b673c9

Dosya boyutu 20 MB olup tek dosya halindedir (rar şeklinde)
(rar olarak şıkıştırılmış dosyaları açmak için winrar programı kulalnılır)

VB6 and ActiveX          - 9   adet örnek
VB6 and ASP              - 42  adet örnek
VB6 and CAB files       - 1   adet örnek
VB6 and Controls          - 69  adet örnek
VB6 and Conversions     - 4   adet örnek
VB6 and DAT Files          - 2   adet örnek
VB6 and Email               - 16  adet örnek
VB6 and Encryption        - 16  adet örnek
VB6 and Extraction         - 6   adet örnek
VB6 and Files                 - 2   adet örnek
VB6 and Firewalls          - 2   adet örnek
VB6 and Forms             - 8   adet örnek
VB6 and Graphics          - 38  adet örnek
VB6 and Help               - 1   adet örnek
VB6 and Icons              - 7   adet örnek
VB6 and Images           - 12  adet örnek
VB6 and Information     - 8   adet örnek
VB6 and Internet          - 44  adet örnek
VB6 and Keyboard        - 2   adet örnek
VB6 and Make Exe        - 3   adet örnek
VB6 and Math               - 2   adet örnek
VB6 and Media              - 104 adet örnek
VB6 and Menus             - 2   adet örnek
VB6 and Mp3                - 9   adet örnek
VB6 and Networking      - 3   adet örnek
VB6 and Registry          - 36  adet örnek
VB6 and ScreenSavers  - 1   adet örnek
VB6 and Security          - 3   adet örnek
VB6 and Shell               - 2   adet örnek
VB6 and Source Codes  - 1   adet örnek
VB6 and SQL                - 1   adet örnek
VB6 and Time               - 1   adet örnek
VB6 and Windows         - 23  adet örnek

txt örnek                      - 134 adet örnek
Bas Files (Modül)          - 196 adet örnek



Kodları çalıştırmadan önce mutlaka kontrol ediniz...
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 03 Ocak 2007, 19:55:08
CALLER-ID çalışmaları için modem test
http://rapidshare.com/files/10062297/modem_test.zip.html

Alıntı YapATZ yazıp Enter tuşuna basıyoruz. Muhtemelen modeminizden OK diye cevap alacaksınız. Böyle yaparak modemde daha önceden verilmiş olan komut dosyası varsa öncelikle onları temizledik. Sonra AT+VCID=1 yazıp entere basınız. Alacağınız cevap Error veya OK olacaktır. OK cevabını aldınızsa modeminiz Clip özelliğini destekliyor, Eğer Error aldınızsa iki ihtimal var demektir. Ya modemizni Clip özelliğini desteklemiyor ya da modeminizin clip özelliği bu komutla anlaşılmıyor. O halde bir de şu komutu deneyin AT#CID=1 dönecek değere göre biraz önce söylediklerim aynen geçerlidir. Zira modemin Clip özelliğinin var olup olmadığını anlamak için modemin markasına göre farklı komutlar kullanmak gerekir. Yukarıda ikisini verdiğim komut setlerinden bazılarınıda aşağıya yazıyorum. "


AT%CCID=1
AT#CC1
AT*ID1
Eğer bunlardan birisinde OK almışsanız modemiiniz Clip özelliğini destekliyor anlamına gelir.
3. Ve son şart program, Eğer bu özelliği kullanan bir programınız yoksa elbetteki bunların hepsi boş.
Formunuza bir Mscomm nesnesi ekleyin ve şu şekilde özelliklerini atayın.
MSComm1.RThreshold = 1
MSComm1.InputLen = 1

Formun Load yordamına
MSComm1.CommPort = 'Modemin bağlı olduğu portu yaz
MSComm1.PortOpen = True 'Portu aç

Sub Baglan
MSComm1.Output = "ATZ" +vbCr
MSComm1.Output = "AT+VCID=1" + vbcr
"AT#CID=1" + vbcr
. .
. .
'Yukarıdaki komutların hangisini modeminiz destekliyorsa buraya o komutu yazacaksınız.


Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent
Case comEvReceive
Do
stComChar = MSComm1.Input
Case vbCr
ProcessEvent stEvent
stEvent = ""
Case Else
stEvent = stEvent + stComChar
End Select
Loop While MSComm1.InBufferCount
End Select
End Sub

Sub ProcessEvent(sTemp As String)
If Len(sTemp) < 1 Then Exit Sub

Select Case Mid(sTemp, 2, 4)
Case "Date"
Tarih = Left(Right(sTemp, 4), 2) & "/" & Right(sTemp, 2)
Case "Time"
Saat = Left(Right(sTemp, 4), 2) & ":" & Right(sTemp, 2)
Case "NMBR"
TelNo = Right(sTemp, Len(sTemp) - 6)
End Select
End Sub
'Formun Unload yordamına da
MSComm1.PortOpen = False 'Portu Kapat yazmayı unutmayın.
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 03 Ocak 2007, 20:14:20
Herhangi Bir Oynatıcıdan (Media Player vb) bağımsız DirectX ile video, audio çalma.

Kod:
http://rapidshare.com/files/10064453/kod.zip.html

Alıntı Yap" Çoğu kişinin mahkum olduğu media playerin devrini sonlandıralım mı :) Buyurun "

Bir çok kişi directx ile neler yapıldığını bilmiyor, bazı animasyonları,sesleri ve daha çok şeyleri bildiğiniz directx ile yapabilirsiniz. Ses dosyası çalmak için karşı tarafta media player yüklü mü,versiyonu deskteler mi gibi sorular da ortadan kalkacak, çünkü directx her windows ile standart olarak gelmekte, win98 de 6.5 sürümü sanırım.. xp de de 8.0 :) şimdi biz directx in quarz.dll dosyasını kullanacağız.. Bununla mp3 ümüzü çaldıracağız..


Öncelikle menüden project ==> Referanceden quarz.dll yi ekleyin, system32 içinde olacaktır



'Sonra bir modül oluşturun ve bu kodları yapıştırın


Dim Player As FilgraphManager


'MediaPlayer olmadan mp3 çalma.DirectX yardımı ile (quarz.dll)


'çalma kodumuz

Sub StartPlay(dosya As String)

Set Player = New FilgraphManager 'Player
Player.RenderFile dosya 'Dosya yükle
Player.Run ' playeri çalıştır


End Sub

'durma kodumuz

Sub dur()

If Player Is Nothing Then Exit Sub
Player.Stop
End Sub



modülde dur ve çal olarak iki değer belirttik bunu formumuzda kullanarak istediğimiz dosyayı çalacağız


şimdi formumuza iki buton koyalım

'çal butonu

Private Sub Command1_Click()
Call StartPlay("C:\müzikler\aaaa.mp3" ) ' belirtilen yoldaki müziği çalar
End Sub


'durdur butonu

Private Sub Command2_Click()
dur
End Sub
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 09 Ocak 2007, 22:41:17
Program yazdınız ve kopyalanmasını istemiyorsunuz. Buna bir yöntem HDD seri nosunu kontrol ettirmektir. Her formattan sonra değişen seri no işe yaramayacağı için HDD'ın fabrika çıkış seri nosuna ihtiyacınız olacaktır. Bununla ilgili yardımcı kodlar aşağıdaki gibidir.

http://rapidshare.com/files/10980140/HDD_serial__sorgulama.zip.html

http://www.4shared.com/file/8813769/f1487cd4/HDD_serial__sorgulama.html
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 13 Ocak 2007, 19:50:11
Formunuz Transparan açılıp kapansın.
http://www.4shared.com/file/8813880/1d4baec3/transparan_form.html

Prpgramınız windows açılışında beraber açılsın
http://www.4shared.com/file/8814110/5e8f16bc/Windows_acilisinda_prg_calissin.html
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 13 Ocak 2007, 20:01:47
klavyedeki bütün tuşların kullanımı

Alıntı Yap" klavyedeki bütün tuşların kullanımı "

Merhaba arkadaşlar klavye tuşları ile ugrasacaklara basit bir örnek
diğer tuşlar için vbkey yazdıktan sonra ctrl+space tuşlarına basınız.


Örnek Kod aşağıda

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyEscape Then Print "ESC TUŞU"
If KeyCode = vbKeyTab Then Print "TAB TUŞU"
If KeyCode = vbKeyCapital Then Print "CAPSLOCK TUŞU"
If KeyCode = vbKeyShift Then Print "SHİFT TUŞU"
If KeyCode = vbKeyControl Then Print "KONTROL TUŞU"
If KeyCode = vbKeyMenu Then Print "SOL ALT TUŞU"
If KeyCode = vbKeySpace Then Print "BOŞLUK TUŞU"
If KeyCode = vbKeyReturn Then Print "ENTER TUŞU"

If KeyCode = vbKeyA Then Print "A TUŞU"
If KeyCode = vbKeyB Then Print "B TUŞU"
If KeyCode = vbKeyC Then Print "C TUŞU"
If KeyCode = vbKeyD Then Print "D TUŞU"
If KeyCode = vbKeyE Then Print "E TUŞU"

If KeyCode = vbKeyF1 Then Print "F1 TUŞU"
If KeyCode = vbKeyF2 Then Print "F2 TUŞU"
If KeyCode = vbKeyF3 Then Print "F3 TUŞU"
If KeyCode = vbKeyF4 Then Print "F4 TUŞU"
If KeyCode = vbKeyF5 Then Print "F5 TUŞU"

If KeyCode = vbKey1 Then Print "1 TUŞU"
If KeyCode = vbKey2 Then Print "2 TUŞU"
If KeyCode = vbKey3 Then Print "3 TUŞU"
If KeyCode = vbKey4 Then Print "4 TUŞU"
If KeyCode = vbKey5 Then Print "5 TUŞU"

If KeyCode = vbKeyNumpad1 Then Print "SAĞDAKİ 1 TUŞU"
If KeyCode = vbKeyNumpad2 Then Print "SAĞDAKİ 2 TUŞU"
If KeyCode = vbKeyNumpad3 Then Print "SAĞDAKİ 3 TUŞU"
If KeyCode = vbKeyNumpad4 Then Print "SAĞDAKİ 4 TUŞU"
If KeyCode = vbKeyNumpad5 Then Print "SAĞDAKİ 5 TUŞU"


End Sub
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 13 Ocak 2007, 20:04:23
fonksiyon tuşlarını kullanmak

Alıntı Yapeğer fonksiyon tuşlarına görev atamak isterseniz yada formunuzda
yardım menüsü gibi işlevler eklemek isterseniz bu
ayrıntılar işinize yarayacaktır.

ben basit olması için label elebanına değer ataması yapıyorum.
sizler yardım formu gibi yada proje acıklamalarını içeren bilgi kaynağı gibi hatta özel işlevleri
yaptırabilirsiniz.

(General)(Declaration)
Option Explicit
Const KEY_F1 = &H70
Const KEY_F2 = &H71 'tuş tanımlamaları
Const KEY_ESCAPE = &H1B

Form1.KeyPreview = True ' Formun KeyPreview özelliği True

Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) ' tuş kontrolü
Select Case KeyCode
Case KEY_F1 ' F1 - Tarih
label1.caption = Date$
Case KEY_F2 ' F2 - Saat
label1.caption = Time$
Case KEY_ESCAPE ' ESC - Çıkış
Unload Me
End Select
End Sub
Başlık: MAKALELER, HAZIR KODLAR
Gönderen: OG - 14 Şubat 2007, 03:45:03
Mozilla Tarayıcı Component'i
Alıntı YapMozilla Tarayıcısını artık Visual Basic 6.0'da da kullanabileceğiz.
Gecko motoru ve dahili klasör ve dosya listeleme gibi özellikleri var.

İlk önce component'ı edinelim. Adresi: http://www.iol.ie/~locka/mozilla/control.htm

Siz genede yukarıdaki adresten güncel sürüm olup olmadığını kontrol edin.
Son 2 sürüm için indirme adresi:
http://www.iol.ie/~locka/mozilla/MozillaControl1712.exe (Mozilla ActiveX Control 1.7.12)
http://www.iol.ie/~locka/mozilla/MozillaControl177.exe (Mozilla ActiveX Control 1.7.7 )

İndirilen dosyalardan birini yükleyin. Daha sonra Projects->Components (Ctrl+T)
MozillaControl 1.0 Type Library (mozctlx.dll) component'ini projenize ekleyin ve kullanın!

Component'in özellikleri normal kullandığımız IE WebBrowser ile aynıdır.

Hatta IE Patcher diye birşey çıkartmışlar bu varolan programların kullandığı IE WebBrowser componentini MozillaBrowser ile değiştirebiliyor. Komple cıomponent değişse bile tüm özellikleri aynı olduğundan diğer programlar sorunsuz çalışabiliyor. Tabi biz bununla ilgilenmeyeceğiz, VB6 da normal bir component olarak forma ekleyip kullanacağız.

Bazı komutlar:
MozillaBrowser1.GoBack 'Geri git.
MozillaBrowser1.GoForward 'Ileri git.
MozillaBrowser1.GoHome 'Ana sayfa.
MozillaBrowser1.GoSearch 'Arama sayfası.
MozillaBrowser1.Navigate "URL" 'Adrese git.

Klasör ve Dosya Listeleme için (Apache Stili) MozillaBrowser1.Navigate "C:\" 'gibi birşey kullanabilirsiniz.

Mozilla'nın şu an için bence en iyi faydası, WebBrowser componenti Internet Explorer 7'nin ieframe.dll dosyasında sorunlar çıkabiliyor. Hatta şu anda bende component olarak eklenmiyor bile bu normal WebBrowser ve şu anda Mozilla benim kurtarıcım oluyor, eğer böyle bir sorunla karşılaşıyorsanız sizin de kurtarıcınız olabilir ya da sadece IE'den sıkıldıysanız ya da tercih etmiyorsanız size kalmış.

Not: Bu firefox değil mozilla'dır. Firefox'ta mozilla motoru kullanmaktadır.

Internet Explorer'dan bir süre de olsa vazgeçmek isteyenler içindir, diğerleri IE'a devam edebilir. IE'ı da Mozila'yı da kötülemeyin!
Başlık: Universal Decimal/Binary/Hex Converter v2.0
Gönderen: OG - 15 Eylül 2008, 01:07:51
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=42429&lngWId=1