Partage
  • Partager sur Facebook
  • Partager sur Twitter

QT et Api WIndows

14 octobre 2018 à 5:18:54

Hey ! 

Voila je cherche a changer la position et a simuler un click de souris pour cela j'utilise l'api windows

Sauf que je reçois un message d'erreur avec QT j'ai donc essayer avec visual Studio et la  tout fonctionne 

Voila le .cpp

#include "autoclicker.h"
#include <qt_windows.h> // pareille que #include <windows.h>
AutoClicker::AutoClicker() { trueOrFalseMacro = false; } AutoClicker::~AutoClicker() { } bool AutoClicker::testBool() { if(trueOrFalseMacro == false) trueOrFalseMacro = true; else trueOrFalseMacro = false; return trueOrFalseMacro; } void AutoClicker::initialisationPositionCommande(int largeurEcran,int hauteurEcran) //impossible d'initilialiser les variables dans le constructeur ? :/ { // calcul en croix avec une resolution de 1366 a 768 //permet de possitionner la souris en fonction de la resolution positionTapX = largeurEcran/2; positionTapY = hauteurEcran/2; positionOngletEvolutionHeroX = largeurEcran/2.367; positionOngletEvolutionHeroY = hauteurEcran/1.015; positionOngletPersonnageX = largeurEcran/2.367; positionOngletPersonnageY = hauteurEcran/2.7; positionfermerOngletX = largeurEcran/1.568; positionfermerOngletY = hauteurEcran/1.794; positionBoutonPrestigeX = largeurEcran/ 1.641; positionBoutonPrestigeY = hauteurEcran/1.089; positionBoutonAugmentationTapX =largeurEcran/ 1.639; positionBoutonAugmentationTapY = hauteurEcran/1.418; } void AutoClicker::boucleAutoClick() { SetCursorPos(positionTapX, positionTapY); //ici sa bloque mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); //ici sa bloque
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); //ici sa bloque
}

et message d'erreur : 

autoclicker.obj:-1: erreur : LNK2019: unresolved external symbol __imp_mouse_event referenced in function "public: void __cdecl AutoClicker::boucleAutoClick(void)" (?boucleAutoClick@AutoClicker@@QEAAXXZ)
autoclicker.obj:-1: erreur : LNK2019: unresolved external symbol __imp_SetCursorPos referenced in function "public: void __cdecl AutoClicker::boucleAutoClick(void)" (?boucleAutoClick@AutoClicker@@QEAAXXZ)
debug\autoClicker.exe:-1: erreur : LNK1120: 2 unresolved externals



Ne faite pas attention a initialisationPositionCommande() je sais que sa ce fait dans le constructeur mais impossible d'ajouter des  argument QT n'aprecie pas... 


Bref ces pas vraiment le problème comment resoudre les messages d'erreur  ?  


Merci d'avance :) 

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 16:55:41

Quand tu dis Qt, tu parles de Qt creator ou quoi? Car si tu utilises Qt, théoriquement tu n'as pas besoin d'utiliser l'API Windows. btw, si tu as des erreurs de link peux tu nous montrer peut être ton fichier .pro ?
  • Partager sur Facebook
  • Partager sur Twitter
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
14 octobre 2018 à 21:02:36

Salut ces QTCreator si justement cela me permet de simuler des clic hors de la fenêtre bon sinon j 'ai trouver pour ce qui ont le même problème

il faut rajouter 

#pragmacomment(lib,"user32.lib")

  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2018 à 23:07:00

Ajouter des pragma est rarement une bonne idée
  • Partager sur Facebook
  • Partager sur Twitter
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
15 octobre 2018 à 14:16:04

Qnope a écrit:

Ajouter des pragma est rarement une bonne idée

Ah bon ? Et pourquoi ça ? o_O

  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2018 à 19:04:11

Parce que vous mettez dans les sources de votre projet un truc qui n'a rien à voir avec le code mais avec la configuration du projet.

C'est pas "portable" votre machin (comique pour du Qt), ça joue à cache-cache avec des outils de gestion de dépendance entre module ou de conformité à une architecture, ça fait des dépendances implicite avec l'arborescence de l'environnement de compilation (c'est acceptable dans la configuration d'un projet, beaucoup moins directement dans le code source).

Comme le dit @Qnope, c'est rarement une bonne idée le "#pragma comment(lib,...)", très rarement même (moi, j'en connais pas, mais des cas où ça fout la merde j'en connais plein).

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
16 octobre 2018 à 10:39:21

Je suis complètement d'accord mais en jouant avec #ifdef ?
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 12:44:46

>Je suis complètement d'accord mais en jouant avec #ifdef ?

Oui, c'est un minimum pour utiliser ce genre de #pragma.

Mais ça règle pas le problème de l'outillage de vérification des dépendances, etc...

Pour des trucs de très bas niveau, extrêmement rigide, comme l'usage d'une C-Runtime ou d'une autre, je dis pas ; mais pour le commun des mortelles comme nous, qui n'implémentons pas les API système, l'approche "#pragma comment(lib,....)" est toujours beaucoup plus casse-gueule que la configuration des chaines de compilation.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
16 octobre 2018 à 13:32:52

bacelar a écrit:

Mais ça règle pas le problème de l'outillage de vérification des dépendances, etc...

Effectivement, on repousse le problème un peu plus haut... Merci de ta réponse.

  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2018 à 22:50:00

Les pragma, il y a des cas où tu ne peux pas trop faire autrement (sinon, ça n'existerait pas), mais si tu peux éviter un pragma, c'est aussi bien. Le pragama comment(lib,...) fait vraiment partie des pragma à éviter, en moyenne, ça fout plus la merde qu'autre chose. Il vaut largement mieux ajouter les lib qui vont bien dans le build system que de le faire avec un pragma. Pour le cas particulier de user32.lib, il s'agirait plutôt de la retirer, parce que je ne connais pas un build system Windows qui ne la colle pas d'office, kernel32, gdi32 et user32 sont les 3 libs de base de l'API Windows. Et bien sûr si tu ne compile pas pour Windows, ça va foutre la grouille, parce qu'évidemment user32.lib, ça n'existe que sous Windows.

-
Edité par int21h 19 octobre 2018 à 23:08:43

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug