CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) Method

Definizione

Consente di definire la routine di hook della finestra di dialogo comune di cui viene eseguito l'override per aggiungere funzionalità specifiche a una finestra di dialogo comune.Defines the common dialog box hook procedure that is overridden to add specific functionality to a common dialog box.

protected:
 virtual IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
protected virtual IntPtr HookProc (IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
abstract member HookProc : nativeint * int * nativeint * nativeint -> nativeint
override this.HookProc : nativeint * int * nativeint * nativeint -> nativeint
Protected Overridable Function HookProc (hWnd As IntPtr, msg As Integer, wparam As IntPtr, lparam As IntPtr) As IntPtr

Parametri

hWnd
IntPtr IntPtr IntPtr IntPtr

Handle per la finestra di dialogo.The handle to the dialog box window.

msg
Int32 Int32 Int32 Int32

Messaggio che viene ricevuto.The message being received.

wparam
IntPtr IntPtr IntPtr IntPtr

Ulteriori informazioni sul messaggio.Additional information about the message.

lparam
IntPtr IntPtr IntPtr IntPtr

Ulteriori informazioni sul messaggio.Additional information about the message.

Restituisce

Un valore uguale a zero se la routine predefinita della finestra di dialogo elabora il messaggio; un valore diverso da zero se la routine predefinita della finestra di dialogo ignora il messaggio.A zero value if the default dialog box procedure processes the message; a nonzero value if the default dialog box procedure ignores the message.

Esempi

Nell'esempio di codice riportato di seguito viene illustrato HookProc come eseguire l'override del metodo.The following code example demonstrates how to override the HookProc method. L'esempio è costituito da una classe che CommonDialog eredita la classe.The example consists of a class that inherits the CommonDialog class. Nell' HookProc override della classe, nell'esempio viene valutato il msg parametro del metodo rispetto ai valori costanti per i messaggi di Windows specifici.In the class's HookProc override, the example evaluates the method's msg parameter against constant values for particular Windows messages. Se il msg parametro è uguale alla costante specificata, nell'esempio viene scritto l'output HookProc di traccia che identifica il messaggio di Windows passato al metodo.If the msg parameter equals the specified constant, the example writes trace output identifying the Windows message that was passed to the HookProc method. In questo esempio si presuppone che la classe in HookProc cui è dichiarato il metodo CommonDialog erediti la classe.This example assumes that the class in which the HookProc method is declared inherits the CommonDialog class.

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...
   [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.
      #if defined(TRACE)
      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;
      }
      #endif
     
      // Always call the base class hook procedure.
      return FontDialog::HookProc( hWnd, msg, wParam, lParam );
   }

// 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);

}
    ' 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

Commenti

Una procedura di hook è un meccanismo mediante il quale una funzione può intercettare gli eventi prima che raggiungano un'applicazione.A hook procedure is a mechanism by which a function can intercept events before they reach an application. Quando si esegue l' HookProc override del metodo CommonDialog per una classe, il sistema operativo richiama l'override della funzione per inserire i messaggi del sistema operativo nella finestra.When you override the HookProc method for a CommonDialog class, the operating system invokes your override of the function to post operating system messages to the window.

Per impostazione predefinita, la routine hook centra la finestra di dialogo sullo schermo in risposta a un messaggio WM_INITDIALOG.By default, the hook procedure centers the dialog box on the screen in response to a WM_INITDIALOG message.

Nota

Questo metodo usa SecurityAction.LinkDemand per impedire che venga chiamato da codice non attendibile. è necessario solo il chiamante immediato per avere SecurityPermissionAttribute.UnmanagedCode l'autorizzazione.This method uses SecurityAction.LinkDemand to prevent it from being called from untrusted code; only the immediate caller is required to have SecurityPermissionAttribute.UnmanagedCode permission. Se il codice può essere chiamato da codice parzialmente attendibile, non passare l'input dell' Marshal utente ai metodi della classe senza convalida.If your code can be called from partially trusted code, do not pass user input to Marshal class methods without validation. Per importanti limitazioni sull'uso del LinkDemand membro, vedere demand e LinkDemand.For important limitations on using the LinkDemand member, see Demand vs. LinkDemand.

Questa proprietà usa anche l' SecurityAction.InheritanceDemand attributo di sicurezza. per eseguire l'override di questo membro, la classe CustomPermission derivata deve avere l'autorizzazione.This property also uses the SecurityAction.InheritanceDemand security attribute; to override this member, the derived class must have the CustomPermission permission.

Note per gli eredi

Le classi che ereditano possono eseguire l'override di questo metodo per aggiungere funzionalità specifiche a una finestra di dialogo comune.Inheriting classes can override this method to add specific functionality to a common dialog box. Quando si esegue HookProc(IntPtr, Int32, IntPtr, IntPtr) l'override in una classe derivata, assicurarsi di chiamare il HookProc(IntPtr, Int32, IntPtr, IntPtr) metodo della classe base.When overriding HookProc(IntPtr, Int32, IntPtr, IntPtr) in a derived class, be sure to call the base class's HookProc(IntPtr, Int32, IntPtr, IntPtr) method.

Sicurezza

SecurityPermission
per il chiamante immediato per chiamare codice non gestito.for the immediate caller to call unmanaged code. Enumerazione associata:UnmanagedCodeAssociated enumeration: UnmanagedCode

Si applica a