home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2001 June
/
VPR0106A.BIN
/
OLS
/
PREX102
/
PrEx102.lzh
/
Src.lzh
/
Commands.cpp
next >
Wrap
C/C++ Source or Header
|
2001-02-23
|
3KB
|
121 lines
// Commands.cpp : インプリメンテーション ファイル
//
#include "stdafx.h"
#include "ProjExp.h"
#include "Commands.h"
#include <shellapi.h>
#include <tchar.h>
#include <comdef.h>
#include <string>
#include "ExplorerDialog.h"
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCommands
CCommands::CCommands()
{
m_pApplication = NULL;
}
CCommands::~CCommands()
{
ASSERT (m_pApplication != NULL);
m_pApplication->Release();
}
void CCommands::SetApplicationObject(IApplication* pApplication)
{
// この関数は pApplication が既に AddRef されたと
// 仮定します、それは CDSAddIn が関数を呼び出す直
// 前に QueryInterface 内で行いました。
m_pApplication = pApplication;
}
/////////////////////////////////////////////////////////////////////////////
// CCommands メソッド
STDMETHODIMP CCommands::ProjExpCommandMethod()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: ここをこのコマンドを実行するための実際のコードに置き換えてください。
// Developer Studio アプリケーション オブジェクトにアクセスするために m_pApplication
// を、またアドインのデバッグ ビルドでエラー ストリングを確認するために VERIFY_OK
// を使用してください。 (stdafx.h を参照してください)
IGenericProject* pActProject = NULL;
BSTR bStr;
HRESULT Result;
//------プロジェクトインターフェースを取得する---------------------------
Result = m_pApplication->get_ActiveProject((IDispatch**)&pActProject);
if(FAILED(Result) || NULL == pActProject)
{
return(S_FALSE);
}
//------プロジェクトのフルPathを取得する---------------------------------
Result = pActProject->get_FullName(&bStr);
//------プロジェクトインターフェースを開放する---------------------------
pActProject->Release();
if(FAILED(Result))
{
return(S_FALSE);
}
//------プロジェクトのフルPathからフォルダ部分を抽出する-----------------
wstring wStr(bStr);
wStr.erase(wStr.find_last_of(L'\\'));
_bstr_t _bStr(wStr.c_str());
//------プロジェクトのフルPathがフォルダか確認をする---------------------
DWORD Attr = ::GetFileAttributes((LPCTSTR)_bStr);
if(!(FILE_ATTRIBUTE_DIRECTORY & Attr) || 0xffffffff == Attr)
{
return(S_FALSE);
}
//------ShellExecuteExの設定---------------------------------------------
SHELLEXECUTEINFO sei;
::ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.nShow = SW_SHOWNORMAL;
sei.lpFile = (LPCTSTR)_bStr;
sei.lpVerb =
(0x80 & ::GetKeyState(VK_SHIFT) || 0x80 & ::GetKeyState(VK_RBUTTON))?
_T("Open") : _T("explore");
::ShellExecuteEx(&sei);
return(S_OK);
}
STDMETHODIMP CCommands::ProjExpSpCommandMethod()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: この位置にインプリメント用のコードを追加してください
CExplorerDialog ExplorerDialog;
//-----------------------------------------------------------------------
// ダイアログを表示する
//-----------------------------------------------------------------------
m_pApplication->EnableModeless(VARIANT_FALSE);
ExplorerDialog.DoModal();
m_pApplication->EnableModeless(VARIANT_TRUE);
return S_OK;
}