Autor Beitrag
hathor
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: So 13.10.13 23:37 
GetMonitorCapabilities function

Retrieves the configuration capabilities of a monitor. Call this function to find out which high-level monitor configuration functions are supported by the monitor.
Requirements: Minimum supported client: Windows Vista
msdn.microsoft.com/e...40%28v=vs.85%29.aspx

WmiSetBrightness method of the WmiMonitorBrightnessMethods class
msdn.microsoft.com/e...49%28v=vs.85%29.aspx

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
program SETBright;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  Variants,
  ComObj;

var dark : Integer;
    darkStr : String;

procedure  SetBrightness(Timeout : Integer; Brightness : Byte);
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('localhost''root\WMI''''');
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM WmiMonitorBrightnessMethods Where Active=True','WQL',$00000020);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    FWbemObject.WmiSetBrightness(Timeout, Brightness);
    FWbemObject:=Unassigned;
  end;
end;


begin
  if ParamCount = 1 then
begin
    darkStr := paramstr(1);
    dark:= StrToInt(darkStr);
end else
   dark:=40//default

 try
    CoInitialize(nil);
    try
      SetBrightness(5, dark);
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');// delete it
 Readln; // delete it
end.
(*
Batch file: setbright.bat
setbright <0 - 100>
Example: setbright 40
*)


Crosspost: www.delphipraxis.net...sta.html#post1231943
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von hathor am Di 15.10.13 20:10, insgesamt 2-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18694
Erhaltene Danke: 1620

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 14.10.13 11:34 
Ich hätte das so gemacht, davon direkt mit den Variants zu arbeiten halte ich nicht so viel:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
program Project14;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Variants,
  ActiveX,
  ComObj,
  WbemScripting_TLB in '..\12.0\Imports\WbemScripting_TLB.pas';

var
  WmiLocator: ISWbemLocator;
  WmiServices: ISWbemServices;
  MonitorBrightnessMethods: ISWbemObject;
  SetBrightnessInParams: ISWbemObject;

begin
  try
    CoInitialize(nil);
    try
      WmiLocator := CoSWbemLocator.Create;
      WmiServices := WmiLocator.ConnectServer('localhost''root\WMI'''''''''0nil);
      MonitorBrightnessMethods := WmiServices.Get('WmiMonitorBrightnessMethods'0nil);

      SetBrightnessInParams := MonitorBrightnessMethods.Methods_.Item('WmiSetBrightness'0).InParameters.SpawnInstance_(0);
      SetBrightnessInParams.Properties_.Add('Timeout', wbemCimtypeUint32, false, 0).Set_Value(1000);
      SetBrightnessInParams.Properties_.Add('Brightness', wbemCimtypeUint8, false, 0).Set_Value(100);

      MonitorBrightnessMethods.ExecMethod_('WmiSetBrightness', SetBrightnessInParams, 0nil);
    finally
      CoUninitialize;
    end;
  except
    on E: EOleException do
      Writeln(Format('%s: %s %x', [E.Classname, E.Message, E.ErrorCode]));
    on E: Exception do
      Writeln(Format('%s: %s', [E.Classname, E.Message]));
  end;

end.
Allerdings kommt da bei mir beim Ausführen, dass die Methode ungültige Parameter bekommen hätte. Ich weiß gerade nicht warum...