Frage

In meiner C # Anwendung Ich versuche, die TDM_CLICK_BUTTON Nachricht zu verwenden, um eine Schaltfläche in einem Taskdialog zu klicken. Dies funktioniert im Grunde ganz gut. Was ich passieren erwarten, geschieht. Ich erhalte auch die TDN_BUTTON_CLICKED Meldung.

Aber die Dokumentation sagt, dass der Rückgabewert von SendMessage wäre ungleich Null, wenn der Aufruf erfolgreich ist. Aber es gibt immer null für mich.

Dies ist mein Code:

public void ClickButton( int buttonId ) {
  bool success = UnsafeNativeMethods.SendMessage(
    WindowHandle,
    (uint)UnsafeNativeMethods.TASKDIALOG_MESSAGES.TDM_CLICK_BUTTON,
    (IntPtr)buttonId,
    IntPtr.Zero ) != IntPtr.Zero;
  if( !success ) {
    int lastWin32Error = Marshal.GetLastWin32Error();
    throw new Win32Exception( lastWin32Error, "SendMessage for TDM_CLICK_BUTTON failed." );
  }
}

lastWin32Error ist immer Null, wenn die Ausnahme ausgelöst wird. Was ein weiterer Indikator wäre, dass alles in Ordnung ist.

SendMessage ist in meinem Code wie folgt erklärt:

[DllImport( "user32.dll", SetLastError = true )]
internal static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam );

Ist die Dokumentation falsch oder verwende ich die Meldung falsch?

War es hilfreich?

Lösung

nahm, damit ich die C ++ Windows SDK Taskdialog Probe und versuchte, diese Nachricht als auch in dort. Der Rückgabewert von SendMessage Null bleibt immer.

bemerkte ich, dass eine TDN_BUTTON_CLICKED Benachrichtigung wird immer gesendet werden (auch wenn die Taste ID nicht existiert). Wenn der Knopf hat existiert oder nicht, keine Wirkung auf dem SendMessage Rückgabewert.

Dann habe ich vermutet, dass der Rückgabewert für diese Meldung könnte eine Wirkung haben, aber egal, was ich von dem Rückruf zurückkehren (TRUE/FALSE/S_OK/42), mein SendMessage Rückgabewert Null bleibt.

So, da ich keine Möglichkeit gefunden, dies zu machen scheitern und / oder gibt einen Wert ungleich Null, so kann ich nur annehmen, dass die Dokumentation nicht korrekt ist.

edit: Ich habe eine Antwort auf meine Dokumentation Feedback, das ich vor ein paar Tagen geschickt. Stellt sich die Dokumentation aus ist in der Tat falsch. Der Rückgabewert ist ignoriert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top