void CXTPControlCustom::DoPropExchange(CXTPPropExchange* pPX) { CXTPControlButton::DoPropExchange(pPX); PX_Rect(pPX, _T("Borders"), m_rcBorders, CRect(0, 0, 0, 0)); PX_Size(pPX, _T("ControlSize"), m_szControl, CSize(0, 0)); PX_Enum(pPX, _T("VerticalOptions"), m_verticalOptions, xtpVerticalHide); if (pPX->GetSchema() > _XTP_SCHEMA_861) { PX_Int(pPX, _T("ControlId"), m_nControlID, 0); } if (pPX->IsLoading() && m_nControlID != 0) { CXTPCommandBars* pCommandBars = ((XTP_COMMANDBARS_PROPEXCHANGE_PARAM*)pPX->m_dwData)->pCommandBars; ASSERT(pCommandBars->IsKindOf(RUNTIME_CLASS(CXTPCommandBars))); ASSERT(pCommandBars && pCommandBars->GetSite()); CWnd* pWnd = FindChildWindow(pCommandBars, m_nControlID); if (pWnd) { m_hwndControl = pWnd->GetSafeHwnd(); } } }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { if (_tcsclen(lpCmdLine) > 0) { if (wcsncmp(lpCmdLine, L"--", 2) == 0) { // Find iPhoneToday window that should be somewhere under the Desktop window... HWND hwnd = FindChildWindow(GetDesktopWindow(), L"iPhoneToday"); CommandLineArguements(hwnd, lpCmdLine + 2); } } return 0; }
// Find a window under parent with the specified title. HWND FindChildWindow(HWND parent, TCHAR *title) { if (parent == NULL || title == NULL) { return NULL; } TCHAR tmp[100]; if (GetWindowText(parent, tmp, 100)) { if (wcsicmp(tmp, title) == 0) { return parent; } } HWND child = GetWindow(parent, GW_CHILD); while (child != NULL) { HWND h = FindChildWindow(child, title); if (h) { return h; } child = GetWindow(child, GW_HWNDNEXT); } return NULL; }
static LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData ) { if (uMsg==WM_WINDOWPOSCHANGING) { WINDOWPOS *pos=(WINDOWPOS*)lParam; if (pos->flags&SWP_SHOWWINDOW) { wchar_t title[256]; GetWindowText(hWnd,title,_countof(title)); if (_wcsicmp(title,g_TitleMove)==0 || _wcsicmp(title,g_TitleCopy)==0) { // file UI if (GetSettingBool(L"ReplaceFileUI")) { CString log; bool bLog=GetSettingInt(L"LogLevel")>0; CComPtr<IAccessible> pAcc; HRESULT h=AccessibleObjectFromWindow(hWnd,OBJID_WINDOW,IID_IAccessible,(void**)&pAcc); if (SUCCEEDED(h) && pAcc) { CClassicCopyFile copy; if (copy.Run(hWnd,pAcc,bLog?&log:NULL)) { pos->x=pos->y=-20000; pos->flags&=~(SWP_SHOWWINDOW|SWP_NOMOVE); } } else if (bLog) LogPrint(&log,L"AccessibleObjectFromWindow: error=0x%X, hWnd=0x%X",h,(DWORD)hWnd); if (bLog) { wchar_t fname[_MAX_PATH]=L"%LOCALAPPDATA%\\ExplorerLog.txt"; DoEnvironmentSubst(fname,_countof(fname)); if (!log.IsEmpty()) { FILE *f; if (_wfopen_s(&f,fname,L"wb")==0) { fwprintf(f,L"\xFEFF"); OSVERSIONINFOEX ver={sizeof(ver)}; GetVersionEx((OSVERSIONINFO*)&ver); fwprintf(f,L"version = %d.%d.%d - %d.%d\r\n\r\n",ver.dwMajorVersion,ver.dwMinorVersion,ver.dwBuildNumber,ver.wServicePackMajor,ver.wServicePackMinor); wchar_t languages[100]={0}; ULONG size=4; // up to 4 languages ULONG len=_countof(languages); GetThreadPreferredUILanguages(MUI_LANGUAGE_NAME,&size,languages,&len); for (const wchar_t *lang=languages;*lang;lang+=wcslen(lang)+1) fwprintf(f,L"language = %s\r\n",lang); fwprintf(f,L"\r\n"); fwprintf(f,L"g_ButtonMove = '%s'\r\n",g_ButtonMove); fwprintf(f,L"g_ButtonDontMove = '%s'\r\n",g_ButtonDontMove); fwprintf(f,L"g_ButtonCopy = '%s'\r\n",g_ButtonCopy); fwprintf(f,L"g_ButtonDontCopy = '%s'\r\n",g_ButtonDontCopy); fwprintf(f,L"g_ButtonCancel = '%s'\r\n",g_ButtonCancel); fwprintf(f,L"\r\n"); fwrite((const wchar_t*)log,log.GetLength(),2,f); fclose(f); } } else DeleteFile(fname); } } } else if (_wcsicmp(title,g_TitleFolder)==0) { // folder UI if (GetSettingBool(L"ReplaceFolderUI")) { CClassicCopyFolder copy; if (copy.Run(hWnd)) { pos->x=pos->y=-20000; pos->flags&=~(SWP_SHOWWINDOW|SWP_NOMOVE); } } } else { // look for progress bar if (GetSettingBool(L"EnableMore")) { HWND progress=FindChildWindow(hWnd,PROGRESS_CLASS); if (progress) { bool bDef; int delay=GetSettingInt(L"MoreProgressDelay",bDef); if (bDef) { delay=0; if (GetWinVersion()>=WIN_VER_WIN7) { BOOL comp; if (SUCCEEDED(DwmIsCompositionEnabled(&comp)) && comp) delay=500; } } SetTimer(hWnd,'CLEX',delay,NULL); return DefSubclassProc(hWnd,uMsg,wParam,lParam); } } } LRESULT res=DefSubclassProc(hWnd,uMsg,wParam,lParam); RemoveWindowSubclass(hWnd,WindowProc,uIdSubclass); return res; } } if (uMsg==WM_TIMER && wParam=='CLEX') { KillTimer(hWnd,wParam); CComPtr<IAccessible> pAcc; HRESULT h=AccessibleObjectFromWindow(hWnd,OBJID_WINDOW,IID_IAccessible,(void**)&pAcc); if (SUCCEEDED(h) && pAcc) { CComPtr<IAccessible> pMore=FindMoreButton(pAcc); if (pMore) pMore->accDoDefaultAction(CComVariant(CHILDID_SELF)); } LRESULT res=DefSubclassProc(hWnd,uMsg,wParam,lParam); RemoveWindowSubclass(hWnd,WindowProc,uIdSubclass); return res; } return DefSubclassProc(hWnd,uMsg,wParam,lParam); }