代碼:
void __fastcall CrnPinAppToWin7Taskbar(String strPath, String strApp) {
CoInitialize(0); // 初始化com組件
char filename[] = "c:\\313.txt"; // 此處寫入檔案名
ofstream fout(filename);
Variant vShell = CreateOleObject("Shell.Application"); // 創建shell類物件
Variant vFolder = vShell.OleFunction("NameSpace", WideString(strPath));
Variant vFolderItem = vFolder.OleFunction("ParseName", WideString(strApp));
Variant vItemVerbs = vFolderItem.OleFunction("Verbs");
// 獲取Pin to Taskbar的Verb字串
HINSTANCE hInst = ::LoadLibrary("Shell32.dll");
TCHAR szPinName[256] = {
0
};
::LoadString(hInst, 5386, szPinName, 256); // 找到shell32.dll中第5386的字串
::FreeLibrary(hInst);
String str;
int nCount = vItemVerbs.OlePropertyGet("Count"); //總共29個字串
for (int i = 0; i < nCount; i++) {
str = vItemVerbs.OleFunction("Item", i).OlePropertyGet("Name");
if (SameText(str, szPinName)) { //服務中能進入
// 63 63 72 75 6E 2E 63 6F 6D
fout<<"in same"; //進入ok
fout<<"\n";
Variant res =vItemVerbs.OleFunction("Item", i).OleFunction("DoIt");//呼叫doit函式失敗,直接回傳
// String str = SysErrorMessage(::GetLastError()); //錯誤代碼沒有輸出
// char * str1 = new char[str.Length()+1];
// StrPCopy(str1,str);
// fout<<str1;
fout << "\n"; //服務中都沒有執行
fout << "ok";
fout << "\n";
}
}
CoUninitialize(); // 解除com組建
}
這個方法是從網上找到的妖哥的方法,服務外面沒問題,但是服務內部會失敗,經過除錯,發現錯誤就在呼叫doit函式的時候失敗,估計還是直接return了,因為后面的除錯資訊在服務里面執行是沒有的
求大嬸指教,困擾小弟好幾天了..經過除錯,前面的步驟都是沒問題的,但是就是
Variant res =vItemVerbs.OleFunction("Item", i).OleFunction("DoIt");會呼叫失敗,求大嬸指教...
權限的話,我創建了一個administrator權限的行程去運行程式還是不行,路徑方面好像也沒有用到什么路徑
uj5u.com熱心網友回復:
自己搞定了,是環境變數的問題uj5u.com熱心網友回復:
恭喜了,可以貼出答案給別人參考。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110078.html
