發佈時間:
1. 如 何 激 活 當 前 屏 幕 保 護 程 序
// 激活當前屏幕保護程序, jingzhou xu
PostMessage(WM_SYSCOMMAND,SC_SCREENSAVE,0);
2. 如 何 禁 止/啓 用 屏 幕 保 護 及 電 源 管 理
static UINT dss_GetList[]={ SPI_GETLOWPOWERTIMEOUT,SPI_GETPOWEROFFTIMEOUT,SPI_GETSCREENSAVETIMEOUT};
static UINT dss_SetList[]={ SPI_SETLOWPOWERTIMEOUT,SPI_SETPOWEROFFTIMEOUT,SPI_SETSCREENSAVETIMEOUT};
static const int dss_ListCount=_countof(dss_GetList);
l 禁 止 屏 幕 保 護 及 電 源 管 理
{
m_pValue=new int [dss_ListCount];
for (int x=0;x<dss_ListCount;x++)
{
// 禁止屏幕保護及電源管理
VERIFY(SystemParametersInfo(dss_SetList[x],0,NULL,0));
}
delete []m_pValue ;
}
l 啓 用 屏 幕 保 護 及 電 源 管 理
{
m_pValue=new int [dss_ListCount];
for (int x=0;x<dss_ListCount;x++)
{
//啓用屏幕保護及電源管理
VERIFY(SystemParametersInfo(dss_SetList[x],m_pValue[x],NULL,0));
}
delete []m_pValue ;
}
3. 如 何 激 活 和 關 閉 IE 瀏 覽 器
//激活並打開IE
void lounchIE()
{
HWND h=FindWindowEx(NULL,NULL,NULL, "Microsoft Internet Explorer" );
ShellExecute(h,"open" ,"C://simple.html" , NULL,NULL,SW_SHOWNORMAL);
}
//關閉IE及其它應用
void CloseIE()
{
int app=BSM_APPLICATIONS ;
unsigned long bsm_app=(unsigned long )app ;
BroadcastSystemMessage(BSF_POSTMESSAGE,&bsm_app, WM_CLOSE,NULL,NULL);
}
4. 如 何 給 樹 控 件 加 入 工 具 提 示
l 首 先 給 樹 控 件 加 入 TVS_INFOTIP 屬 性 風 格 , 如 下 所 示 :
if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|
//加入提示TVS_INFOTIP,jingzhou xu(樹控件ID:100)
TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP,CRect(0,0,0,0),&m_wndTreeBar,100))
{
TRACE0("Failed to create instant bar child/n" );
return -1 ;
}
l 其 次 加 入 映 射 消 息 聲 明 , 如 下 所 示 :
afx_msg void OnGetInfoTip(NMHDR*pNMHDR,LRESULT *pResult);
//樹控件上加入提示消息,jingzhou xu
//樹控件條目上加入提示,jingzhou xu
ON_NOTIFY(TVN_GETINFOTIP,100,OnGetInfoTip)
l 最 後 加 入 呼 應 涵 數 處 理 :
void CCreateTreeDlg :: OnGetInfoTip(NMHDR*pNMHDR,LRESULT *pResult)
{
*pResult=0 ;
NMTVGETINFOTIP*pTVTipInfo=(NMTVGETINFOTIP*)pNMHDR ;
LPARAM itemData=(DWORD )pTVTipInfo->lParam ;
//對應每個條目的數據
HTREEITEM hItem=pTVTipInfo->hItem ;
CString tip ;
HTREEITEM hRootItem=m_chassisTree.GetRootItem();
if (hRootItem!=pTVTipInfo->hItem)
{
tip="樹結點的提示" ;
}
else
{
tip="樹根上的提示" ;
}
strcpy(pTVTipInfo->pszText,(LPCTSTR )tip);
}
5. 如 何 獲 取 系 統 信 息 框 的 路 徑
#include<atlbase.h>
#define IDS_REG_KEY_MSINFO_PATH1 _T("Software//Microsoft//Shared Tools//MSInfo")
#define IDS_REG_KEY_MSINFO_PATH2 _T("Software//Microsoft//Shared Tools Location")
#define IDS_REG_VAL_MSINFO_PATH1 _T("Path")
#define IDS_REG_VAL_MSINFO_PATH2 _T("MSInfo")
#define IDS_MSINFO_EXE_NAME _T("MSInfo32.exe")
//...
BOOL GetSysInfoPath(CString&strPath)
{
strPath.Empty();
LPTSTR pszPath=strPath.GetBuffer(MAX_PATH);
CRegKey reg ;
DWORD dwSize=MAX_PATH ;
LONG nRet=reg.Open(HKEY_LOCAL_MACHINE,IDS_REG_KEY_MSINFO_PATH1,KEY_READ);
// 在註冊表中尋找第一個"MSInfo32.exe" 位置
if (nRet==ERROR_SUCCESS)
{
#if(_MFC_VER>=0x0700)
nRet=reg.QueryStringValue(IDS_REG_VAL_MSINFO_PATH1,pszPath,&dwSize);
#else
nRet=reg.QueryValue(pszPath,IDS_REG_VAL_MSINFO_PATH1,&dwSize);
#endif
reg.Close();
}
// 如果第一次尋找失敗,則進行第二次尋找
if (nRet!=ERROR_SUCCESS)
{
nRet=reg.Open(HKEY_LOCAL_MACHINE,IDS_REG_KEY_MSINFO_PATH2,KEY_READ);
if (nRet==ERROR_SUCCESS)
{
#if(_MFC_VER>=0x0700)
reg.QueryStringValue(IDS_REG_VAL_MSINFO_PATH2,pszPath,&dwSize);
#else
reg.QueryValue(pszPath,IDS_REG_VAL_MSINFO_PATH2,&dwSize);
#endif
// 路徑名不包括EXE文件名
if (nRet==ERROR_SUCCESS)
VERIFY(:: PathAppend(pszPath,IDS_MSINFO_EXE_NAME));
reg.Close();
}
}
strPath.ReleaseBuffer();
strPath.FreeExtra();
// 檢查文件是否有效.
return :: PathFileExists(strPath);
}
6. 如 何 直 接 運 行 一 個 資 源 中 的 程 序
bool Run()
{
CFile f ;
char *pFileName="Execution.exe" ;
if (!f.Open(pFileName,CFile :: modeCreate|CFile :: modeWrite,NULL))
{
AfxMessageBox("Can not create file!" );
return 0 ;
}
CString path=f.GetFilePath();
HGLOBAL hRes ;
HRSRC hResInfo ;
//獲取應用實例
HINSTANCE insApp=AfxGetInstanceHandle();
//尋找EXE資源名
hResInfo=FindResource(insApp,(LPCSTR )IDR_EXE4,"EXE" );
hRes=LoadResource(insApp,hResInfo);
// Load it
DWORD dFileLength=SizeofResource(insApp,hResInfo);
//計算EXE文件大小
f.WriteHuge((LPSTR )hRes,dFileLength);
//寫入臨時文件
f.Close();
HINSTANCE HINSsd=ShellExecute(NULL,"open" ,path,NULL,NULL,SW_SHOWNORMAL);
//運行它.
>return 1 ;
}
7. 如 何 遍 歷 整 個 目 錄
#include<windows.h>
#include<shlobj.h>
//瀏覽目錄.
void BrowseFolder(void )
{
TCHAR path[MAX_PATH];
BROWSEINFO bi={ 0 } ;
bi.lpszTitle=("遞歸調用所有目錄" );
LPITEMIDLIST pidl=SHBrowseForFolder(&bi);
if (pidl!=0)
{
// 獲取目錄路徑
SHGetPathFromIDList(pidl,path);
//設置爲當前路徑
SetCurrentDirectory(path);
//搜索所有子目錄
SearchFolder(path);
// 釋放內存
IMalloc*imalloc=0 ;
if (SUCCEEDED(SHGetMalloc(&imalloc)))
{
imalloc->Free(pidl);
imalloc->Release();
}
}
}
//搜索其下所有子目錄及文件.
void SearchFolder(TCHAR *path)
{
WIN32_FIND_DATA FindFileData ;
HANDLE hFind ;
TCHAR filename[MAX_PATH+256];
TCHAR pathbak[MAX_PATH];
//複製初始用戶選擇目錄
strcpy(pathbak,path);
//尋找第一個文件
hFind=FindFirstFile("*.*" ,&FindFileData);
//搜索所有文件及子目錄
do
{
if (hFind!=INVALID_HANDLE_VALUE)
{
//如果是當前目錄或父目錄,跳過
if (!(strcmp(FindFileData.cFileName,"." ))||!(strcmp(FindFileData.cFileName,".." )))
{
continue ;
}
//恢復初始用戶選擇目錄
strcpy(path,pathbak);
//列出所有發現的文件
sprintf(path,"%s//%s" ,path,FindFileData.cFileName);
//如果 SetCurrentDirectory 成功的話,則它是一個目錄,遞歸調用繼續搜索子目錄
if ((SetCurrentDirectory(path)))
{
SearchFolder(path);
}
//插入文件及路徑名到列表框m_listbox_hwnd中
SendMessage(m_listbox_hwnd,LB_ADDSTRING,0,path);
//<--INSERT WHAT YOU WANT DONE HERE!
}
}
while (FindNextFile(hFind,&FindFileData)&&hFind!=INVALID_HANDLE_VALUE);
FindClose(hFind);
}
8. 如 何 禁 止/啓 用 系 統 熱 鍵
bool bOld ;
l 禁 止 系 統 熱 鍵
//屏蔽掉系統鍵
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true ,&bOld,SPIF_UPDATEINIFILE);
l 啓 用 系 統 熱 鍵
//恢復系統熱鍵
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false ,&bOld,SPIF_UPDATEINIFILE);
9. 如 何 隱 藏/顯 示 WINDOWS 系 統 任 務 欄
l 隱 藏 系 統 任 務 欄
//隱藏WINDOWS系統任務欄
:: ShowWindow(:: FindWindow("Shell_TrayWnd" ,NULL),SW_HIDE);
l 顯 示 系 統 任 務 欄
//恢復WINDOWS系統任務欄正常顯示
:: ShowWindow(:: FindWindow("Shell_TrayWnd" ,NULL),SW_SHOW);
10. 如 何 實 現 窗 口 到 系 統 區 圖 標 間 的 動 畫 效 果
//********************************************************************************
//* 名稱:FindTrayWnd
//* 作者:徐景周([email protected])
//* 功能:在顯示窗體動畫效果前,先尋找系統區位置
//********************************************************************************
BOOL CALLBACK FindTrayWnd(HWND hwnd,LPARAM lParam)
{
TCHAR szClassName[256];
GetClassName(hwnd,szClassName,255);
// 比較窗口類名
if (_tcscmp(szClassName,_T("TrayNotifyWnd" ))==0)
{
CRect*pRect=(CRect*)lParam ;
:: GetWindowRect(hwnd,pRect);
return TRUE ;
}
// 當找到時鐘窗口時表示可以結束了
if (_tcscmp(szClassName,_T("TrayClockWClass" ))==0)
{
CRect*pRect=(CRect*)lParam ;
CRect rectClock ;
:: GetWindowRect(hwnd,rectClock);
pRect->right=rectClock.left ;
return FALSE ;
}
return TRUE ;
}
//********************************************************************************
//* 名稱:WinAnimation
//* 作者:徐景周([email protected])
//* 功能:顯示窗口動畫效果的涵數
//********************************************************************************
void CScreenSnapDlg :: WinAnimation(BOOL ShowFlag)
{
CRect rect(0,0,0,0);
// 查找托盤窗口
CWnd*pWnd=FindWindow("Shell_TrayWnd" ,NULL);
if (pWnd)
{
pWnd->GetWindowRect(rect);
EnumChildWindows(pWnd->m_hWnd,FindTrayWnd,(LPARAM )&rect);
//rect 爲托盤區矩形
CRect rcWnd ;
GetWindowRect(rcWnd);
//窗體滑向系統區
if (ShowFlag)DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rcWnd,rect);
//窗體從系統區滑出
else DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rect,rcWnd);
}
}
用 法 如 下 :
//窗體是否已隱藏
if (IsWindowVisible())
{
ShowWindow(SW_HIDE);
//先隱藏窗體
WinAnimation(true );
//窗體動畫滑入到系統區中
}
else
{
WinAnimation(false );
//窗體動畫從系統區滑出
ShowWindow(SW_SHOW);
}