Delphi Tips
>> Index
● 09/30 アクティブデスクトップを使って壁紙を変更
● 08/23 デスクトップのウィンドウのタイトルとハンドルを取得する
最終更新: 9185 日前
0278 D1 D2 D3 D4 D5 D6 D7 3.195 98 作成: 1999/09/30 篠田 rev 1.2 B1 B3 B4 B5 B6 B7 NT3NT4 2K XP 更新: 1999/09/30 篠田 編集
アクティブデスクトップを使って壁紙を変更
アクティブデスクトップを使うには、IActiveDesktop を使います。
Microsoftが提供しているリファレンスはhttp://msdn.microsoft.com/library/sdkdoc/shellcc/Shell/IFaces/IActiveDesktop/IActiveDesktop.htmにあります。
uses ShlObj, ComObj;
// IActiveDesktop を使って壁紙を変更する
procedure TForm1.Button1Click(Sender: TObject);
var
hObj : IUnknown;
ADesktop : IActiveDesktop;
str : String;
wstr : PWideChar;
begin
hObj := CreateComObject(StringToGUID('{75048700-EF1F-11D0-9888-006097DEACF9}'));
ADesktop := hObj as IActiveDesktop;
if OpenDialog1.Execute then begin
wstr := AllocMem(MAX_PATH);
StringToWideChar(OpenDialog1.FileName, wstr, MAX_PATH);
ADesktop.SetWallpaper(wstr, 0);
ADesktop.ApplyChanges(AD_APPLY_ALL);
FreeMem(wstr);
end;
end;
ここでActiveDesktopのクラスIDとして {75048700-EF1F-11D0-9888-006097DEACF9} というマジックナンバーが使われていますが、もしかしたら将来Windowsのバージョンが変わるとこの値も変わる可能性があります。
しかし[Delphi-ML:42104]に書かれているように、アクティブデスクトップはWindowsの準(?)標準コンポーネントですので、恐らく問題ないと思います。
一応、\\HKEY_CLASSES_ROOT\CLSID\{75048700-EF1F-11D0-9888-006097DEACF9}\(標準) に "ActiveDesktop" という文字列が登録されているのを見つけることができます。
参照: [Delphi-ML:42096] <Windows>
0214 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/08/23 西坂良幸 rev 1.2 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/08/23 西坂良幸 編集
デスクトップのウィンドウのタイトルとハンドルを取得する
稼働中のウィンドウのタイトルとハンドルを取得するには、
APIのENumWindows関数を使います。
第一パラメータのコールバック関数は、タイトルとハンドル
をどのように処理するかを工夫します。
次の例はListBoxに列挙し、Labelにその数を示します。
function CallBackTest(WH: HWND; LP: LParam): BOOL stdcall;
var
Buf: array [0..255] of Char;
begin
// スタイル ビットがセットされているもののみ
if IsWindowVisible(hwnd) then
// タイトル バーのテキストをBufにコピー
if GetWindowText(WH, Buf, 255) <> 0 then
TListBox(LP).Items.AddObject(Buff, Pointer(hwnd));
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
EnumWindows(@CallBackTest, Longint(ListBox1));
Label1.Caption := IntToStr(ListBox1.Items.Count);
end;
参照: [Delphi-ML:2378] [Delphi-ML:23203] <Windows>
[新規作成] [最新の情報に更新]
How To
Lounge
KeyWords
Osamu Takeuchi osamu@big.or.jp
Tips
Delphi
Home