Problème de P/Invoke avec Callback

Problème de P/Invoke avec Callback - C#/.NET managed - Programmation

Marsh Posté le 31-05-2005 à 19:11:22    

Bonsoir à tous ^^
 
Je me suis lancé cet aprem dans la réalisation d'un petit programme pour changer le PowerScheme utilisé par windows suivant l'application démarrée. [:canaille]  
 

  • A titre d'information, le PowerScheme représente le mode d'alimentation du pc (Toujours allumé, consomation minimale...) et est utile pour l'utilisation du Cool'n'Quiet d'AMD.


 
Donc , pour pouvoir lister tous les PwrScheme et leur assigner une liste d'executables, j'ai cherché un peu partout et j'en suis venu à la conclusion suivante : utiliser la dll w32 Powrprof.dll  :cry: .
 
J'ai donc trouvé ceci sur msdn :
http://msdn.microsoft.com/library/ [...] ctions.asp
 
Et je me suis "amusé" a tout transformer en C# (via des structs,enum,et un delegate pour le Callback)
 
Mais le problème est que cette fonction ne me permet (apparament), que d'obtenir un bool, qui retourne True une fois l'énumération finie (si j'ai bien compris  [:pingouino] ).
 
Mais comme a chaque Callback, il prend les données du PwrScheme qu'il traite, je pense que y a moyen de recuperer ses infos (c'est ce qui m'interesse en fait)....Mais je vois pas comment faire...Je bloque...
 
Donc voila le code  [:canaille]  
 

Code :
  1. public enum SystemPowerState
  2.  {
  3.   PowerSystemUnspecified = 0,
  4.   PowerSystemWorking =1,
  5.   PowerSystemSleeping1 = 2,
  6.   PowerSystemSleeping2 = 3,
  7.   PowerSystemSleeping3 = 4,
  8.   PowerSystemHibernate = 5,
  9.   PowerSystemShutdown = 6,
  10.   PowerSystemMaximum = 7
  11.  }
  12.  public enum PowerAction
  13.  {
  14.   PowerActionNone = 0,
  15.   PowerActionReserved,
  16.   PowerActionSleep,
  17.   PowerActionHibernate,
  18.   PowerActionShutdown,
  19.   PowerActionShutdownReset,
  20.      PowerActionShutdownOff,
  21.   PowerActionWarmEject,
  22.  }
  23.  public struct PowerActionPolicy
  24.  {
  25.   public PowerAction Action;
  26.   public long Flags;
  27.   public long EventCode;
  28.  }
  29.  [StructLayout(LayoutKind.Sequential , CharSet = CharSet.Unicode)]
  30.  public struct UserPowerPolicy
  31.  {
  32.   public long Revision;
  33.   public PowerActionPolicy IdleAc;
  34.   public PowerActionPolicy IdleDc;
  35.   public long IdleTimeoutAc;
  36.   public long IdleTimeoutDc;
  37.   public char IdleSensitivityAc;
  38.   public char IdleSensitivityDc;
  39.   public char ThrottlePolicyAc;
  40.   public char ThrottlePolicyDc;
  41.   public SystemPowerState MaxSleepAc;
  42.   public SystemPowerState MaxSleepDc;
  43.   [MarshalAs(UnmanagedType.ByValTStr , SizeConst = 2)]
  44.   public string Reserved;
  45.   public long VideoTimeoutAc;
  46.   public long VideoTimeoutDc;
  47.   public long SpindownTimeoutAc;
  48.   public long SpindownTimeoutDc;
  49.   public bool OptimizeForPowerAc;
  50.   public bool OptimizeForPowerDc;
  51.   public char FanThrottleToleranceAc;
  52.   public char FanThrottleToleranceDc;
  53.   public char ForcedThrottleAc;
  54.   public char ForcedThrottleDc;
  55.  }
  56.  [StructLayout(LayoutKind.Sequential , CharSet = CharSet.Unicode)]
  57.  public struct MachinePowerPolicy
  58.  {
  59.   public long Revision;
  60.   public SystemPowerState MinSleepAc;
  61.   public SystemPowerState MinSleepDc;
  62.   public SystemPowerState ReducedLatencySleepAc;
  63.   public SystemPowerState ReducedLatencySleepDc;
  64.   public long DozeTimeoutAc;
  65.   public long DozeTimeoutDc;
  66.   public long DozeS4TimeoutAc;
  67.   public long DozeS4TimeoutDc;
  68.   public char MinThrottleAc;
  69.   public char MinThrottleDc;
  70.   [MarshalAs(UnmanagedType.ByValTStr , SizeConst = 2)]
  71.   public string pad1;
  72.   public PowerActionPolicy OverThrottledAc;
  73.   public PowerActionPolicy OverThrottledDc;
  74.  }
  75.  public struct PowerPolicy
  76.  {
  77.   public UserPowerPolicy user;
  78.   public MachinePowerPolicy mach;
  79.  }
  80.  public delegate bool PowerSchemeEnumProc
  81.  (
  82.   int uiIndex ,
  83.   int dwName ,
  84.   [MarshalAs(UnmanagedType.LPWStr)]
  85.   string sName ,
  86.   int dwDesc ,
  87.   [MarshalAs(UnmanagedType.LPWStr)]
  88.   string sDesc ,
  89.   PowerPolicy pp ,
  90.   int lParam
  91.  );
  92.  [DllImport("Powrprof.dll" )]
  93.  static extern bool EnumPwrSchemes(PowerSchemeEnumProc CallBack , int Params);


 
Voilà pour le petit paté de code...Ce qui me pose probleme c'est donc la suite pour pouvoir récupérer les infos de chaque PwrScheme...
 
Marchi à ceux qui m'aideront :) Et meme a ceux qui s'interesseront au probleme  :o  
 
Et pis bonne soirée  [:canaille]

Reply

Marsh Posté le 31-05-2005 à 19:11:22   

Reply

Marsh Posté le 31-05-2005 à 21:37:01    

Petit up du début de soirée [:canaille]

Reply

Marsh Posté le 31-05-2005 à 22:53:15    

attention ! les char du C ne sont pas les char du C#, qui sont des caractères unicode !
l'équivalent en C# sont les byte !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 31-05-2005 à 23:02:13    

Oki merci Harko pour l'info je vais corriger ca  :hello:  
Sinon pas d'idée pour pouvoir récuperer les infos de chaque PowerScheme? :)

Reply

Marsh Posté le 31-05-2005 à 23:12:56    

Bon je viens de voir que je peux passer par le registre windows pour faire la même chose...Donc je vais oublier cette dll... (avec au passage leur fonction enumPwrScheme...Qui retourne un bool...Ce qui ne sers a rien  [:canaille] ... Ou alors j'ai mal compris)
 
 :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed