getip.cpp
来自「一个功能挺多的」· C++ 代码 · 共 250 行
CPP
250 行
// GetIP.cpp : implementation file
//
//Modify by 徐景周 2000.10
//功能:利用系统鼠标钩子得到星号框内容
#include "stdafx.h"
#include "scrgenius.h"
#include "GetIP.h"
#include "AnimEffect.h" //对话框动画效果显示
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// GetIP dialog
GetIP::GetIP(CWnd* pParent /*=NULL*/)
: CDialog(GetIP::IDD, pParent)
{
//{{AFX_DATA_INIT(GetIP)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_Capture=false;
}
void GetIP::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(GetIP)
DDX_Control(pDX, IDC_GETIP, m_editip);
DDX_Control(pDX, IDOK, m_Button);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(GetIP, CDialog)
//{{AFX_MSG_MAP(GetIP)
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_SHOWWINDOW()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// GetIP message handlers
HHOOK hHook=NULL;
HWND hWndDisplay=NULL;
char* HostString;
bool bHost = false;
char szText[32000];
char* szIPNum ;
bool GetPointText(POINT pt);
extern "C" LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam);
//bool FormatCharToIP(char* szText);
BOOL GetIP::OnInitDialog()
{
CDialog::OnInitDialog();
//拖动宠物图标时设置
m_Static.SubclassDlgItem(IDC_LOVEPET,this);
return TRUE; // return TRUE unless you set the focus to a control
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR GetIP::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void GetIP::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
m_Static.GetWindowRect(&rect);
POINT pt = point;
ClientToScreen( &pt );
if (rect.PtInRect(pt))
{
::SetCursor(AfxGetApp()->LoadCursor(IDC_PET));
SetCapture();
m_Capture = true;
hWndDisplay = m_editip.GetSafeHwnd();
HookInstaller();
}
CDialog::OnLButtonDown(nFlags, point);
}
void GetIP::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_Capture)
{
ReleaseCapture();
m_Capture = false;
HookUninstaller();
}
CDialog::OnLButtonUp(nFlags, point);
}
HHOOK GetIP::HookInstaller()
{
hHook=SetWindowsHookEx(WH_MOUSE,HookProc,NULL,0);
return hHook;
}
BOOL GetIP::HookUninstaller()
{
int bUnHook;
if(hHook)
{
bUnHook = UnhookWindowsHookEx(hHook);
if(bUnHook)
{
hWndDisplay=NULL;
hHook=NULL;
}
}
return bUnHook;
}
extern "C" LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
//定义为鼠标HOOK
LPMOUSEHOOKSTRUCT pMouseEvent = (MOUSEHOOKSTRUCT FAR *)lParam;
if(nCode>=0)
{
if(GetPointText(pMouseEvent->pt))
{
//显示星号内容
SendMessage(hWndDisplay,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szText);
//如果是IP地址,则解析它并显示出来
// if(FormatCharToIP(szText))
// SendMessage(hWndDisplay,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szIPNum);
}
else
{
SendMessage(hWndDisplay,WM_SETTEXT,0,(LPARAM)_T(""));
}
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
bool GetPointText(POINT pt)
{
HWND dWnd;
dWnd= WindowFromPoint(pt);
if(dWnd!=NULL)
{
if(SendMessage(dWnd,WM_GETTEXT,32000,(LPARAM)(LPCTSTR)szText)>0)
return true;
}
return false;
}
/*
//解析网址为IP地址
bool FormatCharToIP(char* szText)
{
PHOSTENT hostinfo;
RASCONN rasconn;
DWORD dNumber,dSize ;
int first,end;
bHost = false;
CString szString=CString(szText);
if(szString.Find(_T("."))==-1)
return false;
if ((first = szString.Find(_T("://")))>1)
first=first+3;
else
first=0;
szString=szString.Mid(first);
if ((end=szString.Find(_T("/"))) >1)
szString=szString.Left(end);
if (szString.Find(_T(":")) >= 1)
return false;
rasconn.dwSize = sizeof(RASCONN);
dSize = sizeof(rasconn);
if (RasEnumConnections(&rasconn,&dSize,&dNumber)!=0)
return false;
if (dNumber==0)
return false;
if((hostinfo = gethostbyname(szString)) != NULL)
{
szIPNum = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
HostString = szString.GetBuffer(30);
szString.ReleaseBuffer();
bHost = true;
return true;
}
return false;
}
*/
BOOL GetIP::DestroyWindow()
{
//解决有时意外的鼠标左键未松,而窗口已关闭时造成的鼠标HOOK未释放的错误
if(m_Capture)
{
ReleaseCapture();
m_Capture = false;
HookUninstaller();
}
CRect rc5; //对话框动画显示效果
AnimEffect anim5;
//在此加入对话框动画关闭效果
GetWindowRect(rc5 );
rc5.DeflateRect(2,2);//动态方框显示
anim5.DrawWireRects(rc5, CRect(rc5.CenterPoint().x-10,rc5.CenterPoint().y-10,rc5.CenterPoint().x+10,rc5.CenterPoint().y+10 ), 10);
// anim5.Close(rc5); ////对话框动画效果显示关闭
// Sleep(50); //延缓50毫秒后关闭
return CDialog::DestroyWindow();
}
void GetIP::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
CRect rc5; //对话框动画显示效果
AnimEffect anim5;
//在此加入对话框动画打开效果
GetWindowRect(rc5 );
anim5.Open( rc5 ); //对话框动画效果显示打开
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?