main.cpp
来自「WIndows mobile 5.0 pocket pc sdk sample 」· C++ 代码 · 共 242 行
CPP
242 行
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#include "common.h"
// Global Count of references to this DLL.
UINT g_cDLLRefCount = 0;
#define EXTENSION_KEY TEXT("SOFTWARE\\Microsoft\\Shell\\Extensions\\ContextMenus\\Inbox\\")
#define READVIEW_SUBKEY TEXT("Read_View")
/////////////////////////////////////////////////
// DllGetClassObject
//
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void ** ppObject)
{
HRESULT hr = E_FAIL;
MyClassFactory * pFactory = NULL;
if(rclsid == CLSID_READVIEW_SK_MENUEXT)
{
pFactory = new MyClassFactory();
CPR(pFactory);
hr = pFactory->QueryInterface(riid, ppObject);
CHR(hr);
}
else
{
hr = CLASS_E_CLASSNOTAVAILABLE;
goto Error;
}
Error:
RELEASE_OBJ(pFactory);
return hr;
}
/////////////////////////////////////////////////
// DllCanUnloadNow
//
STDAPI DllCanUnloadNow()
{
return g_cDLLRefCount ? S_FALSE : S_OK;
}
/////////////////////////////////////////////////
// DllRegisterServerHelper
//
HRESULT DllRegisterServerHelper(LPCWSTR szSubKey, LPCTSTR szString)
{
HRESULT hr = E_FAIL;
HKEY hKeyCLSID = NULL;
HKEY hKeyInproc32 = NULL;
DWORD dwDisposition;
HMODULE hModule;
TCHAR szName[MAX_PATH+1];
if (!(ERROR_SUCCESS == RegCreateKeyEx(HKEY_CLASSES_ROOT, szSubKey, NULL, TEXT(""),
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKeyCLSID, &dwDisposition)))
{
goto Error;
}
if (!(ERROR_SUCCESS == RegSetValueEx(hKeyCLSID, TEXT(""), NULL, REG_SZ, (BYTE*) szString,
sizeof(TCHAR) * (lstrlen(szString) + 1))))
{
goto Error;
}
if (!(ERROR_SUCCESS == RegCreateKeyEx(hKeyCLSID, TEXT("InprocServer32"), NULL, TEXT(""),
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hKeyInproc32, &dwDisposition)))
{
goto Error;
}
hModule = GetModuleHandle(IMAGENAME);
if (hModule)
{
if (GetModuleFileName(hModule, szName, ARRAYSIZE(szName)))
{
if (!(ERROR_SUCCESS == RegSetValueEx(hKeyInproc32, TEXT(""), NULL,
REG_SZ, (BYTE *) szName,
sizeof(TCHAR) * (lstrlen(szName) + 1))))
{
goto Error;
}
}
else
{
goto Error;
}
}
hr = S_OK;
Error:
if (hKeyInproc32)
{
RegCloseKey(hKeyInproc32);
}
if (hKeyCLSID)
{
RegCloseKey(hKeyCLSID);
}
return hr;
}
/////////////////////////////////////////////////
// RegisterMenuExtension
//
// A helper function which creates the entries in
// SOFTWARE\\Microsoft\\Shell\\Extensions\\ContextMenus\\Inbox\\
// allowing this DLL to be used as a Menu Extension
//
HRESULT RegisterMenuExtension(LPCWSTR szKey, LPCTSTR szName)
{
HRESULT hr = E_FAIL;
HKEY hKey = NULL;
DWORD dwDisposition;
if (!(ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, szKey, NULL, TEXT(""),
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
&hKey, &dwDisposition)))
{
goto Error;
}
if (!(ERROR_SUCCESS == RegSetValueEx(hKey, TEXT(""), NULL, REG_SZ, (BYTE*) szName,
sizeof(TCHAR) * (lstrlen(szName) + 1))))
{
goto Error;
}
hr = S_OK;
Error:
if (hKey)
{
RegCloseKey(hKey);
}
return hr;
}
/////////////////////////////////////////////////
// DllRegisterServer
//
STDAPI DllRegisterServer(void)
{
HRESULT hr;
hr = DllRegisterServerHelper(TEXT("CLSID\\{") CLSIDTEXT_READVIEW_SK_MENUEXT TEXT("}"),
TEXT("ReadView Menu Extension"));
CHR(hr);
hr = RegisterMenuExtension(EXTENSION_KEY READVIEW_SUBKEY TEXT("\\{") CLSIDTEXT_READVIEW_SK_MENUEXT TEXT("}"),
TEXT("ReadView Menu Extension"));
CHR(hr);
Error:
return hr;
}
/////////////////////////////////////////////////
// DllUnregisterServer
//
HRESULT DllUnregisterServerHelper(HKEY hkey, LPCWSTR szSubKey)
{
HRESULT hr = E_FAIL;
if (!(ERROR_SUCCESS == RegDeleteKey(hkey, szSubKey)))
{
goto Error;
}
hr = S_OK;
Error:
return hr;
}
/////////////////////////////////////////////////
// DllUnregisterServer
//
STDAPI DllUnregisterServer(void)
{
HRESULT hr = E_FAIL;
// Delete the CLSID keys
hr = DllUnregisterServerHelper(HKEY_CLASSES_ROOT,
TEXT("CLSID\\{") CLSIDTEXT_READVIEW_SK_MENUEXT TEXT("}\\InprocServer32"));
CHR(hr);
hr = DllUnregisterServerHelper(HKEY_CLASSES_ROOT,
TEXT("CLSID\\{") CLSIDTEXT_READVIEW_SK_MENUEXT TEXT("}"));
CHR(hr);
// Delete the Menu Extension keys
hr = DllUnregisterServerHelper(HKEY_LOCAL_MACHINE,
EXTENSION_KEY READVIEW_SUBKEY TEXT("\\{") CLSIDTEXT_READVIEW_SK_MENUEXT TEXT("}"));
CHR(hr);
hr = S_OK;
Error:
return hr;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?