Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Windows
Windows Forum d'entraide sur la programmation Windows. Tutoriel API Windows
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 15h05   #1
Invité de passage
 
Homme guillaume
Étudiant
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme guillaume
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 0
Points : 0
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 :
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 :
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
gizmoIchitzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 09h11   #2
Modérateur
 
Avatar de Andnotor
 
Inscription : septembre 2008
Messages : 2 233
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 2 233
Points : 2 906
Points : 2 906
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

Citation:
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...
Andnotor est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/12/2011, 09h58   #3
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
Au passage:
Code :
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 09h10   #4
Invité de passage
 
Homme guillaume
Étudiant
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme guillaume
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 0
Points : 0
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 )



Citation:
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
gizmoIchitzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 14h00   #5
Invité de passage
 
Homme guillaume
Étudiant
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme guillaume
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 0
Points : 0
pour que se soit la fenetre Java soit dans le thread, faut t'il lancer la méthode registerTouchWindow depuis un swingInvok ?
gizmoIchitzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2012, 16h55   #6
Invité de passage
 
Homme guillaume
Étudiant
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Nom : Homme guillaume
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 0
Points : 0
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 :

Citation:
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 ?
gizmoIchitzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2012, 20h12   #7
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h48.


 
 
 
 
Partenaires

Hébergement Web