游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3281|回复: 1

vc++在操作系统的应用wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-4-30 18:55:00 | 显示全部楼层 |阅读模式

                 简介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);
                   禁止屏幕保护及电源管理
                  \{
                  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;
                  }

                   启用屏幕保护及电源管理
                  \{
                  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. 如何给树控件加入工具提示
                  首先给树控件加入TVS_INFOTIP属性风格,如下所示:
                  if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|
                  TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP,
                  //加入提示TVS_INFOTIP,jingzhou xu(树控件ID:100)
                  CRect(0, 0, 0, 0), &m_wndTreeBar, 100))
                  \{
                  TRACE0("Failed to create instant bar child
                  ");
                  return -1;
                  }
                  其次加入映射消息声明,如下所示:
                  afx_msg void OnGetInfoTip(NMHDR* pNMHDR,LRESULT* pResult);
                  //树控件上加入提示消息,jingzhou xu

                  ON_NOTIFY(TVN_GETINFOTIP, 100, OnGetInfoTip)
                  //树控件条目上加入提示,jingzhou xu
                  最后加入呼应涵数处理:
                  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( &quotath" )
                  #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( :athAppend( 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;
                   禁止系统热键
                  //屏蔽掉系统键
                  SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,&bOld,SPIF_UPDATEINIFILE);

                   启用系统热键
                  //恢复系统热键
                  SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,&bOld,SPIF_UPDATEINIFILE);

                  9. 如何隐藏/显示WINDOWS系统任务栏
                   隐藏系统任务栏
                  //隐藏WINDOWS系统任务栏
                  ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);
                   显示系统任务栏
                  //恢复WINDOWS系统任务栏正常显示
                  ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);

                  10. 如何实现窗口到系统区图标11. 间的动画效果

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-4 14:14:00 | 显示全部楼层

Re:vc++在操作系统的应用wxh zt

"10. 如何实现窗口到系统区图标11. 间的动画效果"
谁来写?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-4-22 06:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表