我想在菜单中打开WORD这个程序,而不是一个word文档,但是每台机器上安装的WORD的路径又不同,该怎么办?谢谢大家了! RT 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从注册表可以取得Word的安装路径。 有源代码http://www.yesky.com/SoftChannel/72342371928702976/20040804/1838674_1.shtml 查找注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\9.0\Common\InstallRoot 系统已注册过的就不需要去注册表里找了1,system("start WINWORD.EXE");不过就是由黑框2,ShellExecute(NULL,"open","WINWORD.EXE",NULL,NULL,1); word是一个自动化程序,可以通过创建组件对象来启动word程序,这样就不需要知道word的路径了 给你三个函数,可以完成你的需要:bool IsWordExist(){ static bool bExist, bFirst=true; if (bFirst) { bFirst = false; CReg reg; bExist = (bool)reg.Open(HKEY_CLASSES_ROOT, "Word.Document", KEY_READ); } if (!bExist) { //if (bPrompt) AfxMessageBox ("没有安装Microsft Word 95或更高版本,操作不能执行!", MB_ICONSTOP); return false; } return true;}int TL_Initialize(){ //初始化COM if (CoInitialize(NULL)!=0) { return ERROR_CANNOT_INITIALIZE_COM; } if(!IsWordExist()) { return ERROR_WORDNOTINSTALLED; } //Call word process: try { //ASSERT (NULL==m_objWord); m_objWord = new _ApplicationWord; if (!m_objWord->CreateDispatch("Word.Application", NULL)) { //AfxMessageBox("不能创建Word对象!", MB_ICONSTOP); delete m_objWord; m_objWord = NULL; throw 0; return ERROR_CANNOT_CREATE_WORD_APPLICATION; } else{ // AfxMessageBox("成功创建Word对象!"); } } catch(COleException *oe) { oe->ReportError(); delete oe; return ERROR_CALL_INITIALIZE_UNKNOW_ERROR; } catch(...) { return ERROR_CALL_INITIALIZE_UNKNOW_ERROR; } //OLE_CATCH(); m_nHasCallInitializeSuccess = 40415;//2004/04/15 return ERROR_CALL_INITIALIZE_SUCCESS;}int UnInitialize(){ bool bError = false; if (m_objWord) { try { COleVariant covTrue((short)TRUE), covFalse((short)FALSE); m_objWord->Quit(covFalse, // SaveChanges. covTrue, // OriginalFormat. covFalse // RouteDocument. ); m_objWord->ReleaseDispatch(); delete m_objWord; m_objWord = NULL; } catch(COleException *oe) { oe->ReportError(); delete oe; bError = true; } catch(...) { bError = true; } //OLE_CATCH(); } CoUninitialize(); if(bError) { return ERROR_CANNOT_CLOSE_WORD; } return ERROR_QUIT_SUCCESS;} see MSDN:HOWTO: Use Visual C++ to Access DocumentProperties with Automation Q238393and call // Call Documents.Add() to new a blank document IDispatch *pDoc; { VARIANT result; VariantInit(&result); AutoWrap(DISPATCH_METHOD, &result, pDocs, L"Add", 0); pDoc = result.pdispVal; } 从注册表可以取得Word的安装路径 自定的CMyButton类 为什么不能修改工具条上的按钮?可以修改对话框上的按钮 如何在应用层模拟三次握手过程 弹出消息的疑问(MessageBox or AfxMessageBox) 如何用代码方式改变标题栏的背景色,标题栏上字体的大小? 我使用CRectTracker来画橡皮筋程序,但是主窗口的lbuttonup并屏蔽了 如何在自编写的打印程序插入打印分页符 如何把一组数组的数据用波形图或坐标点输出? bcgcontrolbar 5.90谁有? 有没有做过音频压缩的(用ACM)? 在print preview中不能正确显示 请问vc中的tab控件是怎么使用的 关于【FD_READ 事件】
http://www.yesky.com/SoftChannel/72342371928702976/20040804/1838674_1.shtml
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\9.0\Common\InstallRoot
1,system("start WINWORD.EXE");不过就是由黑框
2,ShellExecute(NULL,"open","WINWORD.EXE",NULL,NULL,1);
bool IsWordExist()
{
static bool bExist, bFirst=true;
if (bFirst)
{
bFirst = false;
CReg reg;
bExist = (bool)reg.Open(HKEY_CLASSES_ROOT, "Word.Document", KEY_READ);
}
if (!bExist)
{
//if (bPrompt) AfxMessageBox ("没有安装Microsft Word 95或更高版本,操作不能执行!", MB_ICONSTOP);
return false;
}
return true;
}int TL_Initialize()
{
//初始化COM
if (CoInitialize(NULL)!=0)
{
return ERROR_CANNOT_INITIALIZE_COM;
}
if(!IsWordExist())
{
return ERROR_WORDNOTINSTALLED;
}
//Call word process:
try
{
//ASSERT (NULL==m_objWord);
m_objWord = new _ApplicationWord;
if (!m_objWord->CreateDispatch("Word.Application", NULL))
{
//AfxMessageBox("不能创建Word对象!", MB_ICONSTOP);
delete m_objWord; m_objWord = NULL;
throw 0;
return ERROR_CANNOT_CREATE_WORD_APPLICATION;
}
else{
// AfxMessageBox("成功创建Word对象!");
}
}
catch(COleException *oe)
{
oe->ReportError();
delete oe;
return ERROR_CALL_INITIALIZE_UNKNOW_ERROR;
}
catch(...)
{
return ERROR_CALL_INITIALIZE_UNKNOW_ERROR;
}
//OLE_CATCH();
m_nHasCallInitializeSuccess = 40415;//2004/04/15
return ERROR_CALL_INITIALIZE_SUCCESS;
}int UnInitialize()
{
bool bError = false;
if (m_objWord)
{
try
{
COleVariant covTrue((short)TRUE), covFalse((short)FALSE);
m_objWord->Quit(covFalse, // SaveChanges.
covTrue, // OriginalFormat.
covFalse // RouteDocument.
);
m_objWord->ReleaseDispatch();
delete m_objWord;
m_objWord = NULL;
}
catch(COleException *oe)
{
oe->ReportError();
delete oe;
bError = true;
}
catch(...)
{
bError = true;
}
//OLE_CATCH();
}
CoUninitialize(); if(bError)
{
return ERROR_CANNOT_CLOSE_WORD;
}
return ERROR_QUIT_SUCCESS;
}
HOWTO: Use Visual C++ to Access DocumentProperties with Automation Q238393and call // Call Documents.Add() to new a blank document
IDispatch *pDoc;
{
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_METHOD, &result, pDocs, L"Add", 0);
pDoc = result.pdispVal;
}