Newsgroup: it.comp.lang.c++
Titolo: perche non ritorna il valore puntato???

Perche non mi ritorna il valore contenuto dove punta ????
long _stdcall SetMonitorBright() 
{
	HWND hwnd;
	HMONITOR hmon;
	BOOL result;
	DWORD cPhysicalMonitors;
	LPPHYSICAL_MONITOR pPhysicalMonitors = NULL;
 
	hwnd = GetDesktopWindow();
	hmon = MonitorFromWindow(hwnd,MONITOR_DEFAULTTOPRIMARY);
	LPDWORD minb=0,curb=0,maxb=0;
	result = GetNumberOfPhysicalMonitorsFromHMONITOR(hmon,&cPhysicalMonitors);
	if(result)
	{
		pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(
			cPhysicalMonitors* sizeof(PHYSICAL_MONITOR));
		if(pPhysicalMonitors != NULL)
		{
			result = GetPhysicalMonitorsFromHMONITOR(
				hmon, cPhysicalMonitors, pPhysicalMonitors);
 
			result = GetMonitorBrightness(hmon, minb, curb, maxb);
PARTE INCRIMINATA RITORNA IL VALORE DI CURB E NON QUELLO A CUI PUNTA
			if (result){
				return *curb;
			}
			free(pPhysicalMonitors);
 
		}
 
	}
	return 0;
} 

a che te riferisci ?
un po di contesto .....


 return *curb;
return curb;

 }
Veramente quanto sopra DEVE ritornare il valore di curb, cioč una DWORD 
che poi starŕ a te interpretare come intero unsigned, suppongo.
Se volevi che ritornasse un puntatore dovevi scrivere
return curb;

DWORD minb=0,curb=0,maxb=0;
result = GetMonitorBrightness(hmon, &minb, &curb, &maxb);
return curb;
In questo modo la funzione ritorna un numero anche se a dire il vero mi 
sembra strano che per settare la luminosita di uno schermo led vi sia un 
numero negativo astronomico. Oltretutto sia minb, curb, e maxb ritornano lo 
stesso valore.
Potrei capire se il monitor non supportasse tale funzione, ma questo č un 
portatile e devo implementare questa funzione su uno schermo touch screen. 
Se vado nelle propieta del monitor vi č un cursore che aumenta e diminuisce 
la luminosita su 10 livelli, quindi la funzione c'č.
Vi riposto la funzione ricorretta. Qualche idea in merito???
Grazie
// Monitor.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "targetver.h"
#include <Windows.h>
#include <HighLevelMonitorConfigurationAPI.h>
#include <PhysicalMonitorEnumerationAPI.h>
// Bisogna inserire anche DXVA2.lib come libreria esterna
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 long _stdcall SetMonitorBright()
{
	HWND hwnd;
	HMONITOR hmon;
	BOOL result;
	DWORD cPhysicalMonitors;
	LPPHYSICAL_MONITOR pPhysicalMonitors = NULL;
	hwnd = GetDesktopWindow();
	hmon = MonitorFromWindow(hwnd,MONITOR_DEFAULTTOPRIMARY);
	DWORD minb=0,curb=0,maxb=0;
	result = GetNumberOfPhysicalMonitorsFromHMONITOR(hmon,&cPhysicalMonitors);
	if(result)
	{
		pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(
			cPhysicalMonitors* sizeof(PHYSICAL_MONITOR));
		if(pPhysicalMonitors != NULL)
		{
			result = GetPhysicalMonitorsFromHMONITOR(
				hmon, cPhysicalMonitors, pPhysicalMonitors);
			result = GetMonitorBrightness(hmon, &minb, &curb, &maxb);
			if (result){
				return minb;
				//free(pPhysicalMonitors);
			}
		}
	}
	return 0;
} 


Non ho provato, perň presumo che dovresti scrivere
result = GetMonitorBrightness(pPhysicalMonitors[0].hPhysicalMonitor, 
&minb, &curb, &maxb);
invece di
result = GetMonitorBrightness(hmon, &minb, &curb, &maxb);
altrimenti, per che serve la chiamata a GetPhysicalMonitorsFromHMONITOR?