控制台开启邮箱--C语言实现

需要用到shell32.dll里的ShellExecute函数。
代码如下:

/**********[email protected]*****/
#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:[email protected]",
                                          NULL,NULL,SW_SHOWNORMAL);

  system("pause");
  return 0;
}

效果图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/piao3956/article/details/70208077