int CTargetWnd::GetText(CStringW& str) const { if (IsUnicodeSystem()) { int len=(int)::SendMessageW(m_hWnd,WM_GETTEXTLENGTH,0,0)+2; LPWSTR text=new WCHAR[len]; if (text==NULL) { SetHFCError(HFC_CANNOTALLOC); return FALSE; } len=(int)::SendMessageW(m_hWnd,WM_GETTEXT,(WPARAM)len,(LPARAM)text); str.Copy(text,len); delete[] text; return len; } int len=(int)::SendMessage(m_hWnd,WM_GETTEXTLENGTH,0,0)+2; LPSTR text=new CHAR[len]; if (text==NULL) { SetHFCError(HFC_CANNOTALLOC); return FALSE; } len=(int)::SendMessageA(m_hWnd,WM_GETTEXT,(WPARAM)len,(LPARAM)text); str.Copy(text,len); delete[] text; return len; }
void ShellFunctions::StrRetToStr(STRRET& strret,LPITEMIDLIST lpiil,CStringW& sString) { switch (strret.uType) { case STRRET_OFFSET: sString.Copy((LPSTR)((LPBYTE)lpiil+strret.uOffset)); break; case STRRET_CSTR: sString.Copy(strret.cStr); break; case STRRET_WSTR: sString.Copy(strret.pOleStr); CoTaskMemFree(strret.pOleStr); break; } }
BOOL ShellFunctions::RunRegistryCommand(HKEY hKey,LPCWSTR szFile) { if (!IsUnicodeSystem()) return RunRegistryCommand(hKey,W2A(szFile)); PROCESS_INFORMATION pi; STARTUPINFOW si; CRegKey CommandKey; CStringW ExecuteStr; CStringW CommandLine; int i; if (CommandKey.OpenKey(hKey,"command",CRegKey::openExist|CRegKey::samAll)!=ERROR_SUCCESS) return FALSE; if (CommandKey.QueryValue(L"",ExecuteStr)<2) return FALSE; i=ExecuteStr.FindFirst(L'%'); while (i!=-1) { if (ExecuteStr[i+1]==L'1') { CommandLine.Copy(ExecuteStr,i); CommandLine<<szFile; CommandLine<<((LPCWSTR)ExecuteStr+i+2); break; } i=ExecuteStr.FindNext(L'%',i); } if (i==-1) CommandLine=ExecuteStr; if (!ExpandEnvironmentStringsW(CommandLine,ExecuteStr.GetBuffer(1000),1000)) ExecuteStr.Swap(CommandLine); si.cb=sizeof(STARTUPINFOW); si.lpReserved=NULL; si.cbReserved2=0; si.lpReserved2=NULL; si.lpDesktop=NULL; si.lpTitle=NULL; si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOWDEFAULT; if (!CreateProcessW(NULL,ExecuteStr.GetBuffer(),NULL, NULL,FALSE,CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, NULL,NULL,&si,&pi)) { CommandKey.CloseKey(); return FALSE; } CloseHandle(pi.hThread); CloseHandle(pi.hProcess); CommandKey.CloseKey(); return TRUE; }
UINT CWnd::GetDlgItemText(int nIDDlgItem,CStringW& str) { HWND hCtrl=::GetDlgItem(m_hWnd,nIDDlgItem); UINT len=(UINT)::SendMessage(hCtrl,WM_GETTEXTLENGTH,0,0); if (IsUnicodeSystem()) return ::GetWindowTextW(hCtrl,str.GetBuffer(len),len+1); char* pText=new char[len+2]; ::GetWindowTextA(hCtrl,pText,len+1); str.Copy(pText,len); delete[] pText; return len; }
int CWnd::GetWindowText(CStringW& str) const { if (IsUnicodeSystem()) { int len=::GetWindowTextLengthW(m_hWnd); len=::GetWindowTextW(m_hWnd,str.GetBuffer(len),len+1); return len; } int len=::GetWindowTextLength(m_hWnd); char* pText=new char[len+2]; ::GetWindowTextA(m_hWnd,pText,len+1); str.Copy(pText,len); delete[] pText; return len; }
int CStatusBarCtrl::GetText(CStringW& str,int nPane,int* pType) const { int ret; int len=(int)::SendMessage(m_hWnd,SB_GETTEXTLENGTH,(WPARAM)nPane,0); if (IsUnicodeSystem()) ret=(int)::SendMessageW(m_hWnd,SB_GETTEXTW,(WPARAM)nPane,(LPARAM)str.GetBuffer(len)); else { char* pText=new char[len+2]; ret=(int)::SendMessageA(m_hWnd,SB_GETTEXTA,(WPARAM)nPane,(LPARAM)pText); str.Copy(pText,len); delete[] pText; } if (pType!=NULL) *pType=HIWORD(ret); return ret; }