下面是我截取的一个实现超链接功能的函数,其中有一些不解之处,请指教!
HINSTANCE CHyperLink::GotoURL(LPCTSTR url, int showcmd)
{
TCHAR key[MAX_PATH + MAX_PATH]; // First try ShellExecute()
HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd);//这里是打开一个超链接,什么情况他会失败呢 // If it failed, get the .htm regkey and lookup the program
if ((UINT)result <= HINSTANCE_ERROR) { if (GetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) {
lstrcat(key, _T("\\shell\\open\\command"));//这个路径我怎么没有在注册
表中找到 if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) {
TCHAR *pos;
pos = _tcsstr(key, _T("\"%1\""));//这是在查找什么
if (pos == NULL) { // 这又在做什么
pos = _tcsstr(key, _T("%1")); // Check for %1, without quotes
if (pos == NULL) // No parameter at all...
pos = key+lstrlen(key)-1;
else
*pos = '\0'; // 加个'\0'是什么意思
}
else
*pos = '\0'; // Remove the parameter lstrcat(pos, _T(" "));
lstrcat(pos, url); USES_CONVERSION;//这句什么意思
result = (HINSTANCE) WinExec(T2A(key),showcmd);// T2A什么意思
}
HINSTANCE CHyperLink::GotoURL(LPCTSTR url, int showcmd)
{
TCHAR key[MAX_PATH + MAX_PATH]; // First try ShellExecute()
HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd);//这里是打开一个超链接,什么情况他会失败呢 // If it failed, get the .htm regkey and lookup the program
if ((UINT)result <= HINSTANCE_ERROR) { if (GetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) {
lstrcat(key, _T("\\shell\\open\\command"));//这个路径我怎么没有在注册
表中找到 if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) {
TCHAR *pos;
pos = _tcsstr(key, _T("\"%1\""));//这是在查找什么
if (pos == NULL) { // 这又在做什么
pos = _tcsstr(key, _T("%1")); // Check for %1, without quotes
if (pos == NULL) // No parameter at all...
pos = key+lstrlen(key)-1;
else
*pos = '\0'; // 加个'\0'是什么意思
}
else
*pos = '\0'; // Remove the parameter lstrcat(pos, _T(" "));
lstrcat(pos, url); USES_CONVERSION;//这句什么意思
result = (HINSTANCE) WinExec(T2A(key),showcmd);// T2A什么意思
}
解决方案 »
- VS2008中的CTime为64位,怎么能改成使用32位呢?
- 读取文本文件中的数据,并将数据以曲线形式显示在客户区
- wsaasyncselect模型 服务端case FD_WRITE:
- Compuware DevPartner for Visual C++ 怎么用?
- 获取到了一个窗口的IAccessible接口,怎么遍历窗口子控件获取子控件的IAccessible并获取子控件的名称
- 关于socket事件FD_WRITE FD_READ响应问题????
- 0xc0000005 Access Violation Error, 大侠们救命啊,都整了好几天的问题
- CPU使用率100%!无法关机、注销、按ctrl+alt+del无效。
- 线程函数中不能用CListCtrl?
- >>>一个关于SDK刷屏的问题,请帮忙看看!(内详,给分)
- vc6.0中用ADO将ACCESS中的数据读出并显示在List Control控件中的范例何处寻找
- 关于局域网的Server - Client型聊天软件
#define USES_CONVERSION int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa)
#else
#define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)
#endif
#define T2A W2A#define W2A(lpw) (\
((_lpw = lpw) == NULL) ? NULL : (\
_convert = (lstrlenW(_lpw)+1)*2,\
ATLW2AHELPER((LPSTR) alloca(_convert), _lpw, _convert, _acp)))
#endif