深入浅出ShellExecute 译者:徐景周(原作: Nishant S )Q: 如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW ); 或 ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\\MyLog.log","",SW_SHOW ); As you can see, I haven't passed the full path of the programs.
Q: 如何显示文件或文件夹的属性? SHELLEXECUTEINFO ShExecInfo ={0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = "properties"; ShExecInfo.lpFile = "c:\\"; //can be a file as well ShExecInfo.lpParameters = ""; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOW; ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo);
用MailAPI就可以了,何必引入一大堆乱七八糟的类 MapiFileDesc attachment = {0, // ulReserved, must be 0 0, // no flags; this is a data file (ULONG)-1, // position not specified "c:\\makefile", // pathname "makefile", // original filename NULL}; // MapiFileTagExt unused // Create a blank message. Most members are set to NULL or 0 because // MAPISendMail will let the user set them. MapiMessage note = {0, // reserved, must be 0 NULL, // no subject NULL, // no note text NULL, // NULL = interpersonal message NULL, // no date; MAPISendMail ignores it NULL, // no conversation ID 0L, // no flags, MAPISendMail ignores it NULL, // no originator, this is ignored too 0, // zero recipients NULL, // NULL recipient array 1, // one attachment &attachment}; // the attachment structure
err = my_func (0L, // use implicit session. 0L, // ulUIParam; 0 is always valid ¬e, // the message being sent MAPI_DIALOG, // allow the user to edit the message 0L); // reserved; must be 0 if (err != SUCCESS_SUCCESS ) printf("Unable to send the message\n");
{
typedef ULONG (FAR PASCAL * SENDFILES)(LHANDLE, ULONG, lpMapiMessage, FLAGS, ULONG);HINSTANCE hinst = NULL;
SENDFILES sendfile = NULL;
MapiMessage mapimessage;
lpMapiFileDesc lpMapiFiles = NULL;
lpMapiFileDesc lpMapiTemp = NULL;hinst = LoadLibrary("MAPI32.DLL");
ASSERT ( NULL != hinst );
if ( NULL == hinst )
{
if ( NULL != lpMapiFiles )
{
delete [] lpMapiFiles;
lpMapiFiles = NULL;
}
return;
}
...
.........
....
// fill data
sendfile = (SENDFILES)GetProcAddress(hinst, "MAPISendMail");
sendfile(NULL, (ULONG)hWnd, &mapimessage, MAPI_DIALOG|MAPI_LOGON_UI|MAPI_NEW_SESSION,0);
FreeLibrary(hinst);}
译者:徐景周(原作: Nishant S )Q: 如何打开一个应用程序?
ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );
或
ShellExecute(this->m_hWnd,"open","notepad.exe",
"c:\\MyLog.log","",SW_SHOW );
As you can see, I haven't passed the full path of the programs.
Q: 如何打开一个同系统程序相关连的文档?
ShellExecute(this->m_hWnd,"open",
"c:\\abc.txt","","",SW_SHOW );
Q: 如何打开一个网页?
ShellExecute(this->m_hWnd,"open",
"http://www.google.com","","", SW_SHOW );
Q: 如何激活相关程序,发送EMAIL?
ShellExecute(this->m_hWnd,"open",
"mailto:[email protected]","","", SW_SHOW );
Q: 如何用系统打印机打印文档?
ShellExecute(this->m_hWnd,"print",
"c:\\abc.txt","","", SW_HIDE);
Q: 如何用系统查找功能来查找指定文件?
ShellExecute(m_hWnd,"find","d:\\nish",
NULL,NULL,SW_SHOW);
Q: 如何启动一个程序,直到它运行结束?
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\\MyProgram.exe";
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
或:
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
if(CreateProcess("c:\\winnt\\notepad.exe", NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
MessageBox("The process could not be started...");
}
Q: 如何显示文件或文件夹的属性?
SHELLEXECUTEINFO ShExecInfo ={0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = "properties";
ShExecInfo.lpFile = "c:\\"; //can be a file as well
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
0, // no flags; this is a data file
(ULONG)-1, // position not specified
"c:\\makefile", // pathname
"makefile", // original filename
NULL}; // MapiFileTagExt unused
// Create a blank message. Most members are set to NULL or 0 because
// MAPISendMail will let the user set them.
MapiMessage note = {0, // reserved, must be 0
NULL, // no subject
NULL, // no note text
NULL, // NULL = interpersonal message
NULL, // no date; MAPISendMail ignores it
NULL, // no conversation ID
0L, // no flags, MAPISendMail ignores it
NULL, // no originator, this is ignored too
0, // zero recipients
NULL, // NULL recipient array
1, // one attachment
&attachment}; // the attachment structure
err = my_func (0L, // use implicit session.
0L, // ulUIParam; 0 is always valid
¬e, // the message being sent
MAPI_DIALOG, // allow the user to edit the message
0L); // reserved; must be 0
if (err != SUCCESS_SUCCESS )
printf("Unable to send the message\n");