看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)
tropical72:另我還蠻好奇原po的新增方式的,我不曾遇過這問題.. 12/08 16:46