逆向学习-windwos资源操作1

举报
亿人安全 发表于 2023/05/31 22:21:04 2023/05/31
【摘要】 设置图标首先添加一个图标资源可以导入 也可以新建 这里就新建好了随便画画 点击保存保存之后资源文件夹里面会多出两个文件先暂时不用管 继续操作先要用到LoadIcon()函数 可以按F1进行查看详细信息HICON LoadIconA( HINSTANCE hInstance, LPCSTR lpIconName);参数hInstance类型:HINSTANCE模块实例的句柄,其可执行...

设置图标

首先添加一个图标资源


可以导入 也可以新建 这里就新建好了

随便画画 点击保存

保存之后资源文件夹里面会多出两个文件

先暂时不用管 继续操作

先要用到LoadIcon()函数 可以按F1进行查看详细信息

HICON LoadIconA(
  HINSTANCE hInstance,
  LPCSTR    lpIconName
);

参数

hInstance

类型:HINSTANCE

模块实例的句柄,其可执行文件包含要加载的图标。加载标准图标时,此参数必须为NULL

lpIconName

类型:LPCTSTR

要加载的图标资源的名称。或者,该参数可以在低位字中包含资源标识符,在高位字中包含零。使用MAKEINTRESOURCE宏创建此值。

返回值

类型:HICON

如果函数成功,则返回值是新加载图标的句柄。

如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用GetLastError

备注

LoadIcon仅在未加载的情况下加载图标资源;否则,它检索现有资源的句柄。该函数在图标资源中搜索最适合当前显示的图标。图标资源可以是彩色或单色位图。

LoadIcon只能加载其大小符合一个图标SM_CXICONSM_CYICON系统指标值。使用LoadImage函数加载其他尺寸的图标。

LoadIcon第二个参数可以在头文件里面看见

但是光直接写还不行 还是会报错 因为图片ID 实际上的值是整形的 而IDI_ICON1 是LPCWSTR形的 所以需要强转

可以用F12查看一下MAKEINTRESOURCE

相当于这个宏的作用也是进行强转

这样写也是可以的

然后设置图标

试验一下

成功变化

也可以在创建的时候直接改变图标的样子


设置鼠标样式

先导入一个鼠标的光标资源

操作和上面一样

然后保存

方式也都和上面的基本类似只是函数改了一下


同样也可以创建窗口的时候就改变鼠标

#include<Windows.h>
#include<iostream>
#include<CommCtrl.h>
#include"resource.h"
LRESULT CALLBACK WindowProc(   //消息处理函数
    _In_ HWND   hwnd,
    _In_ UINT   uMsg,
    _In_ WPARAM wParam,
    _In_ LPARAM lParam
) {
    static HINSTANCE hInstance = GetModuleHandleW(NULL);
    switch (uMsg)
    {
    case WM_CREATE:
        //MessageBoxW(hwnd, L"窗口创建了", L"提示", MB_OK);
        //添加控件
        CreateWindowW(WC_BUTTON, L"移动窗口", WS_CHILD | WS_VISIBLE, 10, 10, 120, 40, hwnd, (HMENU)0x100, hInstance, 0);
        CreateWindowW(WC_BUTTON, L"获取文本框内容", WS_CHILD | WS_VISIBLE, 10, 60, 120, 40, hwnd, (HMENU)0x101, hInstance, 0);
        CreateWindowW(WC_BUTTON, L"设置文本框内容", WS_CHILD | WS_VISIBLE, 10, 110, 120, 40, hwnd, (HMENU)0x102, hInstance, 0);
        CreateWindowW(WC_BUTTON, L"设置父窗口", WS_CHILD | WS_VISIBLE, 10, 160, 120, 40, hwnd, (HMENU)0x103, hInstance, 0);
        CreateWindowW(WC_EDIT, L"文本框内容", WS_CHILD | WS_BORDER | WS_VISIBLE, 10, 320, 320, 80, hwnd, (HMENU)0x104, hInstance, 0);
        CreateWindowW(WC_BUTTON, L"设置ICON", WS_CHILD | WS_VISIBLE, 10, 220, 120, 40, hwnd, (HMENU)0x105, hInstance, 0);
        CreateWindowW(WC_BUTTON, L"设置鼠标", WS_CHILD | WS_VISIBLE, 10, 420, 120, 40, hwnd, (HMENU)0x106, hInstance, 0);
        break;
    case WM_CLOSE:
        MessageBoxW(hwnd, L"窗口关闭了", L"提示", MB_OK);
        DestroyWindow(hwnd);
        PostQuitMessage(0);
        break;
    case WM_COMMAND:
    {
        WORD ControlId = LOWORD(wParam);
        switch (ControlId)
        {
            case 0x100:
            {
                RECT rect{ 0 };
                GetClientRect(hwnd, &rect);
                int x = rand() % (rect.right - 120);
                int y = rand() % (rect.bottom - 40);
                MoveWindow((HWND)lParam, x, y, 120, 40, TRUE);
                break;
            }
            case 0x101:
            {
                WCHAR buff[100]{ 0 };
                HWND hedit = GetDlgItem(hwnd, 0x104);
                GetWindowTextW(hedit, buff, 100);
                MessageBoxW(hwnd, buff, L"提示", MB_OK);
                break;
            }
            case 0x102:
            {
                /*HWND hedit = GetDlgItem(hwnd, 0x104);
                SetWindowTextW(hedit,0x104,L"SetWindowTextW");*/
                SetDlgItemTextW(hwnd, 0x104, L"SetDlgItemTextW");
                break;
            }
            case 0x103:
            {
                HWND hnote = FindWindowW(NULL, L"无标题 - 记事本");
                SetParent((HWND)lParam, hnote);
                break;
            }
            case 0x105:
            {
                //LPCWSTR
                //MAKEINTRESOURCE
                //LoadIcon(hInstance, (LPCWSTR)IDI_ICON1);
                HICON hicon=LoadIcon(hInstance, MAKEINTRESOURCEW(IDI_ICON1));
                SetClassLongW(hwnd,GCL_HICON,(LONG)hicon);
                break;
            }
            case 0x106:
            {
                
                HCURSOR hcursor = LoadCursorW(hInstance, MAKEINTRESOURCEW(IDC_CURSOR1));
                SetClassLongW(hwnd, GCL_HCURSOR, (LONG)hcursor);
                break;
            }
        }
        break;
​
    }
    default:
        break;
    }
    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPreInstance,
    LPSTR lpCmdeLine,
    int nCmdShow
)
{
    //1.创建一个窗口类
    WNDCLASSW myClass = { 0 };
    myClass.lpszClassName = L"51hook";
    myClass.lpfnWndProc = WindowProc;
    myClass.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));
    //myClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));//设置图标
    myClass.hCursor= LoadCursorW(hInstance, MAKEINTRESOURCEW(IDC_CURSOR1));
    //2.注册窗口类
    RegisterClassW(&myClass);
    //3.创建窗口
    HWND hwindow = CreateWindowW(
        myClass.lpszClassName,
        L"51hook",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        0,
        CW_USEDEFAULT,
        0,
        NULL,
        NULL,
        hInstance,
        0
    );
    //4.显示窗口
    ShowWindow(hwindow, SW_SHOWNORMAL);
​
    //5.获取消息
    MSG msg = { 0 };
    while (GetMessageW(&msg, 0, 0, 0)) {
        DispatchMessageW(&msg);//分发消息给消息处理函数
    }
​
    return 0;
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。