Frage zu PostMessage

29/03/2008 - 16:48 von Michael Andreas | Report spam
Hi,

nachfolgender Code funktioniert wenn ich Messages zwischen Fenstern einer
Applikation
verschicke, nicht aber wenn 9ch zwischen verschiedenen Applikationen
komminizieren will,
obwohl der Handle korrekt ist. Kann mir jemand die Ursache sagen?

Sender :

int nHandle = Win32.FindWindow( null, ReceiveWindowName);
int nResult = Win32.PostMessage( nHandle, MSG; WParam, LParam);


Empfànger :

protected override void WndProc( ref Message m)
{
Debug.Print( m.Msg.ToString());
base.WndProc
}


Danke Michael
 

Lesen sie die antworten

#1 Frank Dzaebel
29/03/2008 - 19:40 | Warnen spam
Hallo Michael,

nachfolgender Code funktioniert wenn ich Messages zwischen Fenstern einer
Applikation verschicke, nicht aber wenn ich zwischen verschiedenen
Applikationen komminizieren will,
obwohl der Handle korrekt ist. Kann mir jemand die Ursache sagen?



Zunàchst macht Dir die Unterschiede zwischen SendMessage und PostMessage
klar.
Für Vista / Server 2008 und spàter gilt:

Anwendungen auf niedrigeren Berechtigungsstufen können grundsàtzlich keine
Mitteilungen an Anwendungen auf höheren Berechtigungsstufen senden, sofern
die Anwendung der höheren Berechtigungsstufe dies nicht ausdrücklich durch
Aufruf von ChangeWindowMessageFilter() erlaubt. Gleichermaßen können
Anwendungen mit niedrigeren Berechtigungsstufen ein HWND einer Anwendung mit
einer höheren Berechtigungsstufe zwar lesen, aber nicht modifizieren. Aus
Kompatibilitàtsgründen geben SendMessage und andere APIs eine Erfolgsmeldung
zurück, auch wenn die API aufgrund von Berechtigungsproblemen blockiert
wurde. Wenn die Kompatibilitàtsauswirkung hoch und das Sicherheitsrisiko
gering ist, dürfen auch Anwendungen mit niedriger Berechtigungsstufe in
einigen Fàllen unaufgefordert Meldungen an Anwendungen mit höheren
Berechtigungsstufen senden.


[So werden in Windows Nachrichten versandt]
http://msdn2.microsoft.com/de-de/li...79347.aspx

[PostMessage Function ()]
http://msdn2.microsoft.com/en-us/library/ms644944(VS.85).aspx

[SendMessage Function ()]
http://msdn2.microsoft.com/en-us/li...44950.aspx

[Windows Vista für Entwickler: Kochbuch zur Anwendungskompatibilitàt]
http://msdn2.microsoft.com/de-de/li...x#ID0EAWBG



Empfànger :
protected override void WndProc( ref Message m)
{
Debug.Print( m.Msg.ToString());
base.WndProc
}



Beachte weiterhin, das eben diese WndProc
nicht einfach nur so automatisch aufgerufen wird,
sondern gewissen Bedingungen unterliegt:

[Control.WndProc-Methode (System.Windows.Forms)]
http://msdn2.microsoft.com/de-de/li...dproc.aspx

"... Erbende Steuerelemente sollten die WndProc-Methode
der Basisklasse aufrufen, um alle Meldungen zu verarbeiten,
die von diesen Steuerelementen nicht behandelt werden."


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen