關閉使用ShellExecute開啟的程序

2021-09-08 02:53:31 字數 1512 閱讀 8912

最近做乙個專案使用到

shellexecute

來開啟乙個帶引數的外部

exe檔案,關閉時遇到不少問題,最終解決,總結如下。

對於關閉

shellexecute

開啟的程序視窗,網上比較多的是用

findwindow

方式,可惜我也不知道這視窗的名稱。通過查詢資料找到以下方式可以關閉程序:

// lpprocessname

為開啟的程序名稱

帶檔案型別字尾

如:****.exe

void closeprocess(lpctstr lpprocessname);

closehandle(hproecss); }

// 遍歷程序,得到程序id

dword getprocessid(lpctstr lpprocessname) ;

pe32.dwsize = sizeof(pe32);

// 拿到第乙個程序資訊

if(!process32first(hsnapshot, &pe32))

do 

//if(_tcscmp(lower(lpprocessname), lower(pe32.szexefile)) == 0)

if(_tcscmp(lpprocessname, pe32.szexefile) == 0)

} while (process32next(hsnapshot, &pe32)); }

return 0; }

後來應用時發現在

win7

系統關閉

exe程序沒有問題,但在

winxp

系統時關閉程序失敗。

經測試是呼叫

openprocess()返回0

,getlasterror()

返回的錯誤**為

5,表示訪問拒絕,許可權不夠!

bool processprivilege(bool benable)

tokenprivileges.privilegecount           = 1;

tokenprivileges.privileges[0].attributes = benable ? se_privilege_enabled : 0;

lookupprivilegevalue(null,se_debug_name,&tokenprivileges.privileges[0].luid);

adjusttokenprivileges(htoken,false,&tokenprivileges,sizeof(token_privileges),null,null);

if(getlasterror() != error_success)

closehandle(htoken);

return bresult; }

在closeprocess()

函式的第一行加入

processprivilege(true)

,關閉成功

!

使用指令碼關閉訂單頭

訂單的關閉是自動的,在所有行工作流結束 close或者cancel 後0.5天,訂單頭也將在workflow background process的推動下關閉。還有另外一種說法 you can wait until month end and the order flow generic workf...

MQTX BROKER 使用,關閉匿名認證

訪問是否啟動成功 127.0 0.1 18083 賬號 admin 密碼 public 停止服務命令 進入cmd視窗 bin emqx stop 關閉服務 新增使用者 使用者名稱密碼認證 基於 mqtt 登入使用者名稱 username 密碼 password 認證。etc plugins emqx...

window系統關閉占用埠使用

window系統總是會出現埠被占用的問題,網上也有很多教程來處理埠占用問題,我們一般通過cmd命令來解決這個問題 1.在執行面板中輸入cmd開啟cmd面板 2.在cmd面板中輸入 netstat ano可以檢視電腦所有埠被占用的情況,使用netstat ano findstr 埠號 例如 netst...