Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Aşağıdaki yordam ve örnek, platform çağrısı kullanarak yönetilen bir uygulamanın yerel bilgisayardaki her pencere için tanıtıcı değerini nasıl yazdırabileceğini gösterir. Özellikle, yordam ve örnek, pencere listesinde adım adım ilerlemek için EnumWindows işlevini ve pencere tutamacının değerini yazdırmak üzere CallBack adlı yönetilen geri çağırma işlevini kullanır.
Geri çağırma işlevi uygulamak için
Uygulamaya geçmeden önce işlevin
EnumWindowsimzasını inceleyin.EnumWindowsaşağıdaki imzaya sahiptir:BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)Bu işlevin geri çağırma gerektirdiğine ilişkin bir ipucu bağımsız değişkenin
lpEnumFuncvarlığıdır. Geri çağırma işlevine işaretçi alan bağımsız değişkenlerin adında,lp(uzun işaretçi) ön eki ileFuncsonekinin birlikte kullanılması yaygın bir durumdur. Win32 işlevleri hakkında belgeler için bkz. Microsoft Platform SDK'sı.Yönetilen geri çağırma işlevini oluşturun. Örnek,
CallBackadlı ve iki bağımsız değişken (hwnd ve lparam) alan bir temsilci türü bildirir. İlk bağımsız değişken pencerenin tutamacıdır; ikinci bağımsız değişken uygulama tanımlıdır. Bu sürümde her iki bağımsız değişken de tamsayı olmalıdır.Geri çağırma işlevleri genellikle başarıyı göstermek için sıfır olmayan değerler, başarısızlığı belirtmek için de sıfır döndürür. Bu örnek, numaralandırmaya devam etmek için
truedönüş değerini açıkça olarak ayarlar.Bir temsilci oluşturun ve bunu
EnumWindowsişlevine bir bağımsız değişken olarak geçirin. Platform çağrısı, temsilciyi otomatik olarak tanıdık bir geri çağırma biçimine dönüştürür.Geri çağırma işlevi işini tamamlayana kadar çöp toplayıcının delegeyi geri kazanmadığından emin olun. Bir temsilciyi parametre olarak geçirdiğinizde veya bir yapıda alan olarak bulunan bir temsilciyi geçirdiğinizde, çağrı süresi boyunca toplamadan kalır. Bu nedenle, aşağıdaki numaralandırma örneğinde olduğu gibi, geri çağırma işlevi çağrı döndürülmeden önce çalışmasını tamamlar ve yönetilen çağıranın ek bir eylemini gerektirmez.
Ancak, eğer geri çağırma işlevi çağrı döndükten sonra çağrılabiliyorsa, yönetilen çağıranın geri çağırma işlevi bitene kadar temsilcinin çöp toplayıcı tarafından toplanmadığından emin olmak için bazı adımlar atması gerekir. Örnek için GCHandle örneğine bakın.
Example
Imports System
Imports System.Runtime.InteropServices
Public Delegate Function CallBack( _
hwnd As Integer, lParam As Integer) As Boolean
Public Class EnumReportApp
Declare Function EnumWindows Lib "user32" ( _
x As CallBack, y As Integer) As Integer
Public Shared Sub Main()
EnumWindows(AddressOf EnumReportApp.Report, 0)
End Sub 'Main
Public Shared Function Report(hwnd As Integer, lParam As Integer) _
As Boolean
Console.Write("Window handle is ")
Console.WriteLine(hwnd)
Return True
End Function 'Report
End Class 'EnumReportApp
using System;
using System.Runtime.InteropServices;
public delegate bool CallBack(int hwnd, int lParam);
public class EnumReportApp
{
[DllImport("user32")]
public static extern int EnumWindows(CallBack x, int y);
public static void Main()
{
CallBack myCallBack = new CallBack(EnumReportApp.Report);
EnumWindows(myCallBack, 0);
}
public static bool Report(int hwnd, int lParam)
{
Console.Write("Window handle is ");
Console.WriteLine(hwnd);
return true;
}
}
using namespace System;
using namespace System::Runtime::InteropServices;
// A delegate type.
delegate bool CallBack(int hwnd, int lParam);
// Managed type with the method to call.
ref class EnumReport
{
// Report the window handle.
public:
[DllImport("user32")]
static int EnumWindows(CallBack^ x, int y);
static void Main()
{
EnumReport^ er = gcnew EnumReport;
CallBack^ myCallBack = gcnew CallBack(&EnumReport::Report);
EnumWindows(myCallBack, 0);
}
static bool Report(int hwnd, int lParam)
{
Console::Write(L"Window handle is ");
Console::WriteLine(hwnd);
return true;
}
};
int main()
{
EnumReport::Main();
}