以前,デスクトップ上のウィンドウを操作したいことがあった.
ToggleDT.scf
[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop
TileVert.vbs
Set objShell = CreateObject(“Shell.Application”)
objShell.TileVertically
TileHorz.vbs
Set objShell = CreateObject(“Shell.Application”)
objShell.TileHorizontally
CascadeW.vbs
Set objShell = CreateObject(“Shell.Application”)
objShell.CascadeWindows
//**************************************************************************************************
// ファイル名 :CtrlDskT.cxx
// 機能名 :デスクトップの制御
// 作成者 :
// 作成年月日 :’07/08/08
// 変更履歴 :
//**************************************************************************************************
//
#include <Afx.h>
#include "DelFileE.hxx"
#include "CharMFC.hxx"
#include "ShellExc.hxx"
#include "HelpAPI.hxx"
#include "CtrlDskT.hxx"
////
//*******************************************************************************
// 関数名 :デスクトップの表示
// 作成日 :’07/08/08
//*******************************************************************************
// http://support.microsoft.com/kb/190355/ja
// クイック起動バーに [デスクトップの表示] アイコンを再登録する方法
BOOL ControlDesktop::ToggleDesktop (void)
{
CString td_scf = ::GetTempPath()+_T("Command.tmp\\") + _T("ToggleDT.scf") ;
if (::FileIsNothing(td_scf)) {
// "デスクトップの表示.scf" の生成
::CreateEmptyFile(td_scf) ;
CString tdCmd ;
tdCmd += _T("[Shell]\r\n") ;
tdCmd += _T("Command=2\r\n") ;
tdCmd += _T("IconFile=explorer.exe,3\r\n") ;
tdCmd += _T("[Taskbar]\r\n") ;
tdCmd += _T("Command=ToggleDesktop\r\n") ;
::SaveText(td_scf,tdCmd) ;
}
ShellExec se ;
se.SetFile(td_scf) ;
se.Execute() ;
{ // 終了時に削除するように登録
static DelFileE dfe ;
dfe.Add(td_scf) ;
}
return TRUE ;
}
////
//*******************************************************************************
// 関数名 :重ねて表示,上下に並べて表示,左右に並べて表示
// 作成日 :’07/08/08
//*******************************************************************************
// http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/jul05/hey0726.mspx
// Hey, Scripting Guy! デスクトップ上にウィンドウを並べて表示する方法はありますか
#define CD_AW_CascadeW 0
#define CD_AW_TileHorz 1
#define CD_AW_TileVert 2
BOOL ControlDesktop::CascadeWindows (void) { return
ArrangeWindows(CD_AW_CascadeW) ; }
BOOL ControlDesktop::TileHorizontally(void) { return
ArrangeWindows(CD_AW_TileHorz) ; }
BOOL ControlDesktop::TileVertically (void) { return
ArrangeWindows(CD_AW_TileVert) ; }
BOOL ControlDesktop::ArrangeWindows (const long type)
{
CString cw_vbs = ::GetTempPath()+_T("Command.tmp\\") + _T("CascadeW.vbs") ;
CString th_vbs = ::GetTempPath()+_T("Command.tmp\\") + _T("TileHorz.vbs") ;
CString tv_vbs = ::GetTempPath()+_T("Command.tmp\\") + _T("TileVert.vbs") ;
CString cmdvbs ;
CString cmdExc ;
switch (type) {
case CD_AW_CascadeW : cmdvbs = cw_vbs ; cmdExc = _T("objShell.CascadeWindows \r\n") ; break ;
case CD_AW_TileHorz : cmdvbs = th_vbs ; cmdExc = _T("objShell.TileHorizontally \r\n") ; break ;
case CD_AW_TileVert : cmdvbs = tv_vbs ; cmdExc = _T("objShell.TileVertically \r\n") ; break ;
default : cmdvbs = cw_vbs ; cmdExc = _T("objShell.CascadeWindows \r\n") ; break ;
}
if (::FileIsNothing(cmdvbs)) {
::CreateEmptyFile(cmdvbs) ;
CString awCmd ;
awCmd += _T("Set objShell = CreateObject(\"Shell.Application\")\r\n") ;
awCmd += cmdExc ;
// objShell.TileHorizontally
// objShell.TileVertically
// objShell.CascadeWindows
::SaveText(cmdvbs,awCmd) ;
}
ShellExec se ;
se.SetFile(cmdvbs) ;
se.SetShowCmd(SW_HIDE) ;
se.Execute() ;
{ // 終了時に削除するように登録
static DelFileE dfe ;
dfe.Add(cmdvbs) ;
}
return TRUE ;
}
デスクトップ上にウィンドウを並べて表示する方法はありますか。
Shell.TileHorizontally method