Aracılığıyla paylaş


İzlenecek yol: Windows API'larını Çağırma (Visual Basic)

Windows API, Windows işletim sisteminin bir parçası olan dinamik bağlantı kitaplıkları (DLL) ' dir.Bunları kendi eşdeğer yordamlarının zor olduğunda, görevleri gerçekleştirmek için kullanın.Örneğin, Windows adında bir işlev sağlar FlashWindowEx açık ve koyu gölgeler arasında diğer bir uygulamanın başlık çubuğunda yapmanızı sağlar.

Windows API kodunuzda kullanmanın avantajı zaten yazılmış kullanışlı işlevler düzinelerce ve kullanılacak bekleme içerdiğinden bunlar geliştirme zaman kazanabilirsiniz ' dir.Dezavantajıdır Windows API'leri şeylerin ters gidebilme ve unforgiving ile çalışmaya zor olabilir.

Windows API'ları birlikte çalışabilirlik özel kategorisini temsil eder.Windows API'ları, yönetilen kod kullanmayın, yerleşik tür kitaplığı ve Visual Studio kullanılanlardan farklı veri türlerini kullanmak gerekmez.Bu farklılıklar nedeniyle ve Windows API'leri com nesneleri, Windows API'ları ile birlikte çalışabilirlik olmadığından ve .NET Framework platformu kullanılarak gerçekleştirilen çağırmak, ya da PInvoke.Platform Çağırma etkinleştirir DLL'ler olarak uygulanan yönetilmeyen işlevleri çağırmak için kod yönetilen bir hizmettir.Daha fazla bilgi için bkz. Yönetilmeyen DLL İşlevlerini Kullanma.PInvoke olarak kullanabileceğiniz Visual Basic kullanarak Declare deyimi veya uygulama DllImport özniteliği için boş bir yordam.

Windows API çağrısı önemli bir parçası olan Visual Basic geçmişte programlama, ender ile gerekli olan fakat Visual Basic 2005.Yönetilen koddan mümkün olan her durumda kullanmak .NET Framework Windows API çağrıları yerine görevleri gerçekleştirmek için.Bu izlenecek yolda kullanmanın, bu durumlar için bilgi sağlar Windows API'leri gerekli.

[!NOT]

Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için, bkz. Visual Studio'da Geliştirme Ayarlarını özelleştirme.

API çağrıları kullanılarak bildirmek

Windows API çağrısı için en yaygın yolu kullanmaktır Declare ifadesi.

Bir dll yordam bildirmek için

  1. Dönüş değeri, yanı sıra ad ve onu içeren dll Dosyasının konumunu ve adını aramak istediğiniz işlevi artı bağımsız değişkenleri, değişken türleri belirler.

    [!NOT]

    Windows API'leri hakkında tam bilgi için Platform sdk Windows API Win32 sdk belgelerine bakın.Windows API'leri kullanan sabitler hakkında daha fazla bilgi için Platform sdk ile birlikte gelen Windows.h gibi başlık dosyalarını inceleyin.

  2. Yeni bir Windows Application projesi tıklatarak Yeni , Dosya menüsünü tıklatıp, sonra da Proje.Yeni Proje iletişim kutusu görüntülenir.

  3. Seçin Windows Application listesinden Visual Basic proje şablonları.Yeni proje görüntülenir.

  4. Aşağıdaki Declare sınıf veya dll kullanmak istediğiniz modülün işlev:

    Declare Auto Function MBox Lib "user32.dll" Alias "MessageBox" (
        ByVal hWnd As Integer,
        ByVal txt As String,
        ByVal caption As String,
        ByVal Typ As Integer) As Integer
    

Bölümleri deyimini bildirmek

Declare Deyimi aşağıdaki öğeleri içerir.

Otomatik değiştirici

Auto Değiştirici yöntem adı ortak dil çalışma zamanı kurallara uygun şekilde (veya belirtilen diğer ad) dayalı dize dönüştürmek için çalışma zamanı bildirir.

Lib ve diğer anahtar sözcükler

Ad aşağıdaki Function programınızı alınan işlevine erişmek için kullandığı adı bir anahtardır.Gerçek çağıran işlevin adı ile aynı olabilir ya da herhangi bir geçerli yordam adını ve ardından employ kullanabilirsiniz Alias arama işlevi gerçek adını belirtmek için anahtar sözcük.

Belirtmek Lib anahtar sözcüğü, ardından ad ve arama fonksiyonu içeren dll Dosyasının konumu.Windows Sistem dizinde yer alan dosya yolunu belirtmeniz gerekmez.

Use Alias çağıran işlevin adı geçerli değilse, anahtar sözcük Visual Basic yordam adı veya diğer öğeleri uygulamanızdaki adıyla çakışıyor.AliasÇağrılan işlev true adını gösterir.

Bağımsız değişken ve veri türü bildirimleri

Bağımsız değişkenler ve veri türlerini bildirin.Windows'un kullandığı veri türleri Visual Studio veri türlerine karşılık gelen değil çünkü bu bölümü basitleştirse.Visual Basicbağımsız değişken adı verilen bir işlem uyumlu veri türlerini dönüştürerek çok iş yapar sıralaması.Bağımsız değişkenler kullanarak nasıl sıralanmış açıkça kontrol edebilirsiniz MarshalAsAttribute tanımlanan öznitelik System.Runtime.InteropServices ad.

[!NOT]

Önceki sürümleri Visual Basic parametreleri bildirmek izin As Any, yani herhangi bir veri, veri türü kullanýlabilir.Visual Basiciçin belirli bir veri türü tüm kullanmanız gerekir Declare deyimleri.

Windows API sabitleri

Bazı bağımsız değişkenler sabitler bileşimleridir.Örneğin, MessageBox Bu izlenecek yolda gösterilen API adında bir tamsayı değişken kabul eder Typ , ileti kutusunda nasıl görüntüleneceğini denetler.Bu sabitlerin sayısal değerini inceleyerek belirleyebilirsiniz #define WinUser.h dosyasındaki ifadelerini.Ekleyip ondalık biçime dönüştürmek için bir hesap makinesi kullanmak isteyebilirsiniz böylece sayısal değerler genellikle onaltılık olarak gösterilir.Sabitler ünlem işareti stili birleştirmek isterseniz, örneğin, MB_ICONEXCLAMATION 0x00000030 ve Evet/stil yok MB_YESNO 0x00000004, sayıları ve ondalık 0x00000034 ya da 52 sonucunu almak.Ondalık sonucu doğrudan kullanabilirsiniz, ancak bu değerler sabitler uygulamanız olarak bildirmek ve bunları birleştirerek daha iyi kullanarak Or işleci.

Windows API çağrıları için sabitleri bildirmeniz

  1. Aramakta olduğunuz Windows işlevi için belgelere bakın.Kullandığı sabitleri adını ve bu sabitleri için sayısal değerler içeren .h dosyasının adını belirler.

  2. Üstbilgi (.h) dosyasının içeriğini görüntülemek için Not Defteri gibi bir metin düzenleyicisi kullanın ve kullanmakta olduğunuz sabitler ile ilişkilendirilmiş olan değerlerini bulun.Örneğin, MessageBox API'si kullanan sabit MB_ICONQUESTION bir soru işareti ileti kutusunda göstermek için.Tanımını MB_ICONQUESTION WinUser.h içinde olan ve aşağıdaki gibi görünür:

    #define MB_ICONQUESTION 0x00000020L

  3. Eşdeğer ekleme Const sınıf ya da bu sabitleri uygulamanız için kullanılabilir hale getirmek için modül deyimleri.Örne?in:

    Const MB_ICONQUESTION As Integer = &H20
    Const MB_YESNO As Integer = &H4
    Const IDYES As Integer = 6
    Const IDNO As Integer = 7
    

dll yordamı çağırmak için

  1. Adlı bir düğme eklemek Button1 başlangıç için projeniz için form ve kendi kodunu görüntülemek için çift tıklatın.Olay işleyicisi düğmesi görüntülenir.

  2. Koda ekleyin Click eklediğiniz, yordam çağrısı ve uygun bağımsız sağlamak için düğme için olay işleyicisi:

    Private Sub Button1_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button1.Click
    
        ' Stores the return value. 
        Dim RetVal As Integer
        RetVal = MBox(0, "Declare DLL Test", "Windows API MessageBox",
            MB_ICONQUESTION Or MB_YESNO)
    
        ' Check the return value. 
        If RetVal = IDYES Then
            MsgBox("You chose Yes")
        Else
            MsgBox("You chose No")
        End If 
    End Sub
    
  3. F5 tuşuna basarak projeyi çalıştırın.Her ikisi de ileti kutusunda görüntülenen Evet ve No yanıt düğmeleri.Herhangi birini tıklatın.

Veri sıralama

Visual Basicotomatik olarak dönüştürür parametreleri ve dönüş değerleri Windows API çağrıları, ancak veri türlerini kullanabilirsiniz MarshalAs bir API beklediği yönetilmeyen veri türleri açıkça belirtmek için öznitelik.Birlikte çalışabilirlik sıralaması hakkında daha fazla bilgi için bkz: Birlikte Çalışma Sıralama.

Declare ve MarshalAs API çağrısında kullanmak için

  1. Dönüş değeri ve bağımsız değişkenlerini veri türleri, aramak istediğiniz işlevin adını belirler.

  2. Erişimi kolaylaştırmak için MarshalAs özniteliği, ekleme bir Imports üst sınıf veya modülü, aşağıdaki örnekte olduğu gibi kod ifadesi:

    Imports System.Runtime.InteropServices
    
  3. İşlev prototipi alınan işlevi için sınıf veya kullanıyorsanız ve uygulama modülü eklemek MarshalAs özniteliği için parametreleri veya dönüş değeri.Aşağıdaki örnekte, tür beklediği bir API çağrısı void* olarak sıralanmış AsAny:

    Declare Sub SetData Lib "..\LIB\UnmgdLib.dll" (
        ByVal x As Short,
        <MarshalAsAttribute(UnmanagedType.AsAny)>
            ByVal o As Object)
    

DllImport kullanarak API çağrıları

DllImport Özniteliği tür kitaplıkları DLL'lerdeki işlevleri çağırmak için ikinci bir yol sağlar.DllImportkabaca kullanmakla eşdeğerdir bir Declare deyimi, ancak işlevleri nasıl adlı üzerinde daha fazla denetim sağlar.

Kullanabileceğiniz DllImport ile çoğu Windows API çağrılarının çağrı bir paylaşılan gösterir sürece (bazen statik) yöntemi.Bir sınıfın örneğini gerektiren yöntemleri kullanamazsınız.Aksine Declare ifadeleri, DllImport çağrıları kullanan MarshalAs özniteliği.

DllImport özniteliği kullanılarak bir Windows API çağrısı için

  1. Yeni bir Windows Application projesi tıklatarak Yeni , Dosya menüsünü tıklatıp, sonra da Proje.Yeni Proje iletişim kutusu görüntülenir.

  2. Seçin Windows Application listesinden Visual Basic proje şablonları.Yeni proje görüntülenir.

  3. Adlı bir düğme eklemek Button2 başlangıç formu için.

  4. Çift Button2 form için kod görünümünü açın.

  5. Erişimi kolaylaştırmak için DllImport, ekleme bir Imports başlangıç form sınıfının kodu üstüne deyimi:

    Imports System.Runtime.InteropServices
    
  6. Yukarıdaki boş bir işlev bildirmenin End Class deyimi form ve fonksiyon adı MoveFile.

  7. Uygulama Public ve Shared değiştiricileri için parametreleri ayarlama ve işlev bildirimi için MoveFile göre bağımsız Windows API işlevi kullanır:

    Public Shared Function MoveFile(
        ByVal src As String,
        ByVal dst As String) As Boolean 
        ' Leave the body of the function empty. 
    End Function
    

    İşlevinizin herhangi bir geçerli yordam adı olabilir; DllImport özniteliği, dll Dosyasının adını belirtir.Birlikte çalışabilirlik için parametreleri sıralaması da işleme ve verileri benzer Visual Studio veri türlerini seçmek için dönüş değerlerini türlerden API'sini kullanır.

  8. Uygulama DllImport özniteliği boş işlev.İlk parametre aramakta olduğunuz işlevi içeren dll dosyasının adı ve konumudur.Windows Sistem dizinde yer alan dosya yolunu belirtmeniz gerekmez.İkinci parametre Windows API işlevin adını belirten adlandırılmış bir değişkendir.Bu örnekte, DllImport özniteliği zorlar çağrıları MoveFile için iletilecek MoveFileW KERNEL32 içinde.DLL.MoveFileW Yöntemi, dosya yolu kopyalar src yola dst.

    <DllImport("KERNEL32.DLL", EntryPoint:="MoveFileW", SetLastError:=True,
        CharSet:=CharSet.Unicode, ExactSpelling:=True,
        CallingConvention:=CallingConvention.StdCall)>
    Public Shared Function MoveFile(
        ByVal src As String,
        ByVal dst As String) As Boolean 
        ' Leave the body of the function empty. 
    End Function
    
  9. Koda ekleyin Button2_Click olay işleyicisi işlevi çağırmak için:

    Private Sub Button2_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button2.Click
    
        Dim RetVal As Boolean = MoveFile("c:\tmp\Test.txt", "c:\Test.txt")
        If RetVal = True Then
            MsgBox("The file was moved successfully.")
        Else
            MsgBox("The file could not be moved.")
        End If 
    End Sub
    
  10. Sınama.txt adlı bir dosya oluşturun ve sabit sürücünüzdeki C:\Tmp dizine yerleştirin.Gerekirse Tmp dizini oluşturun.

  11. Uygulamayı başlatmak için F5 tuşuna basın.Ana formu görüntülenir.

  12. Tıklatın Button2.Dosya taşınmış, "dosya başarıyla taşındı" iletisi görüntülenir.

Ayrıca bkz.

Başvuru

Declare Deyimi

DllImportAttribute

MarshalAsAttribute

Otomatik (Visual Basic)

Alias Tümcesi (Visual Basic)

Kavramlar

Yönetilen Kodda Prototipler Oluşturma

Geri Çağırma Örneği

Diğer Kaynaklar

COM Birlikte Çalışma (Visual Basic)