需要用到shell32.dll里的ShellExecute函数。
代码如下:
/**********CopyRight@piaoxiang.zhang*****/
#include <stdio.h>
#include <string.h>
#include <windows.h>
typedef int (*ReadReg)(HKEY ,LPCTSTR ,LPTSTR ,PLONG ) ;
typedef int (*Shell_Exec)(HWND,char *,char *,char *,char *,int);
char * data_Set="mailto\\shell\\open\\command\\";
char data[128]={0};
void GetNameFromString(char *s,int *L)
{
int len=*L,cnt,i;
char *ptr,c='"',cp='\\' ;
char *tmp =(char*)malloc(128*sizeof(char));
ptr=strchr(s,c);
i=ptr-s;
printf("ptr-s=%d\n",i);
do{
i++;
if(s[i]==c)break;
if(s[i]==cp)
{
*tmp=s[i];
tmp++;
*tmp=s[i];
tmp++;
}
else
{
*tmp=s[i];
tmp++;
}
}while(i<len);
cnt=i;
while(i>0){
}
if(i!=len)s[i]='\0';
free(tmp);
}
int main(int argv,char **argc)
{
int dataSize;
HANDLE hwnd;
HINSTANCE hLib;
#if 0
hLib= LoadLibrary("advapi32.dll");
int ret=0;
if(!hLib) printf("缺少advapi32.dll\n");
ReadReg dllReadReg;
dllReadReg= (ReadReg)GetProcAddress(hLib,"RegQueryValueA");
if(!dllReadReg)printf("没有RegOpenKeyA\n");
ret=dllReadReg(HKEY_CLASSES_ROOT,data_Set,data,&dataSize);
printf("reg=%s,dataSize=%d\n",data,dataSize);
GetNameFromString(data,&dataSize) ;
printf("after:%s\n",data) ;
//WinExec("D:\\Program Files\\Foxmail 7.2\\Foxmail.exe",SW_SHOWNORMAL);
#endif
hLib= LoadLibrary("shell32.dll");
if(!hLib) printf("shell32.dll\n");
Shell_Exec dllShell_Exec;
dllShell_Exec=(Shell_Exec)GetProcAddress(hLib,"ShellExecuteA");
if(!dllShell_Exec)printf("没有ShellExecuteA\n");
dllShell_Exec(hwnd,"open","mailto:piaoxiang.zhang@163.com",
NULL,NULL,SW_SHOWNORMAL);
system("pause");
return 0;
}
效果图: