皮皮网

【八戒夺宝源码】【白猫源码论坛】【源码下载 知道】windowapi源码

来源:源码小源 时间:2024-11-24 22:24:32

1.window api创建一个子窗口
2.api findwindow
3.PostMessageWindowsAPI
4.CallWindowProc基本介绍

windowapi源码

window api创建一个子窗口

       æ²¡æœ‰å…³è”的代码,可直接编译

       #include <windows.h>

       LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

       LRESULT CALLBACK ChildProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

       int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

       {

        static TCHAR szAppName[]=TEXT("test");

        static TCHAR szChild[]=TEXT("child");

        HWND hwnd;

        MSG msg;

        WNDCLASS wndclass;

        wndclass.style=CS_HREDRAW | CS_VREDRAW;

        wndclass.lpfnWndProc=WndProc;

        wndclass.cbClsExtra=0;

        wndclass.cbWndExtra=0;

        wndclass.hInstance=hInstance;

        wndclass.hIcon=LoadIcon(hInstance,IDI_APPLICATION);

        wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);

        wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

        wndclass.lpszMenuName=NULL;

        wndclass.lpszClassName=szAppName;

        if(!RegisterClass(&wndclass))

        {

        return 0;

        }

        wndclass.lpfnWndProc=ChildProc;

        wndclass.lpszClassName=szChild;

        if(!RegisterClass(&wndclass))

        {

        return 0;

        }

       hwnd = CreateWindow(szAppName,TEXT("Test Demo"),

        WS_OVERLAPPEDWINDOW,

        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

        NULL,NULL,hInstance,NULL);

        ShowWindow(hwnd,nShowCmd);

        UpdateWindow(hwnd);

        hwnd = CreateWindow(szChild,TEXT("Child Demo"),

        WS_OVERLAPPEDWINDOW,

        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

        NULL,NULL,hInstance,NULL);

        ShowWindow(hwnd,nShowCmd);

        UpdateWindow(hwnd);

        while(GetMessage(&msg,NULL,0,0))

        {

        TranslateMessage(&msg);

        DispatchMessage(&msg);

        }

        return msg.wParam;

       }

       LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

       {

        switch(message)

        {

        case WM_CREATE:

        return 0;

        case WM_DESTROY:

        PostQuitMessage(0);

        return 0;

        }

        return DefWindowProc(hwnd, message, wParam, lParam);

       }

       LRESULT CALLBACK ChildProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

       {

        switch(message)

        {

        case WM_CREATE:

        return 0;

        case WM_DESTROY:

        PostQuitMessage(0);

        return 0;

        }

        return DefWindowProc(hwnd, message, wParam, lParam);

       }

api findwindow

       HWND FindWindow(

        LPCTSTR lpClassName, // pointer to class name

        LPCTSTR lpWindowName // pointer to window name

       );

       ç¬¬ä¸€ä¸ªå‚数是一个窗口类名.第二个是窗口的文本.就是标题..这些可以用SPY++看到..返回为0.说明你的参数写得有错..所以为0.

PostMessageWindowsAPI

       PostMessage是Windows API中的关键函数,它用于非阻塞地将消息放入消息队列中,确保消息能够传递到与指定窗口关联的线程,即使该线程并未立即处理。其原型为`BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)`,函数参数包括接收消息的八戒夺宝源码窗口句柄(hWnd)、消息类型(Msg)、附加的消息信息(wParam和lParam)。

       hWnd参数可以设定为HWND_BROADCAST,使消息发送给所有顶层窗口,包括不可见的窗口,或者设置为NULL,此时与dwThread标识符相同的白猫源码论坛线程将接收消息。这个函数支持异步操作,调用后立即返回,无需等待线程处理。

       VB中,我们可以利用PostMessage实现游戏挂机,例如,源码下载 知道通过`FindWindow`获取游戏窗口句柄,然后发送WM_LBUTTONDOWN和WM_LBUTTONUP消息,模拟鼠标点击。例如:

       Private Declare Function PostMessage Lib "user" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

       ...

       Dim hWndX As Long

       lpClassName = "游戏窗口的类名"

       lpWindowName = "游戏窗口的标题"

       hWndX = FindWindow(lpClassName, lpWindowName) ' 获取游戏窗口句柄

       Dim wMsg As Long, wParam As Long, lParam As Long

       xx = ' 点击坐标

       yy =

       wMsg = WM_LBUTTONDOWN ' 左键按下

       wParam = 1

       lParam = yy * + xx

       PostMessage hWndX, wMsg, wParam, lParam ' 发送左键按下消息

       Sleep ' 暂停一段时间

       wMsg = WM_LBUTTONUP ' 左键抬起

       wParam = 1

       lParam = yy * + xx

       PostMessage hWndX, wMsg, wParam, lParam ' 发送左键抬起消息

       通过这种方式,即使游戏窗口最小化,也能通过PostMessage实现鼠标在特定位置的asp源码模版点击操作。

CallWindowProc基本介绍

       CallWindowProc 是一个Windows API函数,其主要功能是将接收到的消息传递给指定的窗口过程。这个过程确保了消息在Windows窗口系统中的有效传递,对于窗口操作和响应起到了关键作用。

       其函数原型如下:

        CallWindowProc(WNDPROClpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

       在这里,参数解释如下:

       - lpPrevWndFunc:这是eclipse源码解析指向前一个处理消息的窗口过程的指针,即当前窗口的父窗口或者系统预设的窗口过程。

       - hWnd:窗口句柄,代表了要接收消息的窗口。

       - Msg:消息标识符,表示接收到的消息类型,如WM_PAINT、WM_KEYDOWN等。

       - wParam:附加参数,通常用于传递消息的额外数据,如按键的虚拟键码。

       - lParam:更详细的参数,根据消息类型可能包含更多的数据,如鼠标点击的位置等。

       调用CallWindowProc函数时,系统会首先尝试将消息传递给lpPrevWndFunc指定的窗口过程,如果该过程未处理该消息,那么消息将递归地传递给窗口的父窗口,直到找到能处理该消息的窗口过程或消息到达顶层窗口(如顶级窗口或桌面窗口)。这确保了Windows系统中的所有窗口都能处理各自的消息,从而实现用户界面的交互和响应。