A pokud už z nějakého důvodu nemůžete použít Javu 6, podívejte se na
https://jdic.dev.java.net/ , odkud ta komponenta pro Javu 6 pochází.
Filip Jirsák
2007/11/28, Vity <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:
Ahoj,
nebylo by 10x jednodussi pouzit Javu 6, ktera ma primo pro tohle
podporu?
-Vity
> -----Original Message-----
> From: [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>
> [mailto:[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>] On Behalf Of Martin Blažek
> Sent: Wednesday, November 28, 2007 6:33 PM
> To: [email protected] <mailto:[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
--
Filip Jirsák
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>