草庐IT

c++ - 特定资源语言的 LoadAccelerators

coder 2024-06-22 原文

我想打电话LoadAccelerators但对于资源中的特定语言。有办法吗?

最佳答案

我做了一些逆向工程,下面是如何从内存中为特定的 LCID 加载它:

#pragma pack(push, 1) // exact fit - no padding
struct ACCEL_MEM{
    BYTE fVirt;
    BYTE byteReserved;
    WORD wKey;
    WORD wCmd;
    WORD wReserved;
};
#pragma pack(pop)

HACCEL LoadAcceleratorsIndirectWithLCID(UINT nResourceID, LCID lcid)
{
    //Open accelerators table with the 'nResourceID'
    //'nResourceID' = Resource ID to use
    //'lcid' = LCID to load resources for, or NULL to use the one from current thread
    //RETURN:
    //      = HACCEL loaded -- must be removed with DestroyAcceleratorTable(), or
    //      = NULL if error
    ASSERT(nResourceID);

    HACCEL hAccel = NULL;

    HINSTANCE hInst = ::GetModuleHandle(NULL);
    if(hInst)
    {
        //Do we have a LCID?
        if(lcid == NULL)
            lcid = ::GetThreadLocale();

        //Get language ID
        LANGID langid = LANGIDFROMLCID(lcid);

        //Try to load for specified resource
        HRSRC hResource = ::FindResourceEx(hInst, RT_ACCELERATOR, MAKEINTRESOURCE(nResourceID), langid);
        if(hResource == NULL)
        {
            //If failed, use default lcid
            hResource = ::FindResource(hInst, MAKEINTRESOURCE(nResourceID), RT_ACCELERATOR);
        }

        if(hResource)
        {
            HGLOBAL hglb = LoadResource(hInst, hResource);
            if(hglb)
            {
                LPVOID lpsz = LockResource(hglb);
                DWORD dwcbSz = ::SizeofResource(hInst, hResource);
                if(lpsz &&
                    dwcbSz)
                {
                    ACCEL_MEM* pMem = (ACCEL_MEM*)lpsz;

                    //Count items in the table
                    int nCnt = 0;
                    ACCEL_MEM* pTest = pMem;
                    for(;; pTest++)
                    {
                        nCnt++;
                        if(pTest->fVirt & 0x80)
                            break;
                    }

                    //Reserve mem
                    ACCEL* pAccels = new ACCEL[nCnt];

                    //Parse data
                    for(int i = 0; i < nCnt; i++)
                    {
                        pAccels[i].fVirt = pMem[i].fVirt & 0x7f;
                        pAccels[i].key = pMem[i].wKey;
                        pAccels[i].cmd = pMem[i].wCmd;
                    }

                    //Create accel table
                    hAccel = ::CreateAcceleratorTable(pAccels, nCnt);

                    //Free mem
                    delete[] pAccels;
                    pAccels = NULL;
                }
            }
        }
    }

    return hAccel;
}

关于c++ - 特定资源语言的 LoadAccelerators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16975808/

有关c++ - 特定资源语言的 LoadAccelerators的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  4. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  5. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  6. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  7. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  8. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  9. Ruby - 如何在读取文件时跳过/忽略特定行? - 2

    在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?

  10. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

随机推荐