Freigeben über


CommonDialog.HookProc-Methode

Definiert die Hookprozedur für Standarddialogfelder, die überschrieben wird, um einem Standarddialogfeld spezifische Funktionen hinzuzufügen.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
Protected Overridable Function HookProc ( _
    hWnd As IntPtr, _
    msg As Integer, _
    wparam As IntPtr, _
    lparam As IntPtr _
) As IntPtr
'Usage
Dim hWnd As IntPtr
Dim msg As Integer
Dim wparam As IntPtr
Dim lparam As IntPtr
Dim returnValue As IntPtr

returnValue = Me.HookProc(hWnd, msg, wparam, lparam)
protected virtual IntPtr HookProc (
    IntPtr hWnd,
    int msg,
    IntPtr wparam,
    IntPtr lparam
)
protected:
virtual IntPtr HookProc (
    IntPtr hWnd, 
    int msg, 
    IntPtr wparam, 
    IntPtr lparam
)
protected IntPtr HookProc (
    IntPtr hWnd, 
    int msg, 
    IntPtr wparam, 
    IntPtr lparam
)
protected function HookProc (
    hWnd : IntPtr, 
    msg : int, 
    wparam : IntPtr, 
    lparam : IntPtr
) : IntPtr

Parameter

  • hWnd
    Das Handle für das Dialogfeldfenster.
  • msg
    Die empfangene Meldung.
  • wparam
    Zusätzliche Informationen zur Meldung.
  • lparam
    Zusätzliche Informationen zur Meldung.

Rückgabewert

Ein Wert von 0, wenn die Meldung von der Prozedur für Standarddialogfelder verarbeitet wird. Ein Wert ungleich 0, wenn die Meldung von dieser Prozedur ignoriert wird.

Hinweise

Eine Hookprozedur ist ein Mechanismus, über den eine Funktion Ereignisse abfangen kann, bevor diese eine Anwendung erreichen. Wenn Sie die HookProc-Methode für eine CommonDialog-Klasse überschreiben, ruft das Betriebssystem diese Überschreibung der Funktion auf, um Meldungen des Betriebssystems an das Fenster zu senden.

Als Standardreaktion auf eine WM_INITDIALOG-Meldung wird das Dialogfeld durch die Hookprozedur auf dem Bildschirm zentriert.

Hinweis

Diese Methode verwendet SecurityAction.LinkDemand, um einen Aufruf aus nicht vertrauenswürdigem Code zu verhindern. Nur der direkte Aufrufer muss über die SecurityPermissionAttribute.UnmanagedCode-Berechtigung verfügen. Wenn der Code aus teilweise vertrauenswürdigem Code aufgerufen werden kann, dürfen Benutzereingaben nicht ohne Validierung an Methoden der Marshal-Klasse übergeben werden. Wichtige Einschränkungen bei der Verwendung des LinkDemand-Members finden Sie unter "Demand" und "LinkDemand".

Diese Eigenschaft verwendet darüber hinaus das SecurityAction.InheritanceDemand-Sicherheitsattribut. Zum Überschreiben dieses Members muss die abgeleitete Klasse die CustomPermission-Berechtigung besitzen.

Hinweise für Erben Erbende Klassen können diese Methode überschreiben, um einem Standarddialogfeld spezifische Funktionen hinzuzufügen. Wenn HookProc in einer abgeleiteten Klasse überschrieben wird, muss die HookProc-Methode der Basisklasse aufgerufen werden.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie die HookProc-Methode überschrieben wird. Das Beispiel besteht aus einer Klasse, die die CommonDialog-Klasse erbt. Im HookProc-Ersatz der Klasse wertet das Beispiel den msg-Parameter der Methode mit konstanten Werten für bestimmte Windows-Meldungen aus. Wenn der msg-Parameter mit einer der angegebenen Konstanten übereinstimmt, schreibt das Beispiel eine Überwachungsausgabe, die die Windows-Meldung kennzeichnet, die an die HookProc-Methode übergeben wurde. Für dieses Beispiel wird angenommen, dass die Klasse, in der die HookProc-Methode deklariert ist, die CommonDialog-Klasse erbt.

    ' Defines the constants for Windows messages.

    Const WM_SETFOCUS = &H7
    Const WM_INITDIALOG = &H110
    Const WM_LBUTTONDOWN = &H201
    Const WM_RBUTTONDOWN = &H204
    Const WM_MOVE = &H3
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Protected Overrides Function HookProc(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr


        ' Evaluates the message parameter to determine the user action.

        Select Case msg

            Case WM_INITDIALOG
                System.Diagnostics.Trace.Write("The WM_INITDIALOG message was received.")
            Case WM_SETFOCUS
                System.Diagnostics.Trace.Write("The WM_SETFOCUS message was received.")
            Case WM_LBUTTONDOWN
                System.Diagnostics.Trace.Write("The WM_LBUTTONDOWN message was received.")
            Case WM_RBUTTONDOWN
                System.Diagnostics.Trace.Write("The WM_RBUTTONDOWN message was received.")
            Case WM_MOVE
                System.Diagnostics.Trace.Write("The WM_MOVE message was received.")

        End Select

        ' Always call the base class hook procedure.

        Return MyBase.HookProc(hWnd, msg, wParam, lParam)

    End Function
// Defines the constants for Windows messages.

const int WM_SETFOCUS = 0x0007;
const int WM_INITDIALOG = 0x0110;
const int WM_LBUTTONDOWN = 0x0201;
const int WM_RBUTTONDOWN = 0x0204;
const int WM_MOVE = 0x0003;

// Overrides the base class hook procedure...
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] 
protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam)
{

    // Evaluates the message parameter to determine the user action.

    switch(msg)
    {

        case WM_INITDIALOG:
            System.Diagnostics.Trace.Write("The WM_INITDIALOG message was received.");
            break;
        case WM_SETFOCUS:
            System.Diagnostics.Trace.Write("The WM_SETFOCUS message was received.");
            break;
        case WM_LBUTTONDOWN:
            System.Diagnostics.Trace.Write("The WM_LBUTTONDOWN message was received.");
            break;
        case WM_RBUTTONDOWN:
            System.Diagnostics.Trace.Write("The WM_RBUTTONDOWN message was received.");
            break;
        case WM_MOVE:
            System.Diagnostics.Trace.Write("The WM_MOVE message was received.");
            break;

    }

    // Always call the base class hook procedure.

    return base.HookProc(hWnd, msg, wParam, lParam);

}
   private:
      // Defines the constants for Windows messages.
      literal int WM_SETFOCUS = 0x0007;
      literal int WM_INITDIALOG = 0x0110;
      literal int WM_LBUTTONDOWN = 0x0201;
      literal int WM_RBUTTONDOWN = 0x0204;
      literal int WM_MOVE = 0x0003;

   protected:
      // Overrides the base class hook procedure...
//      [System::Security::Permissions::SecurityPermission(System::Security::Permissions::SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)] 
      [SecurityPermission(SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)] 
      virtual IntPtr HookProc( IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam ) override
      {
         // Evaluates the message parameter to determine the user action.
         switch ( msg )
         {
            case WM_INITDIALOG:
               System::Diagnostics::Trace::Write( "The WM_INITDIALOG message was received." );
               break;
            case WM_SETFOCUS:
               System::Diagnostics::Trace::Write( "The WM_SETFOCUS message was received." );
               break;
            case WM_LBUTTONDOWN:
               System::Diagnostics::Trace::Write( "The WM_LBUTTONDOWN message was received." );
               break;
            case WM_RBUTTONDOWN:
               System::Diagnostics::Trace::Write( "The WM_RBUTTONDOWN message was received." );
               break;
            case WM_MOVE:
               System::Diagnostics::Trace::Write( "The WM_MOVE message was received." );
               break;
         }
         
         // Always call the base class hook procedure.
         return FontDialog::HookProc( hWnd, msg, wParam, lParam );
      }
    // Defines the constants for Windows messages.
    final int WM_SETFOCUS = 0x7;
    final int WM_INITDIALOG = 0x110;
    final int WM_LBUTTONDOWN = 0x201;
    final int WM_RBUTTONDOWN = 0x204;
    final int WM_MOVE = 0x3;

    // Overrides the base class hook procedure...
//    /** @attribute System.Security.Permissions.PermissionSet(System.Security.
//        Permissions.SecurityAction.Demand, Name = "FullTrust")
//     */
    /** @attribute SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)
     */
    protected IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wParam, 
        IntPtr lParam)
    {
        // Evaluates the message parameter to determine the user action.
        switch (msg) {
            case WM_INITDIALOG :
                System.Diagnostics.Trace.Write(
                    "The WM_INITDIALOG message was received.");
                break;

            case WM_SETFOCUS :
                System.Diagnostics.Trace.Write(
                    "The WM_SETFOCUS message was received.");
                break;

            case WM_LBUTTONDOWN :
                System.Diagnostics.Trace.Write(
                    "The WM_LBUTTONDOWN message was received.");
                break;

            case WM_RBUTTONDOWN :
                System.Diagnostics.Trace.Write(
                    "The WM_RBUTTONDOWN message was received.");
                break;

            case WM_MOVE :
                System.Diagnostics.Trace.Write(
                    "The WM_MOVE message was received.");
                break;
        }

        // Always call the base class hook procedure.
        return super.HookProc(hWnd, msg, wParam, lParam);

.NET Framework-Sicherheit

  • SecurityPermission  für erbende Klassen zum Aufrufen von nicht verwaltetem Code. Zugeordnete Enumeration: SecurityPermissionFlag.UnmanagedCode
  • SecurityPermission  für den Aufruf von nicht verwaltetem Code durch den unmittelbaren Aufrufer. Zugeordnete Enumeration: SecurityPermissionFlag.UnmanagedCode

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

CommonDialog-Klasse
CommonDialog-Member
System.Windows.Forms-Namespace