296 lines
11 KiB
C++
296 lines
11 KiB
C++
// ==========================================================================
|
|
// Class Specification : COXShortcut
|
|
// ==========================================================================
|
|
// Header file : OXShortcut.h
|
|
//
|
|
// Version: 9.3
|
|
//
|
|
// Properties:
|
|
// NO Abstract class (does not have any objects)
|
|
// YES Derived from CObject
|
|
//
|
|
// NO Is a CWnd.
|
|
// NO Two stage creation (constructor & Create())
|
|
// NO Has a message map
|
|
// NO Needs a resource (template)
|
|
//
|
|
// NO Persistent objects (saveable on disk)
|
|
// YES Uses exceptions
|
|
//
|
|
// Description:
|
|
//
|
|
// The COXShortcut class wraps Win32's IShellLink interface to let you
|
|
// easily create, open, examine, update or resolve a shell link
|
|
// (also known as a shortcut) without writing any COM codes (except
|
|
// AfxOleInit(), or their equivalence).
|
|
//
|
|
// Prerequisite:
|
|
//
|
|
// AfxOleInit() has to be called directly or indirectly previously
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __OXSHORTCUT_H__
|
|
#define __OXSHORTCUT_H__
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include "OXDllExt.h"
|
|
|
|
#ifndef __AFXOLE_H__
|
|
#include <afxole.h>
|
|
#define __AFXOLE_H__
|
|
#endif
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class OX_CLASS_DECL COXShortcut : public CObject
|
|
{
|
|
DECLARE_DYNCREATE(COXShortcut)
|
|
|
|
// Data members -------------------------------------------------------------
|
|
public:
|
|
protected:
|
|
CString m_sCurFileName;
|
|
IShellLink* m_psl;
|
|
IPersistFile* m_ppf;
|
|
HRESULT m_hres;
|
|
BOOL m_bThrowException;
|
|
|
|
private:
|
|
|
|
// Member functions ---------------------------------------------------------
|
|
public:
|
|
COXShortcut();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Constructor of object
|
|
|
|
virtual ~COXShortcut();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Destructor of object
|
|
|
|
#ifdef _DEBUG
|
|
virtual void AssertValid() const;
|
|
#endif
|
|
|
|
virtual BOOL Open(LPCTSTR pszPathLink, LPCTSTR pszPathObj = NULL, BOOL bThrowException = FALSE);
|
|
// --- In : pszPathLink, the pathname of the shortcut file to open or create
|
|
// pszPathObj, NULL if opening a shortcut; when creating, the pathname of
|
|
// the object file this shortcut points to
|
|
// bThrowException, if TRUE, all subsequent member function
|
|
// calls will throw a COleException when an error occurred (including
|
|
// this Open()). if FALSE, no exceptions will be thrown (you still
|
|
// can call GetLastError() to check the error status).
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : Open or create a shortcut file.
|
|
|
|
virtual void Close(BOOL bSave = TRUE);
|
|
// --- In : bSave, if TRUE, the current shortcut file will be saved before
|
|
// closing; if FALSE, all changes will be discarded.
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Close a shortcut file.
|
|
|
|
CString GetCurFile() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : the currently opening shortcut file, if empty, no file opening
|
|
// --- Effect : retrieve the absolute path to the currently opening shortcut file.
|
|
|
|
virtual BOOL IsDirty();
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : TRUE if the shortcut has been modified, FALSE otherwise
|
|
// --- Effect : determine whether the shortcut has been modified since last save
|
|
|
|
HRESULT GetLastError() const;
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns : NOERROR if no error, or an HRESULT value indicating the last error
|
|
// (could be S_FALSE).
|
|
// --- Effect : retrieve the HRESULT from the last operation (not thread-safe).
|
|
|
|
virtual BOOL Save(LPCTSTR pszFileName = NULL, BOOL fRemember = TRUE);
|
|
// --- In : pszFileName, pointer to absolute path of the file where this shortcut
|
|
// is saved, if NULL, use current file name
|
|
// fRemember, specifies whether the file is to be the current working
|
|
// file or not
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : "Save" or "Save as" a shortcut.
|
|
|
|
BOOL GetArguments(CString& rString);
|
|
// --- In :
|
|
// --- Out : rString, the buffer to receive the command-line arguments
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the command-line arguments associated with a shortcut.
|
|
|
|
BOOL GetDescription(CString& rString);
|
|
// --- In :
|
|
// --- Out : rString, the buffer to receive the description
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the description string for a shortcut.
|
|
|
|
BOOL GetHotkey(WORD& wHotKey);
|
|
// --- In :
|
|
// --- Out : wHotKey, address of the hot key. The virtual-key code is in the
|
|
// low-order byte, and the modifier flags are in the high-order byte.
|
|
// The modifier flags can be a combination of these values:
|
|
//
|
|
// HOTKEYF_ALT ALT key
|
|
// HOTKEYF_CONTROL CTRL key
|
|
// HOTKEYF_EXT Extended key
|
|
// HOTKEYF_SHIFT SHIFT key
|
|
//
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the hot key for a shortcut.
|
|
|
|
BOOL GetIconPath(CString& rString);
|
|
// --- In :
|
|
// --- Out : rString, the buffer to receive the path name of the icon file
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the path and filename of the icon file for a shortcut.
|
|
|
|
BOOL GetIconIndex(int& iIcon);
|
|
// --- In :
|
|
// --- Out : iIcon, address of a value that receives the index of the icon
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the index of the icon in the icon file for a shortcut.
|
|
|
|
BOOL GetIDList(LPITEMIDLIST& ridl);
|
|
// --- In :
|
|
// --- Out : ridl, address of a pointer to a list of item identifiers.
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the list of item identifiers for a shortcut.
|
|
// NOTE: it is your responsibility to call SHGetMalloc() to get an
|
|
// allocator pointer to free the memory allocation afterwards.
|
|
|
|
BOOL GetPath(CString& rString, BOOL bUNC = TRUE);
|
|
// --- In : bUNC, if TRUE, retrieves the Universal Naming Convention (UNC)
|
|
// path for the file; if FALSE, retrieves the standard short (8.3)
|
|
// filename.
|
|
// --- Out : rString, the buffer to receive the path name of the shortcut
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the path and filename of a shortcut.
|
|
|
|
BOOL GetShowCmd(int& iShowCmd);
|
|
// --- In :
|
|
// --- Out : iShowCmd, address of the show command
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the show command for a shortcut.
|
|
|
|
BOOL GetWorkingDirectory(CString& rString);
|
|
// --- In :
|
|
// --- Out : rString, the buffer to receive the name of the working directory
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : retrieves the name of the working directory for a shortcut.
|
|
|
|
BOOL Resolve(CWnd* pWnd = NULL, DWORD fFlags = SLR_NO_UI | SLR_UPDATE);
|
|
// --- In : pWnd, a window that the shell uses as the parent window for a dialog
|
|
// box. the shell displays the dialog box if it needs to prompt the
|
|
// user for more information while resolving a shortcut
|
|
// fFlags, action flags. this parameter can be a combination of these
|
|
// values: SLR_ANY_MATCH, SLR_NO_UI and SLR_UPDATE (they have the same
|
|
// meaning as in IShellLink::Resolve()).
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : resolves a shortcut. the system searches for the shortcut-pointing
|
|
// object and, if necessary, updates the shortcut path and its
|
|
// list of identifiers.
|
|
|
|
BOOL SetArguments(LPCTSTR pszArguments);
|
|
// --- In : pszArguments, address of a buffer that contains the new command-line
|
|
// arguments.
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the command-line arguments for a shortcut.
|
|
|
|
BOOL SetDescription(LPCTSTR pszDescription);
|
|
// --- In : pszDescription, address of a buffer containing the new description
|
|
// string.
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the description for a shortcut.
|
|
|
|
BOOL SetHotkey(WORD nHotkey);
|
|
// --- In : nHotkey, the hot key to set, see GetHotKey() for a detailed description
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets a hot key for a shortcut.
|
|
|
|
BOOL SetIconPath(LPCTSTR pszPath);
|
|
// --- In : pszPath, address of a buffer containing the new path name of the
|
|
// icon file
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the path and filename of the icon file for a shortcut.
|
|
|
|
BOOL SetIconIndex(int nIconIndex = 0);
|
|
// --- In : nIconIndex, the index of the icon to set
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the index of the icon in the icon file for a shortcut.
|
|
|
|
BOOL SetIDList(LPCITEMIDLIST pidl);
|
|
// --- In : LPCITEMIDLIST, a pointer to a list of item identifiers to set
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the list of item identifiers for a shortcut.
|
|
|
|
BOOL SetPath(LPCTSTR pszPath);
|
|
// --- In : pszPath, address of a buffer containing the new path name of the
|
|
// shortcut
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the path and filename of a shortcut.
|
|
// CAUTION: may return S_OK even when the supplied path name is not really
|
|
// set as is, if it is not a valid path (non-existing path will be set as is).
|
|
|
|
BOOL SetRelativePath(LPCTSTR pszRelPath);
|
|
// --- In : pszRelPath, address of a buffer containing the relative path to set
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the relative path to the shortcut. When SetPath() cannot resolve
|
|
// the path as an absolute path name, this relative path will be added to the
|
|
// front to try once again.
|
|
|
|
BOOL SetShowCmd(int nShowCmd);
|
|
// --- In : nShowCmd, the show command to set
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the show command for a shortcut.
|
|
|
|
BOOL SetWorkingDirectory(LPCTSTR pszWorkingDirectory);
|
|
// --- In : pszWorkingDirectory, address of a buffer containing the new
|
|
// working directory
|
|
// --- Out :
|
|
// --- Returns : TRUE if successful, FALSE otherwise
|
|
// --- Effect : sets the name of the working directory for a shortcut.
|
|
|
|
protected:
|
|
virtual BOOL Validate(void* pv);
|
|
virtual void ThrowExceptionIfNeccessary();
|
|
|
|
#ifdef _DEBUG
|
|
virtual void TraceFailure(LPCTSTR sFunctionName) const;
|
|
static CString GetResultMessage(HRESULT hResult);
|
|
#endif
|
|
|
|
private:
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "OXShortcut.inl"
|
|
|
|
#endif // __OXSHORTCUT_H__
|
|
|
|
// end of OXShortcut.h
|