哪位高手能说说hook如何实现按键跳转回程序某一个界面,还有dll入口函数是必要的吗? c语言
谁能说说hook怎么实现按键跳转回程序某一个界面,还有dll入口函数是必要的吗? c语言
谁能说说hook怎么实现按键跳转回程序某一个界面,还有dll入口函数是必要的吗?网上程序看不懂,查不到,没人可以指导,我搞了2个星期依旧没进展,都快崩溃了,请前辈指导。c语言
------解决思路----------------------
欲速则不达。
楼主老老实实查MSDN学习Window编程才是正途。
------解决思路----------------------
网上有很多全局钩子记录键盘信息例子。楼主可以百度!
DLLMain只是windows的动态库。c++的动态库的话是没有的。
windows中为了更好处理线程、进程对动态库的调用,用DLLMain来做初始化、清理操作(当然如果你愿意,如界面的动态库)。
但c++动态库(通信等和系统无关库)他们更愿意封装c接口,或者用_stacall等c++操作符来让调用者做析构。
谁能说说hook怎么实现按键跳转回程序某一个界面,还有dll入口函数是必要的吗?网上程序看不懂,查不到,没人可以指导,我搞了2个星期依旧没进展,都快崩溃了,请前辈指导。c语言
------解决思路----------------------
欲速则不达。
楼主老老实实查MSDN学习Window编程才是正途。
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
HDC hdc;
HFONT hfont,ohfont;
RECT r;
COLORREF oc;
switch(message) {
case WM_CLOSE://按Alt+F4退出
PostQuitMessage(0);
break;
case WM_PAINT:
BeginPaint(hWnd, &ps);
hdc = ps.hdc; // the device context to draw in
GetClientRect(hWnd, &r); // Obtain the window's client rectangle
hfont = CreateFont(240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
ohfont=(HFONT)SelectObject(hdc,hfont);
oc=SetTextColor(hdc,0x00C080FF);
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc,r.left+r.right/2-720, r.top+r.bottom/2-120,"最短画图程序",12);
SelectObject(hdc,ohfont);
SetTextColor(hdc,oc);
DeleteObject(hfont);
EndPaint(hWnd, &ps);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
MSG msg = {0};
WNDCLASS wc = {0};
HBRUSH hbrh;
hbrh=CreateSolidBrush(0x00000000);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = hbrh;
wc.lpszClassName = "minwindowsapp";
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
if( FAILED(RegisterClass(&wc)) ) return 1;
if(FAILED(CreateWindow(wc.lpszClassName,
"Minimal Windows Application",
WS_POPUP
------解决思路----------------------
WS_VISIBLE,
0,
0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
0,
0,
hInstance,
NULL)))
return 2;
while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {
DispatchMessage( &msg );
}
DeleteObject(hbrh);
return 0;
}
------解决思路----------------------
网上有很多全局钩子记录键盘信息例子。楼主可以百度!
DLLMain只是windows的动态库。c++的动态库的话是没有的。
windows中为了更好处理线程、进程对动态库的调用,用DLLMain来做初始化、清理操作(当然如果你愿意,如界面的动态库)。
但c++动态库(通信等和系统无关库)他们更愿意封装c接口,或者用_stacall等c++操作符来让调用者做析构。