程序流程:
前言:
有时我们产品需要做一个启动程序,比如插入一个设备就自动打开你需要的软件,这样用户会有更好的体验,下面的代码可能会对你有帮助。
1.得到程序的地址
我这里是把程序的地址保存在一个文件里。被启动的程序第一次打开时就会,把自己的地址更新到文件中。
也可以采样读环境变量或者注册表信息,采样这种方法就需要在安装程序时把程序的地址写入注册表或环境变量中。
2.查看需要打开的程序是否已经在运行了
因为很多时候,我们需要判断程序是否打开,没有打开则启动他,打开了则关闭自启动程序。
我在这一步使用的是Window下的一个API函数,FindWindow();具体用法可以自己去搜索一下,只需参考我代码中必须添加的头文件和lib库就可以了。
3.启动程序
使用ShellExecute()函数打开程序,注意头文件即可。具体使用方法网上有。
4.若不存在需要启动的程序则跳到指定的下载页
使用ShellExecute()函数;
5.我的源代码
//-----------------------
//自启动代码
//------------------------
#include "stdafx.h"
#include "string.h"
//函数ShellExecute()需要的头文件
#include <windows.h>
#include <shellapi.h>
//函数FindWindow()需要的头文件
#include "winuser.h"
#pragma comment(lib,"user32.lib") //函数FindWindow()需要的lib库
#pragma comment(lib,"shell32.lib") //函数ShellExecute()需要的lib库
//隐藏窗口
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
int _tmain(int argc, _TCHAR* argv[])
{
//读取文件位置
FILE *fp;
//打开程序保存文件信息
fp=fopen("D:\\autorun.dat","r");
HINSTANCE hInstance=0;
if(fp!=NULL)
{
int i=0;
//程序运行的地址
char pramageaddress[100];
//程序运行需要的库文件的地址
char runaddress[100];
memset(pramageaddress,'\0',100);
memset(runaddress,'\0',100);
while(!feof(fp))
{
fscanf(fp,"%c",pramageaddress+i);
if(pramageaddress[i]=='/')
{
pramageaddress[i]='\\';
}
i++;
}
//关闭文件
fclose(fp);
strcpy(runaddress,pramageaddress);
strcat(pramageaddress,"\\HealthCoaster.exe");
//判断程序是否在运行
HWND h = FindWindow( NULL, "HealthCoaster");
if(h!=NULL)
return 0;
//启动程序
hInstance=ShellExecute(NULL,"open",pramageaddress,NULL,runaddress,SW_SHOWNORMAL);
}
//如果不存在需要启动的程序则打开指定的下载页
if((DWORD)hInstance<=32)
{
//下载地址
char updataddress[]="http://172.14.1.118:10000/HealthCoaster.rar";
//如果启动失败,则打开下载页
ShellExecute(NULL,"open",updataddress,NULL,NULL,SW_SHOWNORMAL);
}
return 0;
}
参考网址:http://blog.sina.com.cn/s/blog_49ce238c010007aq.html
http://www.vckbase.com/index.php/wv/11.html
http://zhangyonggameres.blog.163.com/blog/static/1347349032010104104023579/