81.如何浏览文件
看如下示例代码:
CString ReturnPach;
TCHAR szPath[_MAX_PATH];
BROWSEINFO bi;
bi.hwndOwner=NULL;
bi.pidlRoot=NULL;
bi.lpszTitle=_T("请选择一个文件夹");
bi.pszDisplayName=szPath;
bi.ulFlags=BIF_RETURNONLYFSDIRS;
bi.lpfn=NULL;
bi.lParam=NULL;
LPITEMIDLIST pItemIDList=SHBrowseForFolder(&bi);
if(pItemIDList)//如果选择了文件则找到那选择的文件的路径。
{
if(SHGetPathFromIDList(pItemIDList,szPath))
ReturnPach=szPath;
}
else
ReturnPach="";
m_path.SetWindowText(ReturnPach);
注:SHBrowseForFolder函数如果用户点击了取消则返回NULL;
82.如何实现移动文件夹
MoveFile方法用于实现不同文件夹下移动文件的操作,相当于系统中的剪切命令。
83.如何更改文件夹图标
文件夹图标的修改需要在目标文件夹下新建一个Desktop.ini文件,并在文件中添加键值。
具体过程为:在该ini文件的[v.ShellClassInfo]节下,添加IconFile=图标 1.ico和
IconIndex=0.IconFile是指定图标文件,最好和ini文件在同一个文件下,如果不在同一个文件
下,应该使用图标资源的全路径;IconIndex是指定图标的索引,一般为0.
84.如何获取文件夹的图标信息。
得到文件的路径名,然后用::SHGetFileInfo(path,0,&shfile,sizeof(shfile),AHGIF_ICON);
SHFILEINFO shfile;
85.判断一个可执行文件或DLL中是否有图标存在,并将其提取出来可用ExtractIcon方法。
86.重命名文件可以使用stdio.h文件下的rename函数。
87.如何设置文件属性?
我们可以通过CFile类的GetStatus方法和SetStatus方法来实现。具体实现过程请参考如下代码:
CFileStatus status;
BYTE m_newattri;
if(m_ar.GetCheck())
{
m_newattri=0x20;
CFile::GetStatus(pathname,status);
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
}
if(m_dir.GetCheck())
{
m_newattri=0x10;
CFile::GetStatus(pathname,status);
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
}
if(m_hide.GetCheck())
{
m_newattri=0x02;
CFile::GetStatus(pathname,status);
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
}
if(m_normal.GetCheck())
{
m_newattri=0x00;
CFile::GetStatus(pathname,status);
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
}
if(m_readonly.GetCheck())
{
m_newattri=0x00;
CFile::GetStatus(pathname,status);
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
m_newattri=0x01;
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
}
if(m_system.GetCheck())
{
m_newattri=0x04;
CFile::GetStatus(pathname,status);
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
}
if(m_vol.GetCheck())
{
m_newattri=0x08;
CFile::GetStatus(pathname,status);
status.m_attribute=m_newattri;
CFile::SetStatus(pathname,status);
}
88.修改目录的名称:我们可以使用MoveFile方法。MoveFile方法主要用来移动文件或目录,通过它
可以达到修改目录名称的目的.
89.读取文本文件也可以使用CStdioFile类的ReadString方法实现.
90.如何实现文件分割?
要想实现文件分割,其实很简单,我们只要用CFile中的Read方法就能把一个文件分割成若干个
文件。把分割后的文件合在一起并成原来的文件只需用Write方法就行。
91.如何利用WinRar压缩和解压文件?
我们可以通过ShellExecute函数调用WinRar.exe实现文件的压缩和解压。
WinRar.exe的语法如下:
解压:
WINRAR X[-switches][Files][@File lists][destionation folder]
压缩:
WINRAR A[-switches][Files][@File lists]
如下示例代码:
解压:
void OnUnZip()
{
CString source,path,temp;
GetDlgItem(IDC_EDSOURCE)->GetWindowText(source);
int pos=source.Find(".");
path=source.Left(pos);
temp.Format("X %s %s",source,path);
::CreateDirectory(path,NULL);
::ShellExecute(NULL,"open","WinRar.exe",temp,NULL,SW_SHOW);
}
压缩:
void OnZip()
{
CString des,temp,path,rarpath;
GetDlgItem(IDC_EDDES)->GetWindowText(des);
path.Format("%s//*.*",des);
rarpath.Format("%s//mingrisoft.rar",des);
temp.Format("a %s %s",rarpath,path);
::ShellExecute(NULL,"open","WinRar.exe",temp,NULL,SW_SHOW);
}
92.如何修改Windows XP的注册表,使得机子启动时弹出提示框?
例如我们可以在HKEY_LOCAL_MACHINE/Software/Microsoft/WindowsNT/CurrentVersion
/Winlogon 下面新建一个名为"Legalnoticecaption"的字符串值,将它的数据设置成提示
信息的标题,如"警告"或"用户注意事项"等。在"Winlogon"次级主键下再建一个名为
"LegalNoticeText"的字符串值,输入提示信息,如"欢迎进入Windows"等。
这样,进入WindowsXP前就会发出警告信息,弹出警告对话框信息.
在VC++用程序实现如下:
void OnAdd()
{
CString strtitle,strbody;
GetDlgItem(IDC_EDTITLE)->GetWindowText(strtitle);
GetDlgItem(IDC_EDBODY)->GetWindowText(strbody);
HKEY sub;
CString skey="Software//Microsoft//Windows NT//CurrentVersion//Winlogon";
::RegCreateKey(HKEY_LOCAL_MACHINE,skey,&sub);
RegSetValueEx(sub,"legalnoticecaption",NULL,REG_SZ,
(BYTE*)strtitle.GetBuffer(0),strtitle.GetLength());
RegSetValueEx(sub,"LegalNoticeText",NULL,REG_SZ,
(BYTE*)strbody.GetBuffer(0),strbody.GetLength());
RegCloseKey(sub);
}
删除键值:
void OnMove()
{
HKEY sub;
CString skey="Software//Microsoft//Windows NT//CurrentVersion//Winlogon";
::RegCreateKey(HKEY_LOCAL_MACHINE,skey,&sub);
::RegDeleteValue(sub,"legalnoticecaption");
::RegDeleteValue(sub,"LegalNoticeText");
RegCloseKey(sub);
}
93.如何用程序实现:关闭重启注销计算机?
重新启动计算机,关闭计算机和注销计算机只需要ExitWindowsEx函数即可实现,
但在Windows 2000 系统下应用程序获得相关权限时才可能实现,这就需要用OpenProcessToken
函数、LookupPrivilegeValue函数和AdjustTokenPrivileges函数的组合使用.
BOOL OpenProcessToken(//获得应用程序权限的令牌
HANDLE ProcessHandle, // handle to process
//获取令牌的应用程序句柄
DWORD DesiredAccess, // desired access to process
//访问令牌的请求类型
PHANDLE TokenHandle // pointer to handle of open access token
//令牌句柄
);
BOOL LookupPrivilegeValue(//获得权限的唯一标识值
LPCTSTR lpSystemName, // address of string specifying the system
//权限所在的系统名称
LPCTSTR lpName, // address of string specifying the privilege
//权限的名称
PLUID lpLuid // address of locally unique identifier
//权限的唯一标识值
);
BOOL AdjustTokenPrivileges(//设置令牌的权限
HANDLE TokenHandle, // handle to token that contains privileges
//令牌句柄
BOOL DisableAllPrivileges,// flag for disabling all privileges
//打开或关闭令牌权限
PTOKEN_PRIVILEGES NewState,// pointer to new privilege information
//新的TOKEN_PRIVILEGES结构对象,TOKEN_PRIVILEGES
//结构包含着一些权限信息及权限的属性
DWORD BufferLength, // size, in bytes, of the PreviousState buffer
//上一个TOKEN_PRIVILEGES结构对象的缓存大小
PTOKEN_PRIVILEGES PreviousState,// receives original state of changed privileges
//上一个TOKEN_PRIVILEGES结构对象
PDWORD ReturnLength // receives required size of the PreviousState buffer
//返回上一个TOKEN_PRIVILEGES结构对象所要求的缓存大小。
如下为示例代码:(设置关机权限)
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
tp.PrivilegeCount =1;
tp.Privileges [0].Luid =luid;
tp.Privileges [0].Attributes =SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL, NULL);
);
94.如何修改注册表让程序开机自动运行?
在HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run 下新建一个字符串,
值要为自动运行程序名,将它的参数设置成程序所在目录,即可将该程序设置为自动执行.
例如:
建一个Thunder 其值为"C:/Program Files/Thunder Network/Thunder/Thunder.exe" /s
让程序自动运行有两种方法,一种是把可执行文件放在开始--程序--启动的文件夹下;
另一种如上。
95.如何判断驱动器属性?
我们可以通过GetDriveType函数来获得驱动器的类型。使用方法请查阅MSDN。
96.如何获取磁盘序列号
计算机的磁盘或硬盘格式化后都有对应的磁盘序列号。我们可以通过GetVolumeInformation函数
来获取磁盘驱动器序列号,该函数是用来 获得文件系统中根目录磁盘卷标信息的。
其语法如下:
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // address of root directory of the
// file system
//根目录名称
LPTSTR lpVolumeNameBuffer, // address of name of the volume
//存放卷标名称的缓存
DWORD nVolumeNameSize, // length of lpVolumeNameBuffer
//卷标名称大小
LPDWORD lpVolumeSerialNumber, // address of volume serial number
//卷标的序列号
LPDWORD lpMaximumComponentLength,
// address of system's maximum
// filename length
//最大文件名长度
LPDWORD lpFileSystemFlags, // address of file system flags
//文件系统标志
LPTSTR lpFileSystemNameBuffer, // address of name of file system
//存放文件系统名称的缓存
DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer
//存放文件系统名称的大小
);
示例代码:
LPTSTR namebuf=new char[12];
DWORD namesize=12;
DWORD serialnumber;
DWORD maxlen;
DWORD fileflag;
LPTSTR sysnamebuf=new char[10];
DWORD sysnamesize=10;
::GetVolumeInformation("c://",namebuf,namesize,&serialnumber,&maxlen,&fileflag,
sysnamebuf,sysnamesize);
97. 如何取消磁盘共享?
取消默认共享需要在控制台使用net命令,例如要取消C盘的默认共享,需要使用net share
c:/del 命令。我们可以通过WinExec函数来执行关闭磁盘默认共享的net命令,该函数是在
程序中执行其他可执行文件,语法如下:
UINT WinExec(
LPCSTR lpCmdLine, // address of command line
//命令行字符串,包括其他可执行文件所调用的参数
UINT uCmdShow // window style for new application
//执行其他可执行文件时窗体的显示设置
);
如下示例代码:
CString strcmd="net.exe share F:/del";
::WinExec(strcmd,SW_HIDE);
98.磁盘是计算机存储数据的一种主要介质,主要分为两种:软盘(Floppy Disk)和硬盘(Hard Disk)。
硬盘在使用之前先进行低级格式化(也称物理格式化),然后进行分区,最后进行高级格式
化(也称逻辑格式化),这样才能存储数据。软盘不需要进行前两个步骤,直接进行高级格
式化就能够使用了。通常硬盘在出厂前已经进行了低级格式化,使用前直接分区和高级格
式化即可。高级格式化操作能将磁盘中的数据清空,并且能够恢复一些逻辑性的磁盘错误,
因此常常被使用。
在程序中我们可以调用FormatDriver函数来显示格式化磁盘的对话框,该函数是Shell32.dll
文件中的函数。
语法如下:
FormatDriver(HWND hwnd,UINT drive,UINT fmtID,UINT options)
参数说明:
hwnd: 应用程序窗体句柄
drive:磁盘驱动器序号.
fmtID:格式化ID
options:格式化选项
如下示例代码:
typedef DWORD (WINAPI *MyFunc)(HWND hwnd,
UINT drive,UINT fmtID,UINT options);
HMODULE hModule=::LoadLibrary("shell32.dll");
if(hModule)
{
MyFunc FormatDriver= (MyFunc) GetProcAddress(hModule, "SHFormatDrive");
if(FormatDriver)
FormatDriver(this->GetSafeHwnd(),'F'-'A',0xFFFF,0);
}
99.如何隐藏、显示"开始"按钮?
我们可以通过使用FindWindow函数和FindWindowEx函数查找具体窗体句柄,通过ShowWindow函数
达到隐藏和显示窗体的目的。"开始"按钮在任务栏窗体上,任务栏的窗体类名称是
"Shell_TrayWnd".
如下示例代码:
隐藏"开始按钮"
void OnHide()
{
HWND parent=::FindWindow("Shell_TrayWnd","");
HWND startmenu=::FindWindowEx(parent,0,"Button",NULL);
if(startmenu!=NULL)
{
::ShowWindow(startmenu,SW_HIDE);
}
}
显示开始按钮:
void OnShow()
{
HWND parent=::FindWindow("Shell_TrayWnd","");
HWND startmenu=::FindWindowEx(parent,0,"Button",NULL);
if(startmenu!=NULL)
{
::ShowWindow(startmenu,SW_SHOW);
}
}
100.如何隐藏、显示桌面文件?
这方法和99问一样。桌面窗体名称是Program Manager,窗体类名称是Progman。
示例代码如下:
隐藏桌面:
void OnHide()
{
/*通过注册表来隐藏桌面
HKEY sub;
DWORD data=1;
CString skey="Software//Microsoft//Windows//CurrentVersion
//Policies//Explorer";
::RegCreateKey(HKEY_CURRENT_USER,skey,&sub);
RegSetValueEx(sub,"nodesktop",NULL,REG_DWORD,(BYTE*)&data,sizeof(DWORD));
RegCloseKey(sub);
*/
//HWND desktop=::FindWindow("Progman",NULL);
HWND desktop=::FindWindow(NULL,"Program Manager");
if(desktop!=NULL)
{
::ShowWindow(desktop,SW_HIDE);
}
}
显示桌面
void OnShow()
{
/*
HKEY sub;
DWORD data=0;
CString skey="Software//Microsoft//Windows//CurrentVersion//Policies//Explorer";
::RegCreateKey(HKEY_CURRENT_USER,skey,&sub);
RegSetValueEx(sub,"nodesktop",NULL,REG_DWORD,(BYTE*)&data,sizeof(DWORD));
RegCloseKey(sub);
*/
HWND desktop=::FindWindow("Progman",NULL);
if(desktop!=NULL)
{
::ShowWindow(desktop,SW_SHOW);
}
}
分享到:
相关推荐
总的来说,VC++ Windows运行环境合集是解决程序运行依赖问题的有效工具,它使得开发者可以轻松地在各种Windows系统上部署和运行他们的C++程序,尤其是那些基于MFC框架的应用。正确地管理和使用这些运行库,能够保证...
总之,"VC++允许库合集"是解决C++应用程序依赖问题的关键,而“未能加载文件或程序集CefSharp.Core.dll”通常是由于缺少运行库支持或配置不当所致。通过正确安装和配置VC++运行库,以及检查CefSharp的部署情况,通常...
计算机问题集VC++ ASP是一个资源包,包含了初学者在学习VC++和ASP编程时可能会遇到的问题及解答。这个集合对于那些刚开始接触这两种技术的人来说是非常有价值的,因为它提供了实践中的常见问题和解决方案,帮助他们...
此外,此版本引入了新的诊断工具,帮助开发者检测并修复性能问题。 **VC++2013**加强了C++14标准的支持,比如通用初始化语法、可变模板参数列表等。同时,它在调试和性能分析方面有所提升,提供更好的用户体验。 *...
在编程领域,尤其是在科学计算和工程应用中,...综上所述,"VC++常用数值算法集"涵盖的内容丰富多样,是解决各种数学问题和工程计算的强大工具箱。通过理解和掌握这些算法,开发者能够编写出高效且精确的数值计算程序。
同时,考虑到性能和兼容性问题,开发者需要进行充分的测试,确保皮肤在不同操作系统和硬件配置下都能正常工作。 总的来说,"VC++皮肤(合集)"为开发者提供了一个丰富的资源库,他们可以通过学习和实践,让自己的...
VC++中的ReadFile和WriteFile函数分别用于接收和发送数据,这两个函数都是异步的,因此在实际应用中可能需要配合GetOverlappedResult或WaitForSingleObject等函数处理同步问题。 在这些源码中,还涉及到数据转换...
《VC++技巧集》是一本专注于探讨VC++(Visual C++)编程技术的书籍,它旨在帮助开发者掌握和提升在Windows环境下使用C++进行软件开发的技能。VC++是Microsoft公司开发的一种集成开发环境,特别适合创建Windows应用...
"VC++常见问题集—C++学习"这个资源正好为此目的而设计,它提供了一个关于C++编程的常见问题合集,帮助开发者解决实际编程过程中可能遇到的困扰。 首先,让我们探讨一些C++编程中常见的问题: 1. **编译错误**:...
总的来说,VC++2015 Redistributable Package是确保基于VC++2015编译的应用程序正常运行的基础,它提供了必要的运行时环境和库文件,解决了程序依赖问题,并且随着微软的安全更新,确保了系统的安全性。无论是用户...
VC++运行库合集
**微软常用VC++运行库合集详解** 微软的VC++运行库是开发人员在使用Microsoft Visual Studio编写基于C++的应用程序时所依赖的关键组件。这些运行库包含了Microsoft C++编译器生成的动态链接库(DLLs),它们提供了...
**VC++笔记-问题集** 本笔记集合涵盖了VC++编程中的关键知识点,特别是关于多线程操作、进程通信以及自定义ActiveX控件制作的深入探讨。这些主题在实际开发中具有广泛的应用,理解并掌握它们对于提升软件工程能力至...
顺序存储结构的表、堆栈和队列,链式存储结构的表、堆栈和队列,数组、串和广义表,递归,树和二叉树,图,排序,查找,文件。含有108个完整的程序源代码、可执行文件。
《VC++编程指南和VC常见问题集》是一个针对微软Visual C++(简称VC++)开发者的参考资料集合。这个压缩包包含两个.chm文件,分别是"vc++ 编程指南.chm"和"VC常见问题集(中文).chm",它们提供了关于VC++编程的全面...
这里包含了若干本VC++实例教程及实例,对VC++学习很有帮助,希望大家能够喜欢。由于文件太大,分为五个部分。part5
《VC++深入详解(完整版)+所有源代码集》是一份全面探讨Microsoft Visual C++(简称VC++)编程技术的资源包,包含了书籍的详细内容和配套的源代码。这份资料旨在帮助开发者深入理解VC++的各个方面,从基础概念到高级...
VC++串口通信20个经典源码合集: .\VC 串口通信程序.rar .\VC 读串口话是动态波形,非常好的应用程序,有源码.rar .\VC++ 串口实现双机互联 包含视窗加代码.rar .\VC++ 串口通信,可以收发数据,可选用TCPIP 通信.rar ....
在Windows 10系统上,由于系统更新和安全性的提升,某些旧版本的VC++运行库可能不再被默认包含,因此安装这个合集可以帮助解决运行依赖于这些库的软件的问题。例如,一些游戏、软件或者系统工具可能需要VC++ 2005、...
随着时间的推移,微软不断更新和改进VC++运行库,引入了新的功能、优化了性能,并修复了已知的安全问题。例如,从VC++ 2005开始引入了.NET Framework的组件,使得C++开发者能够利用.NET平台的优势。在后续版本中,如...