Ahoj, nebylo by 10x jednodussi pouzit Javu 6, ktera ma primo pro tohle podporu?
-Vity > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Martin Blažek > Sent: Wednesday, November 28, 2007 6:33 PM > To: [email protected] > Subject: JNI - Odchycení zprávy okna > > Nazdar všem. > > Můj problém je následovný: > Mám Java aplikaci, kterou chci "minimalizovat do try lišty". > Udělal jsem > si proto pomocí JNI dll knihovnu ve které mám metody minimizeToTry a > restoreFromTry. V Javě mám udělané native metody stejného > jména, které > volám. Po zavolání minimizeToTry se vytvoří neviditelné okno, > jehož HWND > se použije při vytvoření ikonky. Ikonka se v try liště ukáže a po > restoreFromTry i správně zmizí. Moje otázka zní: Jak > zajistit, aby se po > kliknutí na ikonku v liště dalo vědět Java aplikaci, aby se mohla > zobrazit a aby se zavolala restoreFromTry (nebo provedla něco jiného)? > Poznámka: Samozřejmě je to jen pokusná verze, jaká ikonka tam > bude a tak > podobně neřeším :-) > > Díky všem za rady :-) > > > Global.java: > ... > public static native void minimizeToTry(String title); > public static native void restoreFromTry(); > ... > > dllmain.cpp: > #include "dll.h" > > HWND hwnd; > LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); > BOOL createWindow(void); > > JNIEXPORT void JNICALL Java_cz_pokus_Global_minimizeToTry(JNIEnv * > jnienv, jclass jclass, jstring title){ > jboolean isCopy; > const char *windowTitle = jnienv->GetStringUTFChars(title, &isCopy); > > createWindow(); > > NOTIFYICONDATA nid = { 0 }; > nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = hwnd; nid.uID = > ICON_1; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; > nid.uCallbackMessage = MSG_MINTRAYICON; nid.hIcon = LoadIcon(NULL, > IDI_APPLICATION); > strcpy(nid.szTip, windowTitle); > > Shell_NotifyIcon(NIM_ADD, &nid); > > return; > } > > JNIEXPORT void JNICALL Java_cz_pokus_Global_restoreFromTry(JNIEnv * > jnienv, jclass jclass){ > NOTIFYICONDATA nid = {0}; > nid.cbSize = sizeof(NOTIFYICONDATA); > nid.hWnd = hwnd; > nid.uID = ICON_1; > Shell_NotifyIcon(NIM_DELETE, &nid); > > return; > } > > BOOL createWindow(){ > WNDCLASSEX wincl; > > //wincl.hInstance = hThisInstance; > wincl.lpszClassName = "HLPWINDOW"; > wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; > wincl.cbSize = sizeof (WNDCLASSEX); > wincl.hIcon = NULL; > wincl.hIconSm = NULL; > wincl.hCursor = LoadCursor(NULL, IDC_ARROW); > wincl.lpszMenuName = NULL; > wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; > wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; > > if (!RegisterClassEx (&wincl)){ > printf("Chyba pri registrovani!!! > "); > return FALSE; > } > > hwnd = CreateWindowEx ( > 0, "HLPWINDOW", > > "Pokus", WS_OVERLAPPEDWINDOW, > CW_USEDEFAULT, CW_USEDEFAULT, > 544, 375, > HWND_DESKTOP, > NULL, > NULL, NULL ); > return TRUE; > } > > LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM > wParam, LPARAM lParam){ > switch (message){ > /* Zde odchycenou message bych chtel poslat Java aplikaci */ > default: > printf("Message: %i\n",message); > return DefWindowProc (hwnd, message, wParam, lParam); > } > } > > dll.h: > /* DO NOT EDIT THIS FILE - it is machine generated */ > #include <jni.h> > #include <windows.h> > #include <stdio.h> > > #define ICON_1 10001 > #define MSG_MINTRAYICON (WM_USER+1) > > #ifndef _Included_cz_pokus_Global > #define _Included_cz_pokus_Global > #ifdef __cplusplus > extern "C" { > #endif > > JNIEXPORT void JNICALL Java_cz_pokus_Global_minimizeToTry(JNIEnv *, > jclass, jstring); > JNIEXPORT void JNICALL Java_cz_pokus_Global_restoreFromTry(JNIEnv *, > jclass); > #ifdef __cplusplus > } > #endif > #endif
