→ tropical72:另我還蠻好奇原po的新增方式的,我不曾遇過這問題.. 12/08 16:46
※ 引述《hyc325 (SONY VAIO-FE25TP)》之銘言:
: 最近嘗試在VC++ 6.0 中以OLE操作Excel時
: 發現一個蠻困擾的問題
: 在正常的新增xls檔案及寫入資料均可正常關閉
: 但是若加入Add方式新增sheet時
: 無法將Excel完全關閉
: 並且在處理程序中會殘留EXCEL.EXE
: 造成之後此檔案無法正常開啟
: 必須關閉處理程序後才能使用
: Google後有找到一些程式網站也有人遇到相同問題
: 建議的方式好像是直接終止EXCEL.EXE
: 查了MSDN好像是要用KillProcess
: 不過仍看不太懂其用法
: 指導一下該怎樣刪除
: 謝謝
taskkill 不知道是不是專屬 windows 指令..
提供 tlhelp32.h 做法
下述程式碼中的 break 視情況看要不要加
如果像是要關 IE 的話,通常程序管理員不只一個,
最好的方式就是全都查完去關。
http://nopaste.csie.org/e2070
#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
int main()
{
HANDLE hProcessSnap;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
if( hProcessSnap == INVALID_HANDLE_VALUE ) {
printf("create snapshot fail.\n");
return EXIT_FAILURE;
}
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof( PROCESSENTRY32 );
if( !Process32First( hProcessSnap, &pe32 ) ) {
printf("get process fail.\n");
CloseHandle( hProcessSnap );
return EXIT_FAILURE;
}
do{
// printf( "PROCESS NAME: %s\n", pe32.szExeFile );
if(!stricmp("Excel.exe",pe32.szExeFile)){
// find excel.exe, kill it.
HANDLE hProcess;
hProcess = OpenProcess( PROCESS_ALL_ACCESS,
FALSE,
pe32.th32ProcessID );
if( hProcess == NULL ) printf("open process fail.\n");
TerminateProcess(hProcess,0);
WaitForSingleObject(hProcess,INFINITE);
CloseHandle( hProcess );
break; // after close, then break
}
}while(Process32Next( hProcessSnap, &pe32 ));
CloseHandle( hProcessSnap );
return EXIT_SUCCESS;
}
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
※ 編輯: tropical72 來自: 180.177.76.142 (12/08 16:33)