📄 timerrockey.cpp
字号:
/********************************************************************
Copyright (c) Beijing Feitian Technologies
http://www.FTSafe.com
File : TimerRockey.cpp
Created: 2003/11/04
Author: yihai
Purpose: ?
Revision: ?
*********************************************************************/
#include "stdafx.h"
#include <windows.h>
#include "ryvc32.h"
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK EnumThreadWndProc(HWND hwnd,LPARAM lParam);
char g_szAppTitle[256] = "TimerRockey";
char g_szMsgErrThread[256] = "Create thread fail!";
static HWND g_hMainWnd=NULL;
static char szWindowClass[] = "ROCKEY_TIMER_WND";
static DWORD g_dwThreadID = 0;
static HANDLE g_hThread = NULL;
const DWORD g_dwDefTimerID = 1;
DWORD g_dwTimerID = 1; //记时器ID
DWORD g_dwTimerDelay = 1000; //记时器延时
DWORD g_dwMainThreadID; //主线程ID
HWND g_hMainThreadWnd=NULL; //主线程窗口句柄
DWORD WINAPI SubThreadMainProc(LPVOID lpParameter) //壳所创建的后台线程
{
HINSTANCE hInst = (HINSTANCE )lpParameter;
Sleep(2000); //等待主线程窗口的创建
if (!InitInstance (hInst, 0)) //在这个线程里创建一个隐藏的窗口
{
goto lbl_thread_end;
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
lbl_thread_end:
ExitThread(0);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_dwMainThreadID = GetCurrentThreadId();
MyRegisterClass(hInstance); //注册隐藏窗口的窗口类
g_hThread = CreateThread(NULL,0,SubThreadMainProc,hInstance,0,&g_dwThreadID);
if(g_hThread==NULL)
MessageBox(NULL,g_szMsgErrThread,g_szAppTitle,MB_OK);
return 0;
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(szWindowClass, g_szAppTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
g_hMainWnd = hWnd;
ShowWindow(hWnd, SW_HIDE);
//UpdateWindow(hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
g_dwTimerID = g_dwDefTimerID;
SetTimer(hWnd,g_dwTimerID,g_dwTimerDelay,NULL); //创建我们用来修改主程序标题栏的定时器
}
break;
case WM_TIMER:
{
static bool bEnum = false;
static bool bMsgBox = false;
if(wParam == g_dwTimerID)
{
PostMessage(hWnd,WM_NULL,0,0); //在WIN98下可令后台线程的消息循环不会出现死锁
WORD retcode=0;
if(!bEnum)
{
//列举主线程的所有窗口,并找到主窗口
EnumThreadWindows(g_dwMainThreadID,EnumThreadWndProc,NULL);
bEnum = true;
}
else if(g_hMainThreadWnd) //定时检测加密锁是否存在
{
if(!bMsgBox)
{
WORD handle[16];
DWORD lp1,lp2;
WORD p1=0xc44c,p2=0xc8f8,p3=0,p4=0;
BYTE buf[1024];
char szOutBuf[512];
WORD wRet;
wRet = Rockey(RY_FIND,&handle[0],&lp1,&lp2,&p1,&p2,&p3,&p4,buf);
wsprintf(szOutBuf,"RETCODE: %x",wRet);
OutputDebugString(szOutBuf);
if(wRet!=ERR_SUCCESS)
{
bMsgBox = true;
MessageBox(g_hMainThreadWnd,"No rockey or no drivers","Rockey",MB_OK);
ExitProcess(0);
}
}
}
}
}
break;
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
{
KillTimer(hWnd,g_dwTimerID);
PostQuitMessage(0);
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION);
return RegisterClassEx(&wcex);
}
BOOL CALLBACK EnumThreadWndProc(HWND hWnd,LPARAM lParam)
{
if(hWnd)
{
if(GetParent(hWnd) == NULL)
{
g_hMainThreadWnd = hWnd;
return FALSE;
}
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -