From: Thomas Kehl on 23 Oct 2009 13:12 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
From: Jeroen Mostert on 23 Oct 2009 13:34 Thomas Kehl wrote: > 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. -- J.
From: Thomas Kehl on 23 Oct 2009 14:51 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 On 23 Okt., 19:34, Jeroen Mostert <jmost...(a)xs4all.nl> wrote: > Thomas Kehl wrote: > > 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. > > -- > J.- Zitierten Text ausblenden - > > - Zitierten Text anzeigen -
|
Pages: 1 Prev: ContextMenuStrip steals focus? Next: What is "event" good for... |