>ダイアログのハンドルを操作して,タスクバーのアイコンを非表示に
>もできますが,クラス名が#32770なのて,ちょっと面倒ですね.
参考までに,メモ帳を起動して,メモ帳のタスクバーのアイコンの
非表示,表示を切り替えるサンプルです.
切り替えの時に,一旦メモ帳自身を非表示にするので,少しチラつきます.
#32770の場合は,環境によっては,他のダイアログを検出してしまう
可能性があるので,工夫が必要です.
また,この方法は,ウィンドウのスタイルをWS_EX_TOOLWINDOWとします.
したがって,キャプションバーの高さが低くなってしまいます.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private 宣言 }
hMainWnd : HWND;
Before : LongInt;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses ShellAPI;
{$R *.dfm}
//=============================================================================
// テスト用に操作対象のアプリを起動.ここではメモ帳
// ShellExecuteの使用にはusesにShellAPIが必要
//============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'Notepad.exe', nil, nil, SW_SHOW);
end;
//=============================================================================
// タスクバーのアイコンを非表示にする
//============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
//操作対象のウィンドウハンドルを取得する
//hMainWnd := Application.Handleなら自分自身
hMainWnd := FindWindow('notepad', nil);
if hMainWnd <> 0 then begin
//スタイル変更等は一度非表示にする
ShowWindow(hMainWnd, SW_HIDE);
//前の設定を保存しておく
Before := SetWindowLong(hMainWnd, GWL_EXSTYLE,
GetWindowLong(hMainWnd, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
//Zオーダを変更したくないのでShowWindowではなくSetWindwoPosを使用
SetWindowPos(hMainWnd, 0, 0, 0, 0, 0,
SWP_NOMOVE or HWND_BOTTOM or
SWP_NOSIZE or
SWP_SHOWWINDOW);
end else begin
ShowMessage('メモ帳が見つかりません');
end;
end;
//=============================================================================
// 対象アプリのウィンドウのスタイルを元に戻す
//============================================================================
procedure TForm1.Button3Click(Sender: TObject);
begin
//操作対象のウィンドウハンドルを取得する
//hMainWnd := Application.Handleなら自分自身
hMainWnd := FindWindow('notepad', nil);
if hMainWnd <> 0 then begin
//スタイル変更等は一度非表示にする
ShowWindow(hMainWnd, SW_HIDE);
SetWindowLong(hMainWnd, GWL_EXSTYLE, Before);
//SetWindowPosでもいいがHideからShowにするので同じ
//ここまでは非表示なので表示すれば必ずZオーダトップ
ShowWindow(hMainWnd, SW_SHOWNORMAL);
end else begin
ShowMessage('メモ帳が見つかりません');
end;
end;
end.
|