程序流程:
前言:
有時我們產品需要做一個啓動程序,比如插入一個設備就自動打開你需要的軟件,這樣用戶會有更好的體驗,下面的代碼可能會對你有幫助。
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/