Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-06-2008, 19:04   #1
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
[C++] Simulare Click mouse/Immagini

Allora raga devo fare un programma abbastanza complesso, ho quasi finito ma mi sono bloccato su un particolare aspetto.
Innanzitutto premetto che stò utilizzando Visual Studio 2008 e programmo in C++.

1- Mi servirebbe una funzione che simula il click sinistro del mouse ogni tot secondi.
Su internet ho trovato alcune funzioni ma non mi vanno...

2- Ho bisogno di una funzione che cambia finestra di windows (ovvero va alla finestra chiamata tal de tali) e catturi un immagine:
un quadrato che va da X1,Y1 a X2,Y2 della finestra tal de tali.

Dopodichè dovrebbe confrontare questa immagine catturata con varie immagini in archivio e vedere se sono perfettamente identiche.
Non ne ho idea di come si fa...

PS: Nn pensate male non mi serve per niente di losco


Grazie in anticipo per qualunque aiuto e suggerimento!
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2008, 11:06   #2
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Up


Nessuno può aiutarmi?
plssssssssssssssssssssssss
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2008, 11:37   #3
variabilepippo
Senior Member
 
L'Avatar di variabilepippo
 
Iscritto dal: Mar 2007
Messaggi: 1792
Quote:
Nessuno può aiutarmi?
Passi per il banale punto 1) (basta inviare un messaggio WM_LBUTTONDOWN seguito da un WM_LBUTTONUP, per esempio) al resto del post non si può rispondere in 2 righe (soprattutto se *non hai idea* di come farlo tu sa solo) e probabilmente non sono in molti ad avere tempo/voglia di farlo.
variabilepippo è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2008, 17:13   #4
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Qualcosa di più sul punto 1?

In particolare servirebbe il codice di una funzione in C++ così:

Click(WindowName, X, Y);

Ovvero dando il nome di una finestra e le coordinate XY, relative al punto dove clikkare della finestra, effettui subito un Click....

ringrazio in anticipo per qualunque aiuto
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2008, 17:23   #5
variabilepippo
Senior Member
 
L'Avatar di variabilepippo
 
Iscritto dal: Mar 2007
Messaggi: 1792
Quote:
In particolare servirebbe il codice di una funzione in C++ così:
Sono 3 righe di codice in croce: con la macro MakeLParam ottieni il punto partendo dalle coordinate, poi invochi PostMessage, la prima volta con WM_LBUTTONDOWN (passi come LParam il punto sul quale cliccare), la seconda con WM_LBUTTONUP. Il primo parametro della PostMessage è l'handle della finestra la cui window procedure riceverà il messaggio.
variabilepippo è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2008, 19:24   #6
|_ArgH_|
Junior Member
 
L'Avatar di |_ArgH_|
 
Iscritto dal: Apr 2007
Messaggi: 17
The mouse_event function synthesizes mouse motion and button clicks.

Windows NT/2000/XP: This function has been superseded. Use SendInput instead.

direttamente dall'SDK di zio Bill.

PS: mouse_event su winxp funziona non so su Vista e successivi
|_ArgH_| è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2008, 18:31   #7
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
ho risolto il punto uno, ma per il punto 2 che io sappia l'unica soluzione è di prendere le due immagini e confrontarle con getpixel()...
un pixel alla volta : \ mi sà che è lunga la cosa.... anche perchè mi dicevano che come funzione è abbastanza lenta...
Cmq non saprei nella pratica come aprire l'immagine che ho salvato(magari è anche semplice)

Qualche altra soluzione? :|
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 18:51   #8
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Raga ho un problema con getpixel perchè mi restituisce sempre lo stesso valore: 4294967295
che per quanto capito è un valore "errore".

codice:
Codice:
POINT pt;
HWND GHandle()
{
	return FindWindow(NULL, "Finestra");
}

HDC hdc = GetDC(GHandle());

GetCursorPos(&pt);
GetPixel(hdc,pt.x,pt.y)
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 19:15   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
non serve che confronti pixel per pixel con GetPixel, anche perché ti hanno detto bene: ci metteresti una vita. devi ottenere i bits di ciascuna immagine con GetDIBits e confrontare i due buffers di memoria con una semplice memcmp.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 19:32   #10
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Perfetto grazie mille adesso ci lavoro.

In ogni caso sai come mai mi dà questo errore? Perchè lo devo cmq usare una volta...
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 20:33   #11
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Una cosa:

Io devo prelevare un immagine rettangolare che parte da XY e arriva a X2Y2, di una specifica finestra!

Poi se ce l'ho riesco a confrontarla ma come faccio ad averla? °_°
Ho trovato solo funzioni che catturano l'intera immagine di finestre....
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 20:40   #12
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Valas Guarda i messaggi
In ogni caso sai come mai mi dà questo errore?
probabilmente perché le coordinate che specifichi stanno fuori dal rettangolo della finestra: GetCursorPos restituisce coordinate relative al riferimento cartesiano dello schermo (origine degli assi in alto a sinistra, tipicamente fuori dalla tua finestra), GetPixel invece vuole coordinate relative al riferimento della finestra (origine sull'angolo superiore sinistro della finestra).

per convertire usa ScreenToClient o ClientToScreen.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 20:45   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Valas Guarda i messaggi
Una cosa:

Io devo prelevare un immagine rettangolare che parte da XY e arriva a X2Y2, di una specifica finestra!

Poi se ce l'ho riesco a confrontarla ma come faccio ad averla? °_°
Ho trovato solo funzioni che catturano l'intera immagine di finestre....
crea un nuovo DC compatibile con quella della finestra usando CreateCompatibleDC, crea un bitmap con CreateCompatibleBitmap e selezionacelo con SelectObject, trasferisci verso questo nuovo DC il rettangolo di interesse con BitBlt, preleva i dati con GetDIBits. ora scusa ma metterti tutti i link a MSDN mi secca un po', te le cerchi da solo chè tanto stanno tutte qui.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 20:53   #14
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Quote:
probabilmente perché le coordinate che specifichi stanno fuori dal rettangolo della finestra: GetCursorPos restituisce coordinate relative al riferimento cartesiano dello schermo (origine degli assi in alto a sinistra, tipicamente fuori dalla tua finestra), GetPixel invece vuole coordinate relative al riferimento della finestra (origine sull'angolo superiore sinistro della finestra).
Escluderei perchè ho posizionato la finestra in posizione 0,0 e poi ho fatto molti tentativi col cursore ovunque sullo schermo...

Grazie adesso provo : D tanto su msdn se sò il nome delle funzioni li trovo fast ty
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 22:39   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Valas Guarda i messaggi
Escluderei perchè ho posizionato la finestra in posizione 0,0 e poi ho fatto molti tentativi col cursore ovunque sullo schermo...
nel caso generale non mi viene in mente altro: suppongo che l'HDC che passi alla GetPixel sia valido e che abbia un bitmap selezionato. vedi se GetLastError restituisce informazioni utili, e soprattutto vedi se la prima chiamata che fallisce è proprio la GetPixel, e non magari la GetDC.

EDIT - o magari la FindWindow sicuro di averla trovata sta finestra?


Quote:
Grazie adesso provo : D tanto su msdn se sò il nome delle funzioni li trovo fast ty
occhio a non prendere la documentazione di Windows CE: me la ritrovo sempre tra le pa**e nei risultati del motore di ricerca (Win32 è praticamente duplicato).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2008, 23:24   #16
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
scusa ma mi sono incasinato di brutto...
quello che ho capito:
Codice:
HWND GHandle()
{
	return FindWindow(NULL, "Finestra");
}

HDC hdc = GetDC(GHandle());

		x = 100; y = 100;
		HDC hdc2 = CreateCompatibleDC(hdc);

		HBITMAP bitmap = CreateCompatibleBitmap(hdc2, 250, 250);

		SelectObject(
		  hdc,          // handle to DC
		  bitmap   // handle to object
		);
		BitBlt(
		  hdc2, // handle to destination DC
		  x,  // x-coord of destination upper-left corner
		  y,  // y-coord of destination upper-left corner
		  250,  // width of destination rectangle
		  250, // height of destination rectangle
		  hdc,  // handle to source DC
		  x,   // x-coordinate of source upper-left corner
		  y,   // y-coordinate of source upper-left corner
		  MERGECOPY
		  );


// qua proprio mi perdo nel nulla
                  LPVOID bits;  
		  LPBITMAPINFO bitm;

		GetDIBits(
		  hdc2,           // handle to DC
		  bitmap,      // handle to bitmap
		  NULL,     // first scan line to set
		  NULL,     // number of scan lines to copy
		  bits,      // array for bitmap bits
		  bitm,     // bitmap data buffer
		  DIB_RGB_COLORS        // RGB or palette index
                  };
fatto ciò (che sarà sicuramente sbagliato)
Come faccio a salvare l'immagine che ne esce in maniera permanente e poi ad aprirne una mia e a confrontarla? Se mi fate vedere il codice ve ne sarei grato grazie... (scusate l'ignoranza ma per me è un aspetto completamente nuovo)


Quote:
nel caso generale non mi viene in mente altro: suppongo che l'HDC che passi alla GetPixel sia valido e che abbia un bitmap selezionato. vedi se GetLastError restituisce informazioni utili, e soprattutto vedi se la prima chiamata che fallisce è proprio la GetPixel, e non magari la GetDC.
la finestra la trova sicuramente perchè gli chiedo sempre di metterla in primo piano appena parte, e il GetDC restituisce
tipo 880119B8, quindi direi che funziona.

Ultima modifica di Valas : 15-06-2008 alle 23:32.
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 11:57   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Valas Guarda i messaggi
Come faccio a salvare l'immagine che ne esce in maniera permanente
http://msdn.microsoft.com/en-us/libr...11(VS.85).aspx
http://msdn.microsoft.com/en-us/libr...40(VS.85).aspx


Quote:
e poi ad aprirne una mia e a confrontarla?
caricare un'immagine da file è un dilemma a causa del numero di formati che esistono per la memorizzazione delle immagini. se devi leggere un file .bmp basta che usi LoadImage, altrimenti devi o sviluppare del codice ad-hoc per leggere lo specifico formato o utilizzare una libreria di terze parti, come la libpng.


Quote:
Se mi fate vedere il codice ve ne sarei grato grazie... (scusate l'ignoranza ma per me è un aspetto completamente nuovo)
ora non ci allarghiamo non ho tutto questo tempo. io ti posso dare delle indicazioni e posso linkarti le pagine di documentazione, poi sulla documentazione te la cavi da solo; anche perché trattandosi di documentazione molto vecchia ormai è "matura": la Microsoft ci lavora e la migliora da parecchi anni (decenni direi) e si tratta anche di argomenti ben conosciuti.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 12:36   #18
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Ok grazie, ma il codice che ho scritto è giusto? Mi sembra assurdo che non abbia fatto qualche casino
Valas è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 18:12   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Valas Guarda i messaggi
Ok grazie, ma il codice che ho scritto è giusto? Mi sembra assurdo che non abbia fatto qualche casino
ne hai fatti una valanga infatti
pare che alla documentazione tu abbia dato solo un'occhiata fugace. non essere assetato di risultati perché Win32 è complesso e con la fretta non ne avrai mai: non ci sono scorciatoie, leggi tutto quello che devi leggere e vedrai che non ti... "perderai nel nulla".

qualche osservazione:
- controlla sempre i valori di ritorno per eventuali errori: se si è verificato un errore non continuare, libera tutte le risorse allocate ed esci.
- come mai nella BitBlt hai specificato x e y (cioè, 100-100) come coordinate dell'uper-left corner del rettangolo di destinazione? non dovrebbero essere 0-0 ?
- sempre nella BitBlt, non sarebbe meglio SRCCOPY? come mai hai passato MERGECOPY?
- quando devi passare uno zero numerico evita di usare la costante NULL: quella in genere si usa solo per i puntatori.
- alla GetDIBits stai chiedendo di restituirti precisamente zero scanlines, cioè le stai chiedendo di non copiarti nulla nel buffer.
- non hai inizializzato ne' la variabile bits ne' la variabile bitm.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 21:35   #20
Valas
Member
 
Iscritto dal: Jan 2008
Messaggi: 41
Grazie per la pazienza!
Innanzitutto ti dico che sono più niubbo di quanto sembro... e sembro parecchio niubbo!

nella BitBlt ho specificato per provare 100-100 perchè sono le coordinate dove devo iniziare il rettangolo da copiare. non chiedermi perchè l'ho messo 2 volte...
Il fatto è che già di inglese sò poco e quindi su msdn capisco il 50% delle cose...

In ogni caso così è troppo complicato per i miei gusti, ho risolto il problema del getpixel che insensatamente il problema era che il nome della finestra era "finestra " e non "finestra"...
Ovvero se ci aggiungo uno spazio in fondo va se no no....
Anche se alla fine la funzione che mi metteva in primo piano la finestra funzionava cmq....


Comunque ho deciso di usare GetPixel prelevando dei pixel "campione" tipo 10 pixel di cui confronto il colore, se sono uguali allora ritengo tutta l'immagine uguale...
se non è più veloce sicuramente è meno snervante per la mia testolina : P
Valas è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Dongfeng sfida la NATO: navi dalla Cina ...
5G Standalone per il mondo marittimo: Er...
Nova Lake-S: configurazioni fino a 52 co...
Baxi presenta la pompa di calore Alya E ...
PC ASUS e Acer vietati in Germania: il t...
Stellantis rilancia il diesel in Europa:...
Truffa per utenti Trezor e Ledger: lette...
Wi-Fi 7 conveniente: FRITZ! lancia 4630,...
La Formula 1 dei robot tagliaerba miglio...
Il nuovo gioco del creatore di God of Wa...
Grok arriva sulle Tesla in Europa: l'int...
Assassin's Creed IV: Black Flag Remake p...
Il padre di God of War attacca Sons...
È operativo il primo computer qua...
Western Digital avverte: anche gli hard ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v