ChangeWindowMessageFilter und LateBinding

T

Thomas Kehl

Hallo zusammen.

Ich benutze in meiner Application ChangeWindowMessageFilter() um für
den Betrieb der Applikation auf Vista oder W7 eine bestimmte Message
zuzulassen. Nun habe ich das Problem, dass die Applikation auch unter
Windows XP ausgeführt wird. Ich bin nun auf der Suche, die Funktion
mittels LateBinding in C# aufzurufen. Folgendes habe ich schon:

[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string csFileName);
[DllImport("kernel32.dll")]
static extern IntPtr GetProcAddress(IntPtr IntPtr_Module, string
csProcName);
[DllImport("kernel32.dll")]
static extern bool FreeLibrary(IntPtr IntPtr_Module);


private static void AllowWM_COPYDATA() {
IntPtr IntPtr_MyLib = LoadLibrary("user32.dll");
IntPtr IntPtr_MyFunc = GetProcAddress(IntPtr_MyLib,
"ChangeWindowMessageFilter");

// XXXXXXX

FreeLibrary(IntPtr_MyFunc);
}

Was mir nun noch fehlt ist, wie ich die Funktion bei XXXXX nun auch
noch aurfufen kann? - Kann mir hier jemand helfen? - Besten Dank.

Herzliche Grüsse, Thomas
 
J

Jeroen Mostert

Thomas said:
Hallo zusammen.
Ebenso Hallo. Aber ein Tipp: die Gemeinsprache hier ist Englisch, und
microsoft.public.de.german.entwickler.dotnet.csharp benutzen gibt bessere
Chancen auf ein gutes Antwort.
Ich benutze in meiner Application ChangeWindowMessageFilter() um für
den Betrieb der Applikation auf Vista oder W7 eine bestimmte Message
zuzulassen. Nun habe ich das Problem, dass die Applikation auch unter
Windows XP ausgeführt wird. Ich bin nun auf der Suche, die Funktion
mittels LateBinding in C# aufzurufen. Folgendes habe ich schon:

[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string csFileName);
[DllImport("kernel32.dll")]
static extern IntPtr GetProcAddress(IntPtr IntPtr_Module, string
csProcName);
[DllImport("kernel32.dll")]
static extern bool FreeLibrary(IntPtr IntPtr_Module);


private static void AllowWM_COPYDATA() {
IntPtr IntPtr_MyLib = LoadLibrary("user32.dll");
IntPtr IntPtr_MyFunc = GetProcAddress(IntPtr_MyLib,
"ChangeWindowMessageFilter");

// XXXXXXX
Dies alles ist nicht notwendig. C# wird P/Invoke Funktionen immer dynamisch
anrufen, es wird also kein statischer Import im Assembly generiert woran das
Laden scheitern könnte. Du kannst also einfach ChangeWindowMessageFilter()
importieren mittels DllImport, die Funktion anrufen und die
EntryPointNotFoundException abfangen. Dass soll ebenfalls nur einmal
geschehen (dass Resultat soll gecached werden), sonst wird der Performance
darunter leiden.
 
T

Thomas Kehl

Hallo Jeroen

Besten Dank für den Hinweis. Werde ich gleich probieren.
Hab grad als ich mein Post gesucht habe festgestellt, dass ich mich in
der NG vertan habe.

Beste Grüsse, Thomas

Thomas said:
Hallo zusammen.

Ebenso Hallo. Aber ein Tipp: die Gemeinsprache hier ist Englisch, und
microsoft.public.de.german.entwickler.dotnet.csharp benutzen gibt bessere
Chancen auf ein gutes Antwort.




Ich benutze in meiner Application ChangeWindowMessageFilter() um für
den Betrieb der Applikation auf Vista oder W7 eine bestimmte Message
zuzulassen. Nun habe ich das Problem, dass die Applikation auch unter
Windows XP ausgeführt wird. Ich bin nun auf der Suche, die Funktion
mittels LateBinding in C# aufzurufen. Folgendes habe ich schon:
    [DllImport("kernel32.dll")]
    static extern IntPtr LoadLibrary(string csFileName);
    [DllImport("kernel32.dll")]
    static extern IntPtr GetProcAddress(IntPtr IntPtr_Module, string
csProcName);
    [DllImport("kernel32.dll")]
    static extern bool FreeLibrary(IntPtr IntPtr_Module);
    private static void AllowWM_COPYDATA() {
        IntPtr IntPtr_MyLib = LoadLibrary("user32.dll");
        IntPtr IntPtr_MyFunc = GetProcAddress(IntPtr_MyLib,
"ChangeWindowMessageFilter");
        // XXXXXXX

Dies alles ist nicht notwendig. C# wird P/Invoke Funktionen immer dynamisch
anrufen, es wird also kein statischer Import im Assembly generiert woran das
Laden scheitern könnte. Du kannst also einfach ChangeWindowMessageFilter()
importieren mittels DllImport, die Funktion anrufen und die
EntryPointNotFoundException abfangen. Dass soll ebenfalls nur einmal
geschehen (dass Resultat soll gecached werden), sonst wird der Performance
darunter leiden.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top