Windows编程

时间:2020-06-07 14:55:18   收藏:0   阅读:147

Windows 程序原理

初始windows编程

1.1创建Win32 Windows应用程序

Win32 Project 创建

1.2认识入口函数

#include <tchar.h>
#include <windows.h>

int WINAPI _tWinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPWSTR     lpCmdLine,
	int       nShowCmd
)
{
	 MessageBox(NULL, _T("这是第一个程序"), _T("标题"), MB_YESNOCANCEL | MB_DEFBUTTON2);
	 return 0;
}

1.3Windows常见数据类型

【Windows核心编程】Windows常见数据类型

微软使用typedef关键字,为很多常用的C/C++类型均定义了别名,这样一来,要解决源代码移植问题,只需在目标平台上定义相同的一套类型别名,

即可解决大部分问题,很是方便,这其实也是为程序的扩展性考虑的。

DWORD  实质上就是unsigned long数据类型,32位无符号整型。
HANDLE 类型实质上是void, HANDLE定义为:
typedof PVOID HANDLE;
HANDLE  实际上就是一个PVOID,那PVOID又是什么呢?
typeof void* PVOID; 
PVOID  就是指向void的指针

1.4 Windows API 调用,盘2个简单的API

1.4.1 URLDownloadToFile

【URLDownloadToFile API档案】

#include <windows.h>
#include <tchar.h>
#pragma comment(lib, "urlmon.lib")
//入口点函数
int WINAPI WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nShowCmd
)
{
	MessageBox(NULL, _T("这是第一个程序"), _T("标题"), MB_YESNOCANCEL | MB_DEFBUTTON2);
	

	//指定网址文件下载到本地文件
	HRESULT herur=URLDownloadToFile(NULL, _T("https://s.cctry.com/images/eagle2.png"), _T("D:\\123.png"), 0,NULL);
	if (herur == S_OK)
	{
		MessageBox(NULL, _T("it is done"), _T("DOWNLOAD"), NULL);
	
	}
	else {
		MessageBox(NULL, _T("it is not done"), _T("DOWNLOAD"), NULL);
	
	}
	
	//自动执行文件
	return 0;

}

1.4.2 ShellExecuteEx

[ShellExecuteEx API档案](https://www.cnblogs.com/blogpro/p/11343975.html)

打开图片

      SHELLEXECUTEINFO sei;
      ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));//使用前最好清空
      sei.cbSize = sizeof(SHELLEXECUTEINFO);//管理员权限执行cmd,最基本的使用与 ShellExecute 类似
      sei.lpFile = _T("D:\\123.png");
      sei.nShow = SW_SHOW;
      ShellExecuteEx(&sei);

打开系统的 cmd

	SHELLEXECUTEINFO sei;
	ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));//使用前最好清空
	sei.cbSize = sizeof(SHELLEXECUTEINFO);//管理员权限执行cmd,最基本的使用与 ShellExecute 类似
	sei.lpFile = _T("cmd.exe");
	sei.nShow = SW_SHOW;
	sei.lpVerb = _T("runas");
	ShellExecuteEx(&sei);

打开网页

      SHELLEXECUTEINFO sei;
      ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));//使用前最好清空
      sei.cbSize = sizeof(SHELLEXECUTEINFO);//管理员权限执行cmd,最基本的使用与 ShellExecute 类似
      sei.lpFile = _T("www.baidu.com");
      sei.nShow = SW_SHOW;

      ShellExecuteEx(&sei);

打开QQ

      SHELLEXECUTEINFO sei;
      ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));//使用前最好清空
      sei.cbSize = sizeof(SHELLEXECUTEINFO);//管理员权限执行cmd,最基本的使用与 ShellExecute 类似
      sei.lpFile = _T("F:\\应用程序工作目录\\QQ\\Bin\\QQScLauncher.exe");
      sei.nShow = SW_SHOW;
      ShellExecuteEx(&sei);

1.5错误处理

	BOOL sucessDelete= DeleteFile(_T("D:\\123.txt"));

	if (sucessDelete)
	{
		MessageBox(NULL, _T("删除成功"), _T("提示"), NULL);
	}
	else
	{
		DWORD error = GetLastError();
                if(error==ERROR_FILE_NOT_FOUND)
                {
                      MessageBox(NULL, _T("文件不存在"), _T("提示"), NULL);
                }
                else
                {
		      MessageBox(NULL, _T("删除失败"), _T("提示"), NULL);
                }   
	}

1.6文件操作

1.6.1 文件删除 复制与重命名

删除文件

?

      BOOL sucessDelete= DeleteFile(_T("D:\\123.txt"));
      if (sucessDelete)
      {
	MessageBox(NULL, _T("删除成功"), _T("提示"), NULL);
      }
      else
      {
	MessageBox(NULL, _T("删除失败"), _T("提示"), NULL);
      }
      //如何使用deletefile删除一个只读属性的文件?

拷贝

      BOOL sucessCopy =CopyFile(_T("D:\\456.txt"), _T("D:\\789.txt"), FALSE);
      if (sucessCopy)
      {
	MessageBox(NULL, _T("拷贝成功"), _T("提示"), NULL);
      }
      else
      {
	MessageBox(NULL, _T("拷贝失败"), _T("提示"), NULL);
      }

重命名

//重命名、可对文件夹操作
//目标文件存在,重命名失败
      BOOL sucessMove = MoveFile(_T("D:\\789.txt"), _T("D:\\12789.txt"));
      if (sucessMove)
      {
	MessageBox(NULL, _T("move成功"), _T("提示"), NULL);
      }
      else
      {
	MessageBox(NULL, _T("move失败"), _T("提示"), NULL);
      }
      BOOL sucessMoveDirectory = MoveFile(_T("D:\\新建文件夹"), _T("D:\\1278"));
      if (sucessMoveDirectory)
      {
	MessageBox(NULL, _T("move文件夹成功"), _T("提示"), NULL);
      }
      else
      {
	MessageBox(NULL, _T("move文件夹失败"), _T("提示"), NULL);
      }
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!