begin process at 2013 05 22 20:39:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

GUI

 > 

[C++][Win32][Windows Messages] reperer text region problemes


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C++][Win32][Windows Messages] reperer text region problemes

mardi 26 juin 2012 à 20:56:49 | [C++][Win32][Windows Messages] reperer text region problemes

wonay

Bonjour a tous !

J'ai commencé un projet ou je souhaiterai pouvoir faire poper le clavier virtuel ( ça c'est la partie facile ) au moment ou l'utilisateur clique sur un contrôleur ou il est possible d’écrire ( textbox dans une page web, notepad, words, cellule excel, .... )( ça c'est la partie ou j'ai des soucis ).

Après enquête j'ai découvert les "Windows Messages", j'arrive à récupérer le processus sur lequel le focus est :

Code C/C++ :
HWND GetGlobalFocus()
{
	// remember focus window for the current thread
	HWND hWndLocalFocus = GetFocus();

	// find foreground window
	HWND hWndFore = GetForegroundWindow();
	if (hWndFore == NULL)
		return NULL;

	// get IDs of the current thread and the thread that
	// owns foreground window
	DWORD dwCurrID = GetCurrentThreadId();
	DWORD dwForeID = GetWindowThreadProcessId(hWndFore, NULL);

	// if the current thread owns foreground window then just
	// return hWndLocalFocus
	if (dwForeID == dwCurrID)
		return hWndLocalFocus;

	// attach input states of the current thread and the foreground
	// thread
	if (!AttachThreadInput(dwCurrID, dwForeID, TRUE))
		return NULL;

	// now the current thread and the foreground thread have common
	// input state and we can query for a focus window
	HWND hWndGlobalFocus = GetFocus();

	// detach threads
	AttachThreadInput(dwCurrID, dwForeID, FALSE);

	// restore local focus
	SetFocus(hWndLocalFocus);

	return hWndGlobalFocus;
}

unsigned long GetTargetThreadIdFromWindow()
{
	HWND targetWnd;
	HANDLE hProcess;
	unsigned long processID = 0;

	targetWnd = GetGlobalFocus();
	return GetWindowThreadProcessId(targetWnd, &processID);
}


et donc j'injecte ma petite DLL dedans :

Code C/C++ :
HINSTANCE hinst = LoadLibrary(L"WindowsHookDLL.dll");
	MSG  uMsg;
	cout << "load DLL: " << hinst << endl;
	system("PAUSE");

	if(!hinst){
		cout << "ERROR DLL" << endl;
		system("PAUSE");
		return 0;
	}
	typedef void (*Install)(unsigned long);
	typedef void (*Uninstall)();

	Install install = (Install) GetProcAddress(hinst, "install");
	Uninstall uninstall = (Uninstall) GetProcAddress(hinst, "uninstall");

	while(true){
		system("CLS");

		PrintActualWindow();

		unsigned long threadID = GetTargetThreadIdFromWindow();
		cout << "ThreadID: "<< threadID<<endl;

		install(threadID);

		//Sleep(2000);
	}
	uninstall();

	system("PAUSE");
	return 0;


petite DLL qui écoute les windows messages :

Code C/C++ :
#include <iostream>
//#include <string>
#include <windows.h>
#include <fstream>
#include "WindowsMessages.h";

using namespace std;

HINSTANCE hinst;

#pragma data_seg(".shared")
HHOOK hhk = NULL;
#pragma data_seg()
#pragma comment(linker, "/SECTION:.shared,RWS")

LRESULT CALLBACK MessageHookProcedure(int code, WPARAM wParam, LPARAM lParam){

	WindowsMessages WM = WindowsMessages(((CWPSTRUCT*)lParam)->message);
	boolean jump = WM.getMessageJump();

	if(!jump){
		ofstream myfile;
		myfile.open ("D:/test.txt", ios::out | ios::app );
		myfile << "get: " << WM.getMessageCode() << " " << WM.getMessageName() << "n";
		myfile.close();
	}
	return CallNextHookEx(hhk,code,wParam,lParam);
}

extern "C" __declspec(dllexport) void install() { 
	hhk = SetWindowsHookEx(WH_CALLWNDPROC, MessageHookProcedure, hinst, NULL);
}
extern "C" __declspec(dllexport) void uninstall() {
	UnhookWindowsHookEx(hhk); 
}

BOOL WINAPI DllMain(  __in  HINSTANCE hinstDLL,	__in  DWORD fdwReason,	__in  LPVOID lpvReserved){
	hinst = hinstDLL;
	return TRUE;
}


ma class WindowsMessages c'est juste histoire d'avoir tous les windows messages ID ( le numéro hexa ) et le nom en chaine de caractère, histoire de pouvoir lire le log.

Le truc c'est que je reçois des milliards de messages différent , je sais pas lequel je dois attraper ou même si ce message existe.
Des idées ?

Merci !
lundi 2 juillet 2012 à 13:13:12 | Re : [C++][Win32][Windows Messages] reperer text region problemes

yann_lo_san

Salut,

Tu peux regarder un outil fourni avec VisualStudio qui s'appelle : spy++.
On pointe sur n'importe quelle fenêtre puis on checke les Windows MSG que l'on veut "espionner",
cela te donnera peut être des idées.

Bye...
lundi 2 juillet 2012 à 17:18:17 | Re : [C++][Win32][Windows Messages] reperer text region problemes

wonay

Merci de ta reponse !

Oui je connais. Je comprend pas bien comment sa fonctionne mais jai trouver que WM_COMMAND est a creuser. Cependant je ne vois pas bien comment lexploiter :/


Cette discussion est classée dans : code, messages, hwnd, thread, return


Répondre à ce message

Sujets en rapport avec ce message

Pb sur un ptit bout de prog en DirectX.... [ par Haldwin ] Salut a tous....Voila j'ai deux ptits pbs quand je lance cette appli ci-dessous... (VC++)La première est q'une fois sur deux ma variable hWnd apres le Je debute: [ par phpman ] Bonjour,je debute avec devc++, quand je creer un nouveau projet il me génère le code d'une form windows:#include /* Declare Windows procedure */LRESUL Dll Visual Aide [ par TheMaster ] Salut!j'ai un probleme, j'ai créer un logiciel permettant de visualiser des images.Les images sont stocke en ressource dans un dll.Mais je n'arrive pa sniffer [ par ashram79 ] Bonjourj essaye de faire une appliqui va écouter les messages échangés entre deux applicationsdistantes qui communiquent via un serveur tomcatqui est ressources et API !!!! [ par Xs ] salut !voila, pour me simplifier la tache, j'utlise les ressources pour creer une boite de dialog (sous VC++ 6).mais j'obtiens, lors de la compilation thread sur WndProc [ par kidpigeyre ] G une fonction WndProc chargé de réaliser tout mon programme (application GUI) (avec fenetre windows) et jmerai pouvoir faire un thread de cette fonct PB EditBox [ par SfyLer ] Bonjour à tous !J'ai créé un scanner de port sous dos, et j'ai commencer a le faire sous windows, j'ai presque fini le seul pb que j'ai c'est que je n API, probleme de synchronisation?? refresh visible dans la dlg:( [ par JackosKing ] yOp,Bon voilà, je debute en API? et je voulais coder des menus persos, le probleme c'est que ma fenetre n'arrete pas de se refresh, meme quand il n'y Prob de thread [ par sebastienbro ] Bonjour, j'ai un problème avec des thread, je n'arrive pas a en créer un :(Voici mon code : HANDLE hThread1;DWORD dwThreadId1;DWORD WINAPI T Fonction return dans une console windows [ par Jolfulorc ] Bonjour,Lorsque j'affiche un texte dans une console windows (code du genre : coutla façon que j'ai trouvé pour contourner cet inconvénient


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales