色综合中文综合网_性猛交娇小69hd_久久精品99久久久久久_欧美日韩精品一区二区三区四区 _97视频色精品_国产高清精品久久久久_日日鲁鲁鲁夜夜爽爽狠狠视频97 _国产成人免费视频精品含羞草妖精 _熟女少妇在线视频播放_精品人妻一区二区三区麻豆91 _久久女同性恋中文字幕_一区二区福利视频

正確的「記事本」打開方式:能渲染3D圖像,還能玩貪吃蛇

「記事本」玩出新高度

金磊 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI

渲染3D圖像,一個「記事本」就夠了。

最近,GitHub上一名叫“Kyle Halladay”的小哥,便上傳了這樣一個項目,用記事本來渲染圖像。

效果是這樣的:

立方體旋轉(zhuǎn)、陰影變化,還挺有內(nèi)味的。

還有貪吃蛇效果的:

那么,小哥是如何拿記事本,就做到這些效果的呢?

正確的「記事本」打開方式

據(jù)小哥介紹,所有的輸入和渲染效果,都是在記事本中完成。

在此之前,需要做一些設(shè)置工作。

首先,是將鍵盤事件(Key Event),發(fā)送到正在運行的記事本。

這里就要用到 Visual Studio 提供的一個叫 Spy + + 的工具,可以列出組成給定應(yīng)用程序的所有窗口。

Spy + + 顯示了要找的記事本子窗口是“編輯”窗口。

一旦我知道了這一點,就只需要搞清楚 Win32函數(shù)調(diào)用的正確組合,用來獲得該 UI 元素的 HWND,然后將輸入發(fā)送過去。

得到的 HWND 是這樣的:

HWND?GetWindowForProcessAndClassName(DWORD?pid,?const?char*?className)
{
??HWND?curWnd?=?GetTopWindow(0);?//0?arg?means?to?get?the?window?at?the?top?of?the?Z?order
??char?classNameBuf[256];

??while?(curWnd?!=?NULL){
????DWORD?curPid;
????DWORD?dwThreadId?=?GetWindowThreadProcessId(curWnd,?&curPid);

????if?(curPid?==?pid){
??????GetClassName(curWnd,?classNameBuf,?256);
??????if?(strcmp(className,?classNameBuf)?==?0)?return?curWnd;

??????HWND?childWindow?=?FindWindowEx(curWnd,?NULL,?className,?NULL);
??????if?(childWindow?!=?NULL)?return?childWindow;
????}
????curWnd?=?GetNextWindow(curWnd,?GW_HWNDNEXT);
??}
??return?NULL;
}

一旦拿到了正確的控件 HWND,在記事本的編輯控件中繪制一個字符,便是使用 PostMessage 向它發(fā)送一個 WM char 事件的問題。

接下來,就是建一個內(nèi)存掃描器?(Memory Scanner),這里要用到一個叫做 CheatEngine 的工具。

基本算法如下:

FOR?EACH?block?of?memory?allocated?by?our?target?process
???IF?that?block?is?committed?and?read/write?enabled
???????Scan?the?contents?of?that?block?for?our?byte?pattern
???????IF?WE?FIND?IT
???????????return?that?address

內(nèi)存掃描程序需要做的第一件事,就是遍歷進(jìn)程分配的內(nèi)存。

因為 Windows 上每個64位進(jìn)程的虛擬內(nèi)存范圍是相同的,所以需要制作一個指向地址0的指針,然后使用 VirtualQueryEx 獲取目標(biāo)程序的虛擬地址信息。

將具有相同內(nèi)存屬性的內(nèi)容頁,組織到 MEMORY basic information 結(jié)構(gòu)中,因此,可能是 VirtualQueryEx 為給定地址返回的結(jié)構(gòu)包含超過1頁的信息。

一旦有了第一個 MEMORY basic information 結(jié)構(gòu),在內(nèi)存中進(jìn)行迭代只需要將當(dāng)前結(jié)構(gòu)的 BaseAddress 和 RegionSize 成員添加到一起,并將新地址提供給 VirtualQueryEx 以獲得下一組連續(xù)的頁面。

char*?FindBytePatternInProcessMemory(HANDLE?process,?const?char*?pattern,?size_t?patternLen)
{
??char*?basePtr?=?(char*)0x0;

??MEMORY_BASIC_INFORMATION?memInfo;

??while?(VirtualQueryEx(process,?(void*)basePtr,?&memInfo,?sizeof(MEMORY_BASIC_INFORMATION)))
??{
????const?DWORD?mem_commit?=?0x1000;
????const?DWORD?page_readwrite?=?0x04;
????if?(memInfo.State?==?mem_commit?&&?memInfo.Protect?==?page_readwrite)
????{
??????//?search?this?memory?for?our?pattern
????}

????basePtr?=?(char*)memInfo.BaseAddress?+?memInfo.RegionSize;
??}
}

然后,是在進(jìn)程內(nèi)存中,搜索字節(jié)模式?(Byte Pattern)的工作,此處需要一個叫做 ReadProcessMemory 的工具。

一旦內(nèi)存被復(fù)制到本地可見的緩沖區(qū),搜索字節(jié)模式就很容易了。

char*?FindPattern(char*?src,?size_t?srcLen,?const?char*?pattern,?size_t?patternLen)
{
??char*?cur?=?src;
??size_t?curPos?=?0;

??while?(curPos?<?srcLen){
????if?(memcmp(cur,?pattern,?patternLen)?==?0){
??????return?cur;
????}

????curPos++;
????cur?=?&src[curPos];
??}
??return?nullptr;
}
char*?FindBytePatternInProcessMemory(HANDLE?process,?const?char*?pattern,?size_t?patternLen)
{
??MEMORY_BASIC_INFORMATION?memInfo;
??char*?basePtr?=?(char*)0x0;

??while?(VirtualQueryEx(process,?(void*)basePtr,?&memInfo,?sizeof(MEMORY_BASIC_INFORMATION))){
????const?DWORD?mem_commit?=?0x1000;
????const?DWORD?page_readwrite?=?0x04;
????if?(memInfo.State?==?mem_commit?&&?memInfo.Protect?==?page_readwrite){
??????char*?remoteMemRegionPtr?=?(char*)memInfo.BaseAddress;
??????char*?localCopyContents?=?(char*)malloc(memInfo.RegionSize);

??????SIZE_T?bytesRead?=?0;
??????if?(ReadProcessMemory(process,?memInfo.BaseAddress,?localCopyContents,?memInfo.RegionSize,?&bytesRead)){
????????char*?match?=?FindPattern(localCopyContents,?memInfo.RegionSize,?pattern,?patternLen);

????????if?(match){
??????????uint64_t?diff?=?(uint64_t)match?-?(uint64_t)(localCopyContents);
??????????char*?processPtr?=?remoteMemRegionPtr?+?diff;
??????????return?processPtr;
????????}
??????}
??????free(localCopyContents);
????}
????basePtr?=?(char*)memInfo.BaseAddress?+?memInfo.RegionSize;
??}
}

需要注意的是,記事本將屏幕上的文本緩沖區(qū)作為 UTF-16數(shù)據(jù)存儲,因此提供給 FindBytePatternInMemory ()的字節(jié)模式也必須是 UTF-16。

更多細(xì)節(jié)描述,可以參考文末的參考鏈接。

更多的「記事本」玩法

當(dāng)然,關(guān)于記事本的別樣玩法,還有好多。

例如,有拿記事本完成「快排」的可視化。

還有用記事本自制繪圖軟件的。

那么,你還有更炫酷的「記事本」玩法嗎?

歡迎在評論區(qū)留言推薦~

參考鏈接

https://github.com/khalladay/render-with-notepadhttp://kylehalladay.com/blog/2020/05/20/Rendering-With-Notepad.htmlhttps://www.bilibili.com/video/BV1v4411e7Gy?from=search&seid=50634434912662370https://www.bilibili.com/video/BV1os411u7vD?from=search&seid=11201980142804134991

版權(quán)所有,未經(jīng)授權(quán)不得以任何形式轉(zhuǎn)載及使用,違者必究。
www.久久久久久| 亚洲午夜色婷婷在线| 黑人玩弄人妻一区二区三区| 欧美一区二区三区喷汁尤物| 内射一区二区三区| 欧美激情精品久久久久| 天堂av中文字幕| 欧美少妇一区| 天堂av免费看| 亚洲女同一区二区| 午夜免费福利视频在线观看| 日韩欧美一区二区视频| 久久无码人妻一区二区三区| 亚洲白拍色综合图区| 日韩欧美三级视频| 日韩在线视频观看| www视频在线| 青青成人在线| 一区二区视频在线| 日韩精品电影一区二区| 欧美大片va欧美在线播放| 日韩一级免费毛片| 中国 免费 av| 欧美亚洲高清一区| 日韩精品――中文字幕| 96精品久久久久中文字幕| www激情久久| 激情图片中文字幕| 一本一本久久a久久精品综合小说| 亚洲一区二区色| 欧美日韩成人一区二区三区| 亚洲国产色一区| 在线免费看黄视频| 2019精品视频| av一二三不卡影片| 免费看三级黄色片| 九九热精品视频国产| 久久99久久99| 小泽玛利亚视频在线观看| 亚洲男人天堂手机在线| 少妇高潮久久久| av在线播放天堂| 日韩三级av在线播放| 一级黄色a视频| 午夜精品美女久久久久av福利| 欧美性极品少妇精品网站| 精品无码黑人又粗又大又长| 91手机在线观看| 亚洲精品乱码久久久久久日本蜜臀| 中文字幕被公侵犯的漂亮人妻| 97婷婷涩涩精品一区| 成人午夜大片免费观看| 免费不卡av网站| 欧美噜噜久久久xxx| 岛国一区二区三区| av不卡中文字幕| 91国产美女视频| 99九九99九九九视频精品| 亚洲一区二区三区四区av| 海角国产乱辈乱精品视频| 99精品国产视频| 全黄一级裸体片| 成人av资源在线播放| 亚洲欧美一区二区三区久本道91| 日本福利片在线观看| 国产传媒一区二区| 一本一道久久a久久精品| 亚洲欧美偷拍视频| 日韩欧美亚洲日产国产| 日韩无一区二区| 日韩在线观看视频一区| 久久综合久久色| 欧美日韩在线电影| 国产精品自偷自拍| 激情伊人五月天| 上原亚衣av一区二区三区| 国产福利一区二区| 九色porny自拍视频| 成人网在线免费看| 一本色道**综合亚洲精品蜜桃冫| 国产日韩在线免费观看| 99re在线视频观看| 色视频一区二区| 99久久国产热无码精品免费| 日本成年人网址| 精品自在线视频| 国产欧美视频一区二区| 欧美成人国产精品高潮| 亚洲国产精品久久久久久女王| 欧美精品一区视频| 国产一区二区三区不卡在线观看| 亚洲一区二区观看| 国产女主播一区二区| 欧美挠脚心视频网站| 国产一级片毛片| 欧美大片免费播放| 日韩视频在线免费| 国产精品三级久久久久三级| 亚洲伊人成人网| 国产va亚洲va在线va| 欧美精品情趣视频| 亚洲精品免费在线播放| 91成人一区二区三区| 成年人在线观看视频免费| 992tv成人免费影院| 亚洲成国产人片在线观看| 91麻豆成人精品国产免费网站| 国产美女三级视频| 欧美一级淫片videoshd| 亚洲第一在线综合网站| 国产按摩一区二区三区| 一起草最新网址| 亚洲综合日韩中文字幕v在线| 欧美日韩精品一区二区天天拍小说 | 久久国产精彩视频| 亚洲天堂2014| 精品久久无码中文字幕| 精品伦一区二区三区| 国语精品免费视频| 亚洲欧美国产va在线影院| 国产香蕉久久精品综合网| 无码免费一区二区三区| 中国黄色片免费看| 97免费资源站| 日韩精品亚洲视频| 亚洲乱码在线观看| 国产精品91av| 蜜桃av色综合| 久久资源免费视频| 欧美性猛交xxxxx免费看| 美国一区二区三区在线播放 | 日韩精品国产精品| 先锋影音av在线| 国产综合久久久久| 欧美videossexotv100| 99久久综合国产精品| 黄色片中文字幕| 国产精欧美一区二区三区白种人| 国产 高清 精品 在线 a| 日韩成人中文字幕在线观看| 国产精品久久久久永久免费观看 | 菠萝菠萝蜜网站| 色综合久久av| 91国内免费在线视频| 91精品国产综合久久香蕉的特点 | 国产精品久久久久影院色老大| 精品国产av鲁一鲁一区| 成人免费网站黄| 特级西西444| 国产精品女主播视频| 亚洲第一免费播放区| 亚洲人成影院在线观看| 日韩在线一二三区| 日韩少妇裸体做爰视频| 欧美日韩一区二区区| 亚洲在线播放电影| 国产精品成人一区| 亚洲精品自拍第一页| 亚洲成a人在线观看| 国产乱码精品一区二区三区av | 日韩亚洲在线观看| 色婷婷亚洲精品| 91一区二区三区在线观看| 国内毛片毛片毛片毛片| 国产精品视频一区二区在线观看| av观看免费在线| 日本精品一区二区| 国产精品第10页| 在线观看中文字幕亚洲| 日本大香伊一区二区三区| aa级大片欧美| 五月色婷婷综合| 日韩欧美激情视频| 欧美熟妇精品黑人巨大一二三区| 日韩一级性生活片| 国产乱码精品一区二区三区日韩精品| 久久久精品一区| 欧美一级日韩一级| 一区二区三区四区五区视频在线观看 | 一本到不卡免费一区二区| 91亚洲资源网| 日韩电影在线看| 在线观看免费视频一区| 久久久99999| 免费黄色在线播放| av免费播放网址| 亚洲精品久久区二区三区蜜桃臀| 国产日韩欧美电影在线观看| 九九热这里只有精品免费看| 欧美不卡一二三| 欧美午夜片欧美片在线观看| 国产午夜精品理论片a级大结局| 香蕉视频911| 中文字幕 欧美激情| 911国产在线| 一边摸一边做爽的视频17国产| 日韩黄色片视频| 女同性恋一区二区| 欧美日韩最好看的视频| 91精品啪在线观看麻豆免费 | 日本不卡一区二区三区高清视频| 亚洲 日本 欧美 中文幕| 九九精品视频免费| 精品人妻在线视频| 怡红院亚洲色图| 国产自产在线视频| 久久精品国产精品亚洲精品色 | 亚洲国产91色在线| 欧美少妇一区二区| 亚洲成人免费在线| 中文字幕第一区综合| 波多野结衣精品在线| 精品亚洲aⅴ乱码一区二区三区| 亚洲成人av综合| 中文字幕在线播出| 中文字幕黄色片| 国产一级久久久| 日本精品在线免费观看| 日本成人免费视频| 青青草福利视频| 中文字幕人妻一区二区三区| 亚欧精品在线视频| 999精彩视频| 精品视频无码一区二区三区| 国产真人做爰毛片视频直播 | aaaa黄色片| 久久久久久国产精品日本| www.色欧美| 国产乱女淫av麻豆国产| 亚洲成人天堂网| www.涩涩涩| 亚洲国产高清av| 国产九九在线视频| 欧美黑人又粗又大又爽免费| 国产成人无码一二三区视频| 亚洲国产精品久久久久爰色欲| 少妇人妻在线视频| 日韩伦理在线免费观看| 日韩中字在线观看| 国产91xxx| 亚洲爆乳无码专区| www黄色在线| 999在线观看| 无码人妻少妇色欲av一区二区| 久久精品无码一区二区三区毛片| 五月天国产视频| 亚洲黄色小说在线观看| 中国极品少妇videossexhd| 国产精品入口麻豆| 伊人网伊人影院| 国产视频精品免费| 国产污视频在线看| 午夜久久久久久久久久影院| 中文字幕+乱码+中文字幕明步| 91无套直看片红桃| www.精品视频| 蜜臀久久99精品久久久画质超高清 | 高h放荡受浪受bl| 狂野欧美一区| 国产精品12区| 久久这里只有精品视频网| 亚洲人在线观看视频| 日本亚洲视频在线| 国产精品一区二区免费不卡 | 波多野结衣办公室双飞| 51调教丨国产调教视频| 农村老熟妇乱子伦视频| 久久久久无码精品国产| www.久久久久久久| 精品国产伦一区二区三区| 人人妻人人澡人人爽久久av| 美日韩一区二区| 成人avav在线| 亚洲欧洲无码一区二区三区| 亚洲v中文字幕| 欧美精品一二三| 日韩av在线直播| 欧美人在线观看| 国产美女久久精品| 久久综合伊人77777麻豆| 亚洲区成人777777精品| 九九热在线免费| 亚洲最大的黄色网| 在线观看美女av| 一级特黄免费视频| 性插视频在线观看| 久久电影网站中文字幕| 99视频一区二区| 一区二区三区在线免费视频 | zzijzzij亚洲日本成熟少妇| 欧美专区在线观看| 九色91国产| 日韩中字在线观看| 国产草草浮力影院| 国产精品不卡av| 精品女同一区二区三区| 国产成人午夜高潮毛片| 亚洲精品成人天堂一二三| 777a∨成人精品桃花网| 精品国产一区久久久| 成人精品一区二区三区| 正在播放91九色| 午夜免费看毛片| 黄色香蕉视频在线观看| 91国偷自产中文字幕久久| 精品一区二区三区免费毛片爱| 亚洲国产精品传媒在线观看| 欧美优质美女网站| 最近2019中文字幕mv免费看 | 天堂在线免费观看视频| 亚洲日本在线播放| 国产日本欧洲亚洲| 在线视频你懂得一区| 综合欧美国产视频二区| 国产主播欧美精品| 久久久久久久香蕉| 少妇饥渴放荡91麻豆| 无码人妻精品一区二区| 精品一区二区在线观看| 一区二区高清在线| 亚洲激情久久久| 国产精品成熟老女人| 懂色av一区二区三区四区五区| 污污视频在线免费| 欧美a∨亚洲欧美亚洲| 麻豆成人av在线| 亚洲国产成人porn| 国产一区二区精品丝袜| 91免费观看| 日本在线观看a| h色网站在线观看| 日本视频在线一区| 亚洲综合一区在线| 国产一区二区精品丝袜| 国产厕所精品在线观看| 中文字幕一区二区三区四区在线视频| 国产探花在线免费观看| 视频一区视频二区在线观看| 亚洲视频精选在线| 亚洲精品综合精品自拍| 91在线精品播放| 日本成人黄色网| 中文字幕一区二区三区手机版 | 日韩一级理论片| 日本一区二区三区四区五区| 国产一区二区看久久| 色综合婷婷久久| 久久久亚洲成人| 自拍偷拍亚洲色图欧美| 成人无码av片在线观看| 午夜视频在线播放| 性久久久久久久| 欧美大片免费观看| 一级一片免费播放| 乐播av一区二区三区| 久久精品麻豆| 成人永久看片免费视频天堂| 欧美三日本三级三级在线播放| 国产69精品久久久久久| av免费观看大全| 国产一级特黄视频| www.日韩大片| 亚洲第一视频网| 国产一级特黄a大片99| 91高清国产视频| 一二区在线观看| 亚洲人成伊人成综合网小说| 精品国产一区av| 一本—道久久a久久精品蜜桃| 国产123在线| 久久精品av麻豆的观看方式| 日本高清视频一区二区| 国产成人一区三区| 性刺激的欧美三级视频| 国产毛片毛片毛片毛片毛片| 亚洲日本护士毛茸茸| 欧美第一页在线| 国产人妻777人伦精品hd| 成人免费看片98欧美| 久久久精品2019中文字幕之3| 亚洲欧洲视频在线| 欧美刺激脚交jootjob| 久久婷婷综合激情| 国产一区二区麻豆| 鲁一鲁一鲁一鲁一av| 欧美一区二区私人影院日本| 精品国产制服丝袜高跟| 不卡一区二区三区视频| 亚洲视频 中文字幕| 人妻无码中文字幕| 欧美日韩国产bt| 成人一区二区在线| 国产网站无遮挡| 久久最新视频| 国产乱了高清露脸对白| 91国产在线免费观看| 激情av中文字幕| 石原莉奈在线亚洲三区| 欧美一卡二卡在线| 欧美lavv| 538国产视频| 在线观看日韩羞羞视频| 亚洲一区二区三区四区在线播放| 中文写幕一区二区三区免费观成熟| 亚洲免费视频网| 欧美三级在线视频| 黑人中文字幕一区二区三区| 69夜色精品国产69乱| 国产午夜三级一区二区三| 欧美猛交ⅹxxx乱大交视频|