Freigeben über


SendMessageTimeoutA-Funktion (winuser.h)

Sendet die angegebene Nachricht an ein oder mehrere Fenster.

Syntax

LRESULT SendMessageTimeoutA(
  [in]            HWND       hWnd,
  [in]            UINT       Msg,
  [in]            WPARAM     wParam,
  [in]            LPARAM     lParam,
  [in]            UINT       fuFlags,
  [in]            UINT       uTimeout,
  [out, optional] PDWORD_PTR lpdwResult
);

Parameter

[in] hWnd

Typ: HWND-

Ein Handle für das Fenster, dessen Fensterprozedur die Nachricht empfängt.

Wenn dieser Parameter HWND_BROADCAST ((HWND)0xffff ist), wird die Nachricht an alle Fenster der obersten Ebene im System gesendet, einschließlich deaktivierter oder unsichtbarer nicht zugeordneter Fenster. Die Funktion wird erst zurückgegeben, wenn für jedes Fenster ein Timeout aufgetreten ist. Daher kann die Gesamtwartezeit bis zum Wert uTimeout multipliziert mit der Anzahl der Fenster der obersten Ebene sein.

[in] Msg

Typ: UINT-

Die zu sendende Nachricht.

Listen der vom System bereitgestellten Nachrichten finden Sie unter System-Defined Nachrichten.

[in] wParam

Typ: WPARAM-

Alle zusätzlichen nachrichtenspezifischen Informationen.

[in] lParam

Typ: LPARAM-

Alle zusätzlichen nachrichtenspezifischen Informationen.

[in] fuFlags

Typ: UINT-

Das Verhalten dieser Funktion. Dieser Parameter kann einen oder mehrere der folgenden Werte sein.

Wert Bedeutung
SMTO_ABORTIFHUNG
0x0002
Die Funktion gibt zurück, ohne darauf zu warten, dass der Timeoutzeitraum verstrichen ist, wenn der empfangende Thread scheinbar nicht reagiert oder "hängt".
SMTO_BLOCK
0x0001
Verhindert, dass der aufrufende Thread andere Anforderungen verarbeitet, bis die Funktion zurückgegeben wird.
SMTO_NORMAL
0x0000
Der aufrufende Thread wird nicht daran gehindert, andere Anforderungen zu verarbeiten, während auf die Rückgabe der Funktion gewartet wird.
SMTO_NOTIMEOUTIFNOTHUNG
0x0008
Die Funktion erzwingt nicht den Timeoutzeitraum, solange der empfangende Thread Nachrichten verarbeitet.
SMTO_ERRORONEXIT
0x0020
Die Funktion sollte "0" zurückgeben, wenn das empfangende Fenster zerstört wird oder der eigene Thread während der Verarbeitung der Nachricht stirbt.

[in] uTimeout

Typ: UINT-

Die Dauer des Timeoutzeitraums in Millisekunden. Wenn es sich bei der Nachricht um eine Übertragungsnachricht handelt, kann jedes Fenster den vollständigen Timeoutzeitraum verwenden. Wenn Sie z. B. einen Zeitraum von fünf Sekunden angeben und drei Fenster der obersten Ebene vorhanden sind, die die Nachricht nicht verarbeiten können, können Sie bis zu einer Verzögerung von 15 Sekunden haben.

[out, optional] lpdwResult

Typ: PDWORD_PTR

Das Ergebnis der Nachrichtenverarbeitung. Der Wert dieses Parameters hängt von der angegebenen Nachricht ab.

Rückgabewert

Typ: LRESULT-

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null. SendMessageTimeout- enthält keine Informationen zu einzelnen Fensteranzeigen, wenn HWND_BROADCAST verwendet wird.

Wenn die Funktion fehlschlägt oder ein Zeitüberschreitung auftritt, lautet der Rückgabewert 0. Beachten Sie, dass die Funktion nicht immer SetLastError- beim Fehler aufruft. Wenn der Grund für fehler wichtig für Sie ist, rufen Sie SetLastError(ERROR_SUCCESS) auf, bevor Sie SendMessageTimeout aufrufen. Wenn die Funktion 0 zurückgibt und GetLastError ERROR_SUCCESS zurückgibt, behandeln Sie sie als generischen Fehler.

Bemerkungen

Die Funktion ruft die Fensterprozedur für das angegebene Fenster auf, und wenn das angegebene Fenster zu einem anderen Thread gehört, wird erst zurückgegeben, wenn die Fensterprozedur die Nachricht verarbeitet hat oder der angegebene Timeoutzeitraum abgelaufen ist. Wenn das Fenster, das die Nachricht empfängt, zur gleichen Warteschlange wie der aktuelle Thread gehört, wird die Fensterprozedur direkt aufgerufen – der Timeoutwert wird ignoriert.

Diese Funktion ist der Ansicht, dass ein Thread nicht reagiert, wenn er nicht GetMessage- oder eine ähnliche Funktion innerhalb von fünf Sekunden aufgerufen hat.

Das System marshallt nur für Systemmeldungen (die im Bereich 0 bis (WM_USER-1)). Um andere Nachrichten (die >= WM_USER) an einen anderen Prozess zu senden, müssen Sie benutzerdefinierte Marshalling durchführen.

Anmerkung

Der winuser.h-Header definiert SendMessageTimeout als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 2000 Professional [nur Desktop-Apps]
mindestens unterstützte Server- Windows 2000 Server [nur Desktop-Apps]
Zielplattform- Fenster
Header- winuser.h (enthalten Windows.h)
Library User32.lib
DLL- User32.dll
API-Satz ext-ms-win-ntuser-message-l1-1-0 (eingeführt in Windows 8)

Siehe auch

Konzeptionelle

GetMessage-

InSendMessage-

Nachrichten- und Nachrichtenwarteschlangen

PostMessage-

Referenz

SendDlgItemMessage-

SendMessage-

SendMessageCallback-

SendNotifyMessage-