IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

RegisterTouchWindow->access denied avec Frame Java


Sujet :

Windows

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 3
    Points
    3
    Par défaut RegisterTouchWindow->access denied avec Frame Java
    Bonjour tout le monde,

    J'ai créée une DLL en cpp pour envoyé à mon application Java les gestes multitouch que je fais sur mon écran tactile ( j'ai eu un problème que j'avais exposé ici.

    j'ai un autre problème maintenant :

    Je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RegistertouchWindows(hwnd,TWF_FINETOUCH)
    pour enregistrer mes gestes bas level (le doigt touche, ne touche plus, se déplace). Malheureusement, cette méthode me renvoie une erreur 5 ( access denied).
    Je suis administrateur de ma machine, et je possède par conséquent tous les droits. Pourquoi ai-je cette erreur?
    Cela vient-il du fait que ma fenêtre principal est une Frame de java?


    bout de code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    JNIEXPORT jboolean JNICALL Java_org_tas_multitouch_input_inputSources_W7NativeTouchSource_init
      (JNIEnv *env, jobject f, jlong hWnd)  {
    	_booltest = FALSE;
    	  if(!hWnd){
    		return FALSE;
    	  }
    
    	//  jobject frame = (*env).NewGlobalRef(f);
    	
    	 HINSTANCE hInst = (HINSTANCE)GetWindowLong((HWND)hWnd, GWL_HINSTANCE);
    	 LONG_PTR proc = SetWindowLongPtr((HWND) hWnd, GWL_WNDPROC,(long)WndProc);
    
    
        BOOL isRegister = RegisterTouchWindow((HWND) hWnd, TWF_FINETOUCH);
    
    	  //Enable all gesture types
          GESTURECONFIG gestureConfig;
    	  gestureConfig.dwID = 0;
    	  gestureConfig.dwBlock = 0;
    	  gestureConfig.dwWant = GC_ALLGESTURES;
    
    
    	  BOOL result = SetGestureConfig((HWND)hWnd, 0, 1, &gestureConfig, sizeof(gestureConfig));
    		
    	  return TRUE;
    }
    le HWND est bien celui de ma Frame Java

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    C'est l'erreur produite si la fenêtre n'appartient pas au thread qui appelle la fonction. Du fait que les messages standards (WM_MOUSEMOVE, etc.) sont toujours envoyés en parallèle, ça ne pourrait être que source de conflit.

    Sache également que tu ne peux pas utiliser WM_GESTURE et WM_TOUCH en même temps. C'est l'un ou l'autre

    WM_TOUCH and WM_GESTURE messages are mutually exclusive. If you call RegisterTouchWindow, you will not receive WM_GESTURE messages.
    Il faudra revoir ton concept...

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Au passage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr( (HWND)hWnd, GWLP_HINSTANCE );
    LONG_PTR proc = SetWindowLongPtr( (HWND)hWnd, GWLP_WNDPROC,(LONG_PTR)WndProc );
    Quitte à se préparer au 64 bits, autant le faire jusque au bout.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci de vos réponses

    Citation Envoyé par Andnotor Voir le message
    C'est l'erreur produite si la fenêtre n'appartient pas au thread qui appelle la fonction. Du fait que les messages standards (WM_MOUSEMOVE, etc.) sont toujours envoyés en parallèle, ça ne pourrait être que source de conflit.

    Sache également que tu ne peux pas utiliser WM_GESTURE et WM_TOUCH en même temps. C'est l'un ou l'autre



    Il faudra revoir ton concept...
    J'ai lu que les deux WM_XX ne pouvaient fonctionner en même temps, c'est une erreur de recopie de ma part d'avoir laisser les deux :
    WM_GESTURE ne m'interresse pas (bien qu'il fonctionne), je cherche à faire fonctionner WM_TOUCH.
    Comment mettre la fenêtre la dans le thread dans ce cas la? (je pensais que le fait de mettre le bon HWND suffisait )



    Au passage:
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr( (HWND)hWnd, GWLP_HINSTANCE );
    LONG_PTR proc = SetWindowLongPtr( (HWND)hWnd, GWLP_WNDPROC,(LONG_PTR)WndProc );
    Quitte à se préparer au 64 bits, autant le faire jusque au bout.
    Merci beaucoup, j'avoue que je n'avais pas totalement compris ce passage

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    pour que se soit la fenetre Java soit dans le thread, faut t'il lancer la méthode registerTouchWindow depuis un swingInvok ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Je reviens vers vous avec la même erreur, que je n'ai pas réussi à corriger :

    Je n'arrive pas à utiliser la méthode registerTouchWindow avec une fenêtre Java.

    J'ai créé une JFrame en java, que je récupère grâce à la méthode FindWindows.

    Je passe le HWND ainsi récupéré à ma méthode registerTouchWindow(HWND, 0) en cpp.

    souci : la méthode me renvoie l'erreur 5(ERROR_ACCESS_DENIED). en regardant sur msdna :

    The function fails with ERROR_ACCESS_DENIED if the calling thread does not own the specified window.
    Mais je ne sais pas comment faire appartenir ma fenetre au Thread ...
    Quelqu'un pourrait-il m'aider svp ?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je n'ai aucune idée de à quel thread appartient une fenêtre Java.
    Mais c'est à un thread du processus de la JVM, en tout cas.

    Peut-être qu'en appelant ta méthode depuis un handler d'événement de la jFrame...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Relay Access Denied avec Postfix
    Par dnizard dans le forum Administration système
    Réponses: 0
    Dernier message: 12/05/2009, 14h54
  2. access denied (java.util.PropertyPermission java.io.tmpdir read)
    Par benyboyJAVA dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/01/2009, 11h12
  3. insertion date dans access avec code java
    Par voyageur dans le forum Access
    Réponses: 3
    Dernier message: 20/06/2006, 21h36
  4. java.security.AccessControlException: access denied
    Par ludonantes dans le forum Applets
    Réponses: 10
    Dernier message: 28/03/2006, 17h44
  5. Réponses: 2
    Dernier message: 27/03/2006, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo