颈椎的生理解剖图:关于VC编程实现explorer刷新问题

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 13:48:12
关于VC编程实现explorer刷新问题 
我想修改注册表,是系统显示文件的后缀名,但是程序执行后,需要手动刷新才能看到效果。可以用程序实现吗?
explorer进程就别说了。

貌似在文件夹选项里面修改以后,立刻就会生效,
SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE     ...,) 
或者SystemParametersInfo(..,WM_SETTINGCHANGE) 
试试看

用SHDocVw::IShellWindowsPtr来实现。 
简单的核心代码: 

class   CAutoRefreshDlg   :   public   CDialog 

........... 
CListCtrlm_ctrlIE; 
SHDocVw::IShellWindowsPtr   m_spSHWinds; 
........... 
}; 

BOOL   CAutoRefreshDlg::OnInitDialog() 

CoInitialize(NULL); 
............... 
if   (m_spSHWinds   ==   NULL){ 
if   (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows))   !=   S_OK){ 
MessageBox( "Failed "); 
CoUninitialize(); 
EndDialog(1); 



m_ctrlIE.SetExtendedStyle(LVS_EX_CHECKBOXES|LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); 
m_ctrlIE.InsertColumn(0,   "IE ",   LVCFMT_LEFT,   500,   -1); 
OnButtonRefresh(); 

m_uTimerRefresh   =   SetTimer(1,   m_uFreq*1000,   NULL); 
return   TRUE;     //   return   TRUE     unless   you   set   the   focus   to   a   control 

void   CAutoRefreshDlg::OnButtonRefresh()   

//   TODO:   Add   your   control   notification   handler   code   here 
int   n   =   m_ctrlIE.GetItemCount();//GetCount(); 

for   (int   i   =   0;   i   <   n;   i   ++){ 
IWebBrowser2   *pBrowser   =   (IWebBrowser2   *)m_ctrlIE.GetItemData(i); 
if   (pBrowser){ 
pBrowser-> Release(); 



m_ctrlIE.DeleteAllItems(); 

if   (m_spSHWinds){ 
int   n   =   m_spSHWinds-> GetCount(); 
for   (int   i   =   0;   i   <   n;   i++){ 
_variant_t   v   =   (long)i; 
IDispatchPtr   spDisp   =   m_spSHWinds-> Item(v); 

SHDocVw::IWebBrowser2Ptr   spBrowser(spDisp); 
if   (spBrowser){ 
_bstr_t   bsName   =   spBrowser-> GetLocationName(); 
int   nPos   =   m_ctrlIE.InsertItem(0,   bsName); 
spBrowser-> AddRef(); 
void   *   pData   =   spBrowser; 
m_ctrlIE.SetItemData(nPos,   (DWORD)(pData)); 






void   CAutoRefreshDlg::DoClose() 

int   n   =   m_ctrlIE.GetItemCount();//GetCount(); 

for   (int   i   =   0;   i   <   n;   i   ++){ 
IWebBrowser2   *pBrowser   =   (IWebBrowser2   *)m_ctrlIE.GetItemData(i); 
if   (pBrowser){ 
pBrowser-> Release(); 



m_ctrlIE.DeleteAllItems(); 

if   (m_spSHWinds){ 
m_spSHWinds.Release(); 
m_spSHWinds   =   0; 

CoUninitialize(); 
EndDialog(0); 


void   CAutoRefreshDlg::OnTimer(UINT   nIDEvent)   

//   TODO:   Add   your   message   handler   code   here   and/or   call   default 
if   (nIDEvent   ==   1){ 
int   n   =   m_ctrlIE.GetItemCount(); 
for   (int   i   =   0;   i   <   n;   i++){ 
if   (m_ctrlIE.GetCheck(i)){ 
IWebBrowser2   *pBrowser   =   (IWebBrowser2   *)m_ctrlIE.GetItemData(i); 
if   (pBrowser){ 
pBrowser-> Refresh(); 





CDialog::OnTimer(nIDEvent); 
}