5 Stimmen

Kann ich die Autoplay-Funktion des Fensters programmatisch mit C#/.NET deaktivieren?

Kennt jemand eine Möglichkeit, die Autoplay-Funktion von Windows mit c#/.NET zu deaktivieren?

11voto

isamux Punkte 218

Eine kleine Zusammenfassung, für alle anderen, die nach einer guten Möglichkeit suchen, Autoplay zu deaktivieren/unterdrücken. Bislang habe ich 3 Methoden gefunden, um Autoplay programmatisch zu deaktivieren:

  1. Das Abfangen der QueryCancelAutoPlay-Nachricht
  2. Die Verwendung des Registry
  3. Implementierung der COM-Schnittstelle IQueryCancelAutoPlay

Letztendlich habe ich mich für die 3. Methode entschieden und die Schnittstelle IQueryCancelAutoPlay verwendet, weil die anderen einige erhebliche Nachteile hatten:

  • Die erste Methode (QueryCancelAutoPlay) war nur in der Lage Autoplay zu unterdrücken, wenn die Anwendungsfenster im Vordergrund war, denn nur das Vordergrundfenster erhält die Nachricht
  • Die Konfiguration von Autoplay in der Registrierung funktionierte auch dann, wenn sich das Anwendungsfenster im Hintergrund befand. Der Nachteil: Es erforderte einen Neustart des aktuell laufenden erforscher.exe um in Kraft zu treten... das war also keine Lösung, um Autoplay vorübergehend zu deaktivieren.

Beispiele für die Umsetzung

1. QueryCancelAutoPlay

Hinweis: Wenn Ihre Anwendung ein Dialogfeld verwendet, müssen Sie SetWindowLong ( Unterschrift ), anstatt einfach false zurückzugeben. Siehe aquí für weitere Einzelheiten)

2. Registry

Über die Registrierung können Sie AutoRun für bestimmte Laufwerksbuchstaben (NoDriveAutoRun) oder für eine Klasse von Laufwerken deaktivieren ( NoDriveTypeAutoRun )

3. IQueryCancelAutoPlay

Einige andere Links:

1voto

Kyle Rosendo Punkte 24351

RegisterWindowMessage ist ein Win32-API-Aufruf. Sie müssen also PInvoke verwenden, damit es funktioniert

using System.Runtime.InteropServices;

class Win32Call
{
[DllImport("user32.dll")]
   public static extern int RegisterWindowMessage(String strMessage);
}

// In your application you will call

Win32Call.RegisterWindowMessage("QueryCancelAutoPlay");

Von hier aus (Der Expertenaustausch-Link ganz oben). Auf dieser Website gibt es zusätzliche Hilfe mit einigen weiteren Beispielen, die vielleicht etwas umfassender sind als die oben genannten. Die obigen Ausführungen lösen jedoch das Problem.

0voto

isamux Punkte 218

Einige zusätzliche Links, die hilfreich sein könnten:

0voto

Manjunath Bilwar Punkte 1915

Versuchen Sie diesen Code funktionieren für mich :) Weitere Informationen finden Sie unter diesem Referenzlink: http://www.pinvoke.net/default.aspx/user32.registerwindowmessage

using System.Runtime.InteropServices;

//provide a private internal message id
private UInt32 queryCancelAutoPlay = 0;

[DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString);

/* only needed if your application is using a dialog box and needs to 
* respond to a "QueryCancelAutoPlay" message, it cannot simply return TRUE or FALSE.
[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
*/

protected override void WndProc(ref Message m)
{
    //calling the base first is important, otherwise the values you set later will be lost
    base.WndProc (ref m);

    //if the QueryCancelAutoPlay message id has not been registered...
    if (queryCancelAutoPlay == 0)
        queryCancelAutoPlay = RegisterWindowMessage("QueryCancelAutoPlay");

    //if the window message id equals the QueryCancelAutoPlay message id
    if ((UInt32)m.Msg == queryCancelAutoPlay)
    {
        /* only needed if your application is using a dialog box and needs to
        * respond to a "QueryCancelAutoPlay" message, it cannot simply return TRUE or FALSE.
        SetWindowLong(this.Handle, 0, 1);
        */
        m.Result = (IntPtr)1;
    }
} //WndProc

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X