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

Odpovedet emailem