Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création d'un Hook souris [Api win-code Block]

Sujet résolu
    22 décembre 2014 à 20:54:45

    Bonjour à tous,

    Je voudrais récupérer les coordonnées de la souris (lorsqu'elle et en mouvement)  hors fenêtres sur tout l'écran peu importe sa position, ainsi je me suis tourné vers les hook

    Je voudrais juste récupérer les coordonnées et les écrire dans un fichier texte. Mais voilà, je n'y arrive pas même avec le proto de la fonction: HHOOK WINAPI SetWindowsHookEx(
      _In_  int idHook,
      _In_  HOOKPROC lpfn,
      _In_  HINSTANCE hMod,
      _In_  DWORD dwThreadId
    );

    Quelqu'un pourrait m'aider ?

    Merci d'avance

    -
    Edité par Ben_42 22 décembre 2014 à 21:08:54

    • Partager sur Facebook
    • Partager sur Twitter
    Cordialement, Ben
      22 décembre 2014 à 21:52:33

      une solution ?
      • Partager sur Facebook
      • Partager sur Twitter
      Cordialement, Ben
        22 décembre 2014 à 22:18:46

        Bonsoir,

        Inutile de upper si vite...

        Pose une question précise? Montre ton code...

        • Partager sur Facebook
        • Partager sur Twitter
        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
          22 décembre 2014 à 22:39:00

          Oui désolé mais ca fait plusieurs mois que je suis sur ce problème (pas de hook mais ils en font partie)

          Du coup, j'ai continu mes recherches et j'ai trouvé un code sur internet, je l'ai un peu modifier pour qu'il s'adapte. Le problème c'est qu'il est sous Virtual studio express (IDE que je n'ai jamais utilisé)

          Et je voudrais juste pouvoir écrire dans un fichier texte les coordonnées de la souris (+ lParam.pt.x + ";" + lParam.pt.y), sans les boutons qui ne m'intéresse pas

          Je cherche encore mais je n'arrive pas à faire une fonction si basique su code Block qu'est celle d'écrire. Pourtan je pensais qu'entre deux logiciel il n'y aller pas avoir autant de différence

          Mais voilà le code:

          using System;
          using System.ComponentModel;
          using System.Windows.Forms;
          using System.Runtime.InteropServices;
          using System.Reflection;
          using System.Diagnostics;
          
          namespace HookMouse
          {
            public partial class Form1 : Form
            {
              public Form1()
              {
                InitializeComponent();
              }
          
              //mettre en place un hook
          	[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
          	private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, int dwThreadId);
          
              //supprimer un hook mis en place
          	[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
          	private static extern int UnhookWindowsHookEx(int idHook);
          
          	//permet de ne pas bloquer la chaine d'execution des hooks
          	[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
          	private static extern int CallNextHookEx(int idHook, int nCode, int wParam, ref MouseLLHookStruct lParam);
          
             
          	private delegate int HookProc(int nCode, int wParam, MouseLLHookStruct lParam);
          	private HookProc MouseHookProcedure; //variable globale pour éviter le ramasse miettes
          
          	[StructLayout(LayoutKind.Sequential)]
          	private class POINT
          	{
          		/// <summary>
          		/// Coordonnée X. 
          		/// </summary>
          		public int x;
          		/// <summary>
          		/// Coordonnée Y.
          		/// </summary>
          		public int y;
          	}
          
          	[StructLayout(LayoutKind.Sequential)]
          	private class MouseHookStruct
          	{
          		/// <summary>
          		/// Structure POINT pour les coordonnée 
          		/// </summary>
          		public POINT pt;
          		/// <summary>
          		/// Handle de la window
          		/// </summary>
          		public int hwnd;
          		/// <summary>
          		/// Specifies the hit-test value. For a list of hit-test values, see the description of the WM_NCHITTEST message. 
          		/// </summary>
          		public int wHitTestCode;
          		/// <summary>
          		/// Specifies extra information associated with the message. 
          		/// </summary>
          		public int dwExtraInfo;
          	}
          
          	[StructLayout(LayoutKind.Sequential)]
          	private class MouseLLHookStruct
          	{
          		/// <summary>
          		/// Structure POINT.
          		/// </summary>
          		public POINT pt;
          		public int mouseData;
          		public int flags;
          		public int time;
          		public int dwExtraInfo;
          	}
          
          	private const int WH_MOUSE_LL = 14;
          	private const int WM_MOUSEMOVE = 0x200;
          	private const int WM_LBUTTONDOWN = 0x201;
          	private const int WM_RBUTTONDOWN = 0x204;
          	private const int WM_MBUTTONDOWN = 0x207;
          
              //fonction de rappel que Windows utilisera pour nous envoyer des informations
          	private int MouseHookProc(int nCode, int wParam, MouseLLHookStruct lParam)
          	{
          		if ((nCode >= 0)) { //nCode ne doit pas être inférieur à 0, sinon c'est qu'il y a un souci
          			switch (wParam) {
          				case WM_LBUTTONDOWN:
          					listBox1.Items.Add("Click gauche");
          					break; 
          				case WM_RBUTTONDOWN:
          					listBox1.Items.Add("Click droit");
          					break; 
          				case WM_MBUTTONDOWN:
          					listBox1.Items.Add("Click milieu");
          					break;
          			}
          			label1.Text = "Position: " + lParam.pt.x + ";" + lParam.pt.y;
          
          
          
          			//tant que la souris bouge (donc tant que cette procédure est appelée) on redémarre le timer
          			timer1.Stop();
          			timer1.Start();
                      
          		}
          
          		return CallNextHookEx(0, nCode, wParam, ref lParam);
          		//façon standard de retour des HookProc
          
          	}
          
          
          
          	public void StartMouseHook()
          	{
          		// Faire une instance de HookProc.
          		MouseHookProcedure = new HookProc(MouseHookProc);
          		//installer le hook
          		int hook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure, Process.GetCurrentProcess().MainModule.BaseAddress, 0);
          		// GC.KeepAlive(MouseHookProcedure)
          		//Si hook est a 0, donc la fonction SetWindowsHookEx a échoué
          		if (hook == 0) {
          			//Retourne le code d'erreur 
          			int errorCode = Marshal.GetLastWin32Error();
          			//Lance une exception du type Win32 
          			throw new Win32Exception(errorCode);
          		}
          	}
          
            
          
          
          	private void Form1_Load(System.Object sender, System.EventArgs e)
          	{
          		StartMouseHook();
                  
          	}
          	
          
          }
          
          }

          Je l'aurais préférer sous code Block, mais c'est déjà une chance d'avoir un exemple pareil !

          Voilà pour la partie écriture mais le compilateur sort une erreur de syntaxe ";"

            private void label1_Click(object sender, EventArgs e)
              {
          
          Dim file As New StreamWriter("c:\test.txt");
          file.WriteLine(label1.Text);
          file.Close();
          
              }


          -
          Edité par Ben_42 22 décembre 2014 à 23:36:25

          • Partager sur Facebook
          • Partager sur Twitter
          Cordialement, Ben
            22 décembre 2014 à 23:39:54

            Bon ton exemple, c'est du c#, pas du c++...

            Donc trouve toi un exemple C/C++ par exemple!

            -
            Edité par breizhbugs 22 décembre 2014 à 23:42:57

            • Partager sur Facebook
            • Partager sur Twitter
            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
              22 décembre 2014 à 23:43:39

              je vais essayer mais pas sur que je trouve
              • Partager sur Facebook
              • Partager sur Twitter
              Cordialement, Ben
                23 décembre 2014 à 1:09:55

                Tiens, un exemple minimal un peu naze à moitié trouvé sur internet, en C:

                #undef UNICODE
                #include <windows.h>
                #include <tchar.h>
                #include <stdio.h>
                
                const char g_szClassName[] = "OnTopperV2";
                FILE *fichier=NULL;
                void PrintNumber(int nNumber)
                {
                	fprintf(fichier, "(%d)", nNumber);
                }
                
                // la fonction hook qui est appelée  àchaque fois qu'il se passe un truc au niveau de la souris!
                LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
                {
                	char buff[128]={0};
                	if(nCode == HC_ACTION)
                	{
                		MSLLHOOKSTRUCT *mouseInfo = (MSLLHOOKSTRUCT*)lParam;
                        if(wParam == WM_LBUTTONDOWN)
                        {
                			GetWindowText(GetForegroundWindow(), buff, 128);
                            fprintf(fichier, "clicked <%s> ", buff); 
                        }
                        fprintf(fichier, "MouseX=%d  MouseY=%d\n", mouseInfo->pt.x,mouseInfo->pt.y);
                
                	}
                
                	return 0;
                }
                
                // procedure principale de la fenetre - ne contient que le strict minimum puiosque l'appli ne fait rien
                LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
                {
                    switch(msg)
                    {
                        case WM_CLOSE:
                            DestroyWindow(hwnd);
                        break;
                        case WM_DESTROY:
                            PostQuitMessage(0);
                		break;
                        default:
                            return DefWindowProc(hwnd, msg, wParam, lParam);
                    }
                    return 0;
                }
                
                int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow)
                {
                    WNDCLASSEX wc;
                    HWND hwnd;
                    MSG Msg;
                
                    wc.cbSize        = sizeof(WNDCLASSEX);
                    wc.style         = 0;
                    wc.lpfnWndProc   = WndProc;
                    wc.cbClsExtra    = 0;
                    wc.cbWndExtra    = 0;
                    wc.hInstance     = hInstance;
                    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
                    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
                    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
                    wc.lpszMenuName  = NULL;
                    wc.lpszClassName = g_szClassName;
                    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
                
                    if(!RegisterClassEx(&wc))
                    {
                        MessageBoxA(NULL, "Window Registration Failed!", "Error!",
                            MB_ICONEXCLAMATION | MB_OK);
                        return 0;
                    }
                
                    hwnd = CreateWindowEx(
                        WS_EX_CLIENTEDGE,
                        g_szClassName,
                        "OnTopperV2",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,
                        NULL, NULL, hInstance, NULL);
                
                    if(hwnd == NULL)
                    {
                        MessageBoxA(NULL, "Window Creation Failed!", "Error!",
                            MB_ICONEXCLAMATION | MB_OK);
                        return 0;
                    }
                //arrivé ici, on a créé une fenêtre
                
                	fichier = fopen("souris.txt", "w"); // on ouvre le fichier mouchard
                
                	ShowWindow(hwnd, SW_SHOW); // on affiche la fenetre (pratique pour fermer le programme)!
                	if(!SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0)) // on installe le hook
                	{
                		PrintNumber(GetLastError());
                	}
                
                    while(GetMessage(&Msg, NULL, 0, 0) > 0) //on traite les message de la fenêtre jusqu'a la fermeture de celle ci
                    {
                        TranslateMessage(&Msg);
                        DispatchMessage(&Msg);
                    }
                
                	fclose(fichier); // on ferme le fichier
                    return Msg.wParam;
                }
                



                • Partager sur Facebook
                • Partager sur Twitter
                ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                  23 décembre 2014 à 1:16:38

                  Super, j'ai essayer de mon coté, mais pas grand chose non plus. J'ai réussi a écrire dans un fichier sous l'autre langage (c#)

                  Merci beaucoup !!

                  Du coup, pour le moment je vais m'en satisfaire

                  Par contre, une fois que j'ai les coordonnées de ma souris dans un fichier txt  (enfin plutôt 2 pour x et y ) je fait les lis (cette fois sous Code Block) et je voudrais que ma fenêtre MainWindow (sous APi Win) se déplace avec elle

                  J'ai teste mais il faut que je reste dans la fenêtre. IL y a pas un moyen d'obliger mon programme à lire ces deux fichiers et ensuite d'actualiser sa position avec ces dernières ? (sans utiliser de Timer, je sais pas vraiment m'en servir) ?

                  Sinon je passe par QT au lieu de l'API Win

                  -
                  Edité par Ben_42 23 décembre 2014 à 1:43:07

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Cordialement, Ben
                    23 décembre 2014 à 1:58:30

                    Si je comprends bien, tu veux que ta fenêtre suive la souris? Pas besoin de passer par un fichier, remplace la ligne 25 par un MoveWindow (mais fait du hwnd ligne 53 une variable globale?) en calculant la position de ta fenêtre en fonction des coordonnées de la souris?

                    Il doit y avoir une fonction similaire sous qt j'imagine?

                    Sinon je ne sais pas ce que tu fais comme programme mais c'est un peu bizarre ce que tu veux faire...

                    • Partager sur Facebook
                    • Partager sur Twitter
                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                      23 décembre 2014 à 9:26:01

                      Salut,

                      Ca marche du tonnerre ce code !! :)

                      Et effectivement j'ai passé hwnd en variable globale

                      Pour te répondre je voudrais réaliser un programme pour les mal voyants: je veux mettre une image png (si j'y arrive) sur cette fenêtre pour qu'elle suive la souris

                      Par hasard, j'ai regardé sur internet mais tu ne connais pas un moyen pour supprimer la bordure d'une fenêtre sous api win ?

                      -
                      Edité par Ben_42 23 décembre 2014 à 11:15:54

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Cordialement, Ben
                        23 décembre 2014 à 11:16:48

                        (Ca existe deja et c'est intégré dans windows: c'est le programme magnify/loupe: menu démarrer, programmes / accessoires /options d'ergonomie / loupe (%windir%\system32\magnify.exe))

                        Et il y a même une api: http://msdn.microsoft.com/en-us/library/windows/desktop/ms692402%28v=vs.85%29.aspx

                        edit: pour supprimer la bordure, en C toujours par contre, pour l'api win32: https://social.msdn.microsoft.com/Forums/vstudio/en-US/b98c4c06-9581-44d3-8e5a-4adb2316e653/win32-about-styles-how-can-i-do-a-borderless-window?forum=vclanguage

                        -
                        Edité par breizhbugs 23 décembre 2014 à 11:19:05

                        • Partager sur Facebook
                        • Partager sur Twitter
                        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                          23 décembre 2014 à 11:34:03

                          Oui je sais, mais (ma grand mère mal voyante) n'arrive pas à s'adapter à cette loupe

                          Merci je vais aller voir pour la bordure

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Cordialement, Ben
                            23 décembre 2014 à 11:42:50

                            Un exemple de code avec l'api: https://code.msdn.microsoft.com/windowsdesktop/Magnification-API-Sample-14269fd2/sourcecode?fileId=42827&pathId=1612434249 (oubli pas de linker le bon fichier .lib)

                            La version windowed fait une sorte de négatif des couelurs pour améliorer le contraste!) (bien qu'un peu longue a démarrer elle marche plutot bien et semble relativement simple...)

                            • Partager sur Facebook
                            • Partager sur Twitter
                            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                              23 décembre 2014 à 11:51:31

                              Oh ! Je vais aller voir ca, je suis passé  coté !!

                              Merci énormément

                              Ps: Je suis aller voir pour la bordure mais  SetWindowLong(hwnd, WS_BORDER, NULL); ne semble pas fonctionner

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Cordialement, Ben
                                23 décembre 2014 à 12:01:12

                                Ben_42 a écrit:

                                Oh ! Je vais aller voir ca, je suis passé  coté !!

                                Merci énormément

                                Ps: Je suis aller voir pour la bordure mais  SetWindowLong(hwnd, WS_BORDER, NULL); ne semble pas fonctionner

                                Le mieux est de régler correctement le createwindow, pour le setwindowlong, il faut utiliser une autre fonction ensuite pour demander le rafraichissement de la fenêtre je crois!
                                EDIT: lu trop vite! c'est pas comme cela qu'on utilise: il faut d'abord récupérer le style d'une fenetre, lui enlever le style WS_BORDER et reaffecter le nouveau style via setwindowlong:

                                Pour faire de skyrim une full screen borderless windows par exemple: j'ai utilisé ce bout de code:

                                		dwStyle = GetWindowLongPtr( hwnd, GWL_STYLE); // on récupère le style actuel
                                		dwStyle = dwStyle & ~(WS_CAPTION | WS_BORDER); // on enlève la zone de titre et les bordures
                                		SetWindowLongPtr( hwnd, GWL_STYLE,  dwStyle); // on remet le style modifié
                                		if (SetWindowPos(hwnd, HWND_TOP, 0, 0, 1920, 1080, SWP_NOZORDER|SWP_FRAMECHANGED) == 0) //on réactualise la fenêtre en indiquant ce qui a été modifié - le cadre ici
                                			Error( "SetWindowPos");


                                (mais si c'est toi qui créer la fenêtre, autant la créer comme il faut dans le createwindowex!)



                                -
                                Edité par breizhbugs 23 décembre 2014 à 12:09:01

                                • Partager sur Facebook
                                • Partager sur Twitter
                                ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                  23 décembre 2014 à 13:27:31

                                  Ca fonctionne ! Effectivement j'ai lu trop vite

                                  Par contre, il reste toujours une bordure mais pas la" barre de gestion" du dessus

                                  Aussi, je sais qu'il faut créer un autre sujet, mais je pense que ca devrait être rapide (Jai du louper un truc super évident): je voudrais juste insérer une image dans ma fenêtre sans passer par des ressources

                                  Du coups, je prend une fonction généraliste:

                                  void afficheBitmap(HWND fenetreCiblee, char *chemin)
                                  {
                                          HBITMAP bitmap;
                                          HDC hDC;
                                  
                                          //Chargement du bitmap
                                          hDC=GetDC(fenetreCiblee);
                                  
                                          //Affichage du bitmap
                                  
                                          DeleteObject(bitmap);
                                          ReleaseDC(fenetreCiblee,hDC);
                                  }

                                  et ensuite dans mon int Main

                                  juste avant l'affichage de la fenêtre hwnd:

                                  voidafficheBitmap(HWND hwnd, "C:\\Users\\Ben\\Desktop\\test\\image.bmp");

                                  Mais voilà lors de la compil:  expected identifier before string constant (dans la fonction void de mon Main)

                                  et expected ',' or '...' before string constant

                                  -
                                  Edité par Ben_42 23 décembre 2014 à 14:35:14

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Cordialement, Ben
                                    23 décembre 2014 à 15:10:08

                                    Pas besoin du HWND dans l'appel de la fonction:

                                    afficheBitmap(hwnd, "C:\\Users\\Ben\\Desktop\\test\\image.bmp");

                                    est suffisant!

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                      23 décembre 2014 à 15:35:45

                                      Voilà ! c'était tout bête

                                      Donc plus d'erreur de compil mais mon image ne s'affiche pas , j'ai juste ma fenêtre avec son fond transparent  

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Cordialement, Ben
                                        23 décembre 2014 à 15:53:10

                                        Mets le code complet de la fonction afficheBitmap() ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                          23 décembre 2014 à 16:05:30

                                          La fonction void:

                                          void afficheBitmap(HWND fenetreCiblee, char *chemin)
                                          {
                                                  HBITMAP bitmap;
                                                  HDC hDC;
                                                  PAINTSTRUCT ps;
                                          
                                          
                                                  //Chargement du bitmap
                                                  hDC=GetDC(fenetreCiblee);
                                          
                                                  //Affichage du bitmap
                                          
                                                  hDC = BeginPaint(hwnd, &ps);
                                          
                                                  DrawState(hDC,NULL,NULL,(long)bitmap,NULL,10,10,0,0,DST_BITMAP);
                                          
                                                  EndPaint(hwnd, &ps);
                                          
                                                  DeleteObject(bitmap);
                                                  ReleaseDC(fenetreCiblee,hDC);
                                          }

                                           et l'appel:

                                          LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
                                          {
                                              switch (msg)
                                              {
                                              case WM_CLOSE:
                                                  DestroyWindow(hwnd);
                                                  break;
                                              case WM_DESTROY:
                                                  PostQuitMessage(0);
                                                  break;
                                          case WM_PAINT :
                                          {
                                          
                                          afficheBitmap(hwnd, "C:\\Users\\Charles\\Desktop\\test42\\image.bmp");
                                                 
                                          return 0;
                                              }
                                              default:
                                                  return DefWindowProc(hwnd, msg, wParam, lParam);
                                              }
                                              return 0;
                                          }


                                           


                                           

                                          -
                                          Edité par Ben_42 24 juillet 2015 à 0:06:12

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Cordialement, Ben
                                            23 décembre 2014 à 16:09:20

                                            Il manque le chargement de l'image dans la fonction?

                                            Utilise http://msdn.microsoft.com/en-us/library/windows/desktop/ms648045%28v=vs.85%29.aspx pour initialiser la variable bitmap...

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                              23 décembre 2014 à 16:17:23

                                              Effectivement, je l'avais carrément oublié (il est temps de finir ce programme ^^)

                                              Voilà je l'ai rajouté, mais toujours aucune image

                                              void afficheBitmap(HWND fenetreCiblee, char *chemin)
                                              {
                                              
                                                  HBITMAP hBmp;
                                                    HDC hDC;
                                              
                                                    hBmp=(HBITMAP)LoadImage(NULL,chemin,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
                                                    hDC=GetDC(fenetreCiblee);
                                                    DrawState(hDC,NULL,NULL,(LPARAM)hBmp,NULL,0,0,0,0,DST_BITMAP);
                                                    DeleteObject(hBmp);
                                                    ReleaseDC(fenetreCiblee,hDC);
                                              
                                                      DeleteObject(hBmp);
                                                      ReleaseDC(fenetreCiblee,hDC);
                                              }
                                              

                                               Et pour l'appel de ma fonction je n'ai pas d'erreur de compil mais un avertissement: deprecated conversion from string constant to 'char*' [-Wwrite-strings] et un avertissement a cette ligne: DrawState(hDC,NULL,NULL,(LPARAM)hBmp,NULL,0,0,0,0,DST_BITMAP);

                                                

                                              -
                                              Edité par Ben_42 23 décembre 2014 à 17:29:25

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Cordialement, Ben
                                                23 décembre 2014 à 18:03:23

                                                C'est bon j'ai trouvé !

                                                Je l'ai mis dans ma fonction callback

                                                -
                                                Edité par Ben_42 23 décembre 2014 à 18:27:12

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Cordialement, Ben
                                                  23 décembre 2014 à 18:38:40

                                                  Par contre, est ce que tu connait une fonction qui détecte si pendant x secondes la souris n'a pas bougée ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Cordialement, Ben
                                                    23 décembre 2014 à 19:07:55

                                                    Je ne crois pas que cela existe, à moins de le faire soit même via un timer...

                                                    Quel est le but?

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                                      23 décembre 2014 à 19:50:17

                                                      je pensais bien qu'il fallait utiliser un timer

                                                      Le but c'est de "cacher" la fenêtre, la mettre en arrière plan si on ne bouge pas la souris pendant, par exemple 5s

                                                      Aussi, il y a t-il un moyen de rendre la bordure transparente en api win ?

                                                      -
                                                      Edité par Ben_42 23 décembre 2014 à 20:10:52

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Cordialement, Ben
                                                        23 décembre 2014 à 20:23:41

                                                        Ca depend du thème d'affichage je crois... Mais je croyais que tu faisais une fenêtre sans bordure?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                                          23 décembre 2014 à 20:48:23

                                                          Oui c'est mon but mais la barre titre n'existe plus mais les bordure sont encore la

                                                          -
                                                          Edité par Ben_42 23 décembre 2014 à 20:54:05

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Cordialement, Ben
                                                            23 décembre 2014 à 22:09:38

                                                            Je sais pas si c'est possible de faire plus pour enlever led bordures ?
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Cordialement, Ben
                                                              23 décembre 2014 à 23:02:58

                                                              Fait voir ton code de création de la fenêtre?
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **

                                                              Création d'un Hook souris [Api win-code Block]

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown