delphi 枚举 Windows 声音  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 枚举 Windows 声音


mb.png


unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}


procedure GetRegistrySounds;
var
 phkResult: HKEY;
 dwIndex: DWORD;
 HResult: Longint;
 lpName: LPWSTR;
 SubKeyNames: TStringList;
 i: Integer;
 Len: Longint;
 Buf: array[0..1023] of Char;
 dwResult: DWORD;
 ResultString: string;
begin
 SubKeyNames := TStringList.Create;
 try
   dwIndex := 0;
   lpName := StrAlloc(1024);
   HResult := RegOpenKeyEx(HKEY_CURRENT_USER, PChar('AppEvents\Schemes\Apps\.Default'), 0, KEY_READ, phkResult);
   if (HResult = ERROR_SUCCESS) then
     begin
       while (HResult = ERROR_SUCCESS) do
         begin
           HResult := RegEnumKey(phkResult, dwIndex, lpName, 1024);
           if (HResult = ERROR_SUCCESS) then
             begin
               SubKeyNames.Add(lpName);
               Inc(dwIndex);
             end;
          end;
       RegCloseKey(phkResult);
     end;
   StrDispose(lpName);
   for i := 0 to (SubKeyNames.Count - 1) do
     begin
       if (RegOpenKeyEx(HKEY_CURRENT_USER, PChar('AppEvents\Schemes\Apps\.Default\' + SubKeyNames[i] + '\.Current'), 0, KEY_READ, phkResult) = ERROR_SUCCESS) then
         begin
           Len := 1024 * SizeOf(Char);
           case RegQueryValueEx(phkResult, PChar(''), nil, nil, PByte(@Buf[0]), @Len) of
             ERROR_SUCCESS:
               SetString(ResultString, Buf, Len div SizeOf(Char) - 1);
             ERROR_MORE_DATA:
               begin
                 SetLength(ResultString, Len div SizeOf(Char) - 1);
                 if (RegQueryValueEx(phkResult, PChar(''), nil, nil, PByte(ResultString), @Len) = ERROR_SUCCESS) then
                   SetLength(ResultString, Len div SizeOf(Char) - 1)
               else
                 ResultString := '';
               end;
           end;
           RegCloseKey(phkResult);
           if (ResultString <> '') then
             begin
               dwResult := ExpandEnvironmentStrings(PChar(ResultString), buf, 1024);
               if (dwResult <> 0) then
                 ResultString := string(buf);
               // here we have a result to work with
               Form1.Memo1.Lines.Add(ResultString);
             end;
         end;
     end;
 finally
   SubKeyNames.Free;
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
GetRegistrySounds;
end;

end.


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.042212963104248 seconds