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

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

「記事本」玩出新高度

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

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

最近,GitHub上一名叫“Kyle Halladay”的小哥,便上傳了這樣一個(gè)項(xiàng)目,用記事本來(lái)渲染圖像。

效果是這樣的:

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

還有貪吃蛇效果的:

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

正確的「記事本」打開(kāi)方式

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

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

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

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

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

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

得到的 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,在記事本的編輯控件中繪制一個(gè)字符,便是使用 PostMessage 向它發(fā)送一個(gè) WM char 事件的問(wèn)題。

接下來(lái),就是建一個(gè)內(nèi)存掃描器?(Memory Scanner),這里要用到一個(gè)叫做 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)存。

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

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

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

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)的工作,此處需要一個(gè)叫做 ReadProcessMemory 的工具。

一旦內(nèi)存被復(fù)制到本地可見(jiàn)的緩沖區(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ù)存儲(chǔ),因此提供給 FindBytePatternInMemory ()的字節(jié)模式也必須是 UTF-16。

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

更多的「記事本」玩法

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

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

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

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

歡迎在評(píng)論區(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日本高清视频| 精品国精品国产尤物美女| 黄色在线免费播放| 国产一区二区三区四区在线观看| 午夜精品一区二区三区在线播放| 一区二区不卡视频在线观看| 91看片淫黄大片91| 亚洲视频精品在线| 精品一区二区三区视频在线观看| 亚洲一区二区三| 精品人妻无码一区二区三区蜜桃一| 欧美高清视频在线播放| 国产艳俗歌舞表演hd| **性色生活片久久毛片| 国产精品久久久久久久久久精爆| 不卡影院一区二区| 欧美一级专区免费大片| 精品自拍偷拍视频| 欧美一区二粉嫩精品国产一线天| 日韩特黄一级片| 国产黑人绿帽在线第一区| 色综合中文综合网| 国产综合久久久久影院| www欧美在线| 男操女免费网站| 欧美黑人国产人伦爽爽爽| 久久性天堂网| 男人c女人视频| 亚洲精品你懂的| 中文字幕乱码一区| 欧美一区二区.| 国产一级18片视频| 青青草成人在线| 在线一区二区三区四区五区 | 日韩电影免费在线| 日韩中文字幕免费| 麻豆一区二区三区| 日韩一级免费在线观看| 久久久久久99| 久久精品日产第一区二区三区乱码| 久久艹在线视频| 日韩一级高清毛片| 亚洲专区一二三| 免费观看黄色av| 青娱乐一区二区| 日韩一级片在线观看| 亚洲精品国产精| 亚洲最新免费视频| 伊人久久亚洲综合| 2025中文字幕| 国产精品亚洲精品| 日韩精品高清视频| 日韩欧美一级二级| 一本久道久久综合中文字幕 | 国产区亚洲区欧美区| 色爱区综合激月婷婷| 精品久久国产视频| 一区二区三区一级片| 亚洲成人1234| 亚洲男人第一天堂| 欧美野外猛男的大粗鳮| 成人aa视频在线观看| 男人的天堂一区二区| 成人在线电影网站| 国内视频一区二区| 日韩女优av电影| 懂色av中文字幕一区二区三区| 日韩最新av在线| aaa亚洲精品| 天天爽夜夜爽人人爽| 又大又硬又爽免费视频| 国产一区二区网站| www.色婷婷.com| 日韩国产在线观看| 蜜桃久久一区二区三区| 亚洲av无码国产精品麻豆天美| 欧美一区二区三区…… | 亚洲黄色av女优在线观看| 国产男男gay体育生白袜| 我要看一级黄色大片| 欧美精品自拍偷拍| 欧美日韩一区二区三区四区五区六区| 亚洲毛片一区二区| 中文字幕一区二区人妻视频| 色播五月综合| 国产精品欧美在线| 91福利国产成人精品照片| 精品乱子伦一区二区| 亚洲国产精品第一页| 亚洲美女性囗交| 色黄视频免费看| 无码国产精品一区二区免费式直播| 日韩aⅴ视频一区二区三区| 国产亚洲精品美女| 2023国产一二三区日本精品2022| 少妇无套高潮一二三区| 青青草综合在线| 国产精品免费在线免费| 99免费在线视频| 日本一区视频在线| 在线免费观看日本一区| 亚洲自拍一区在线观看| 在线观看亚洲大片短视频| 精选一区二区三区四区五区| 精品无人区太爽高潮在线播放| 久久久精品欧美丰满| 少妇人妻一区二区| 成人97人人超碰人人99| 亚洲永久免费av| 欧美xxxx老人做受| 国产91精品青草社区| 九色91在线视频| av噜噜色噜噜久久| 午夜精品久久久久久99热| 欧美日本在线观看| 亚洲欧美日韩一区二区| 亚洲av成人精品毛片| 国产情侣在线视频| 给我看免费高清在线观看| 人妻激情偷乱频一区二区三区 | 国产精品不卡在线| 免费在线黄色片| 亚洲人成77777| 久久一区二区精品| 国产区一区二区三区| 国产偷亚洲偷欧美偷精品| 日韩欧美在线免费观看| 亚洲啪啪综合av一区二区三区| 欧美日韩亚洲高清| 久久九九全国免费精品观看| 肥熟一91porny丨九色丨| 欧美 国产 综合| 一级片视频免费看| 91香蕉在线视频| 中文字幕在线播| 欧美极品视频在线观看| 中出视频在线观看| 国产精品99久久免费黑人人妻| 日韩五码在线观看| 亚洲一区免费看| 欧美日韩高清一区二区三区| 日本不卡不码高清免费观看| 中文人妻一区二区三区| 清纯唯美一区二区三区| 日韩高清dvd| 国产一区一区三区| 久久久综合亚洲91久久98| 99久久免费国| 成人激情视频在线观看| 中文字幕中文字幕99| 欧美xxxx黑人xyx性爽| 91网页版在线| 国产一级揄自揄精品视频| 精品久久久久亚洲| 午夜影院福利社| 午夜影院免费观看视频| www.日本高清| 一级日本黄色片| 色哟哟精品观看| 日本一级二级视频| 日韩一区欧美二区| 亚洲精品视频专区| 变态另类ts人妖一区二区| 麻豆传媒网站在线观看| 成人在线国产精品| 色婷婷**av毛片一区| 久久久噜噜噜久久久| 亚洲直播在线一区| 色综合久综合久久综合久鬼88| 久久99国产精品久久久久久久久| 亚洲美女在线视频| 欧美专区中文字幕| 青青青国产在线视频| www.国产一区二区| 欧美伊人精品成人久久综合97| 亚洲iv一区二区三区| 野战少妇38p| 蜜臀久久精品久久久久| 无码一区二区三区在线观看| 欧美日韩在线观看一区二区 | 国产欧美综合在线| 国产性色一区二区| 国产va免费精品高清在线| 97中文字幕在线观看| 国产欧美久久久| 欧美性三三影院| 成人夜晚看av| 欧美成熟毛茸茸复古| 中文字幕一区二区中文字幕 | 亚洲综合20p| 国产一区二区视频在线观看免费| 国产精品theporn动漫| 在线 丝袜 欧美 日韩 制服| 日本xxxx免费| 久久免费精品视频| www青青草原| 欧美一区二区公司| 亚洲欧美日本在线| 亚洲日韩第一页| 国产999精品久久久| 欧美视频在线观看网站| 日韩网站在线播放| 99久久国产热无码精品免费| 亚洲一级片在线观看| 久久这里只精品最新地址| av爱爱亚洲一区| 欧美综合欧美视频| 97在线看免费观看视频在线观看| 91精品国产丝袜白色高跟鞋| 日韩欧美激情在线| 久久久免费精品| 成人黄色av片| 中文字幕在线观看第二页| 久久艹这里只有精品| 成人免费直播live| 天天干天天操天天玩| 欧美日韩午夜视频| 波多野结衣视频网址| 亚洲精品大片www| 欧美成人性生活| 欧洲精品在线播放| 国产精品伊人久久| 亚洲精品www久久久| 日韩一区二区福利| 精品综合久久| 国产黄页在线观看| 色哟哟一一国产精品| 欧美激情国内自拍| 青青成人在线| 国产精品久久久久91| 97精品国产97久久久久久粉红| 国产精品jizz| 欧美在线观看视频一区二区三区| 久久久久亚洲av片无码v| 国产一级二级视频| 日本不卡一区二区三区在线观看| av地址在线观看| www.色国产| 欧美大肥婆大肥bbbbb| 午夜激情福利电影| 91久久久久久久久久久久| 午夜视频一区在线观看| 一本色道久久综合亚洲精品婷婷 | 日韩美女黄色片| 国产在线成人精品午夜| 国产自产高清不卡| 日韩欧美国产精品| 911国产网站尤物在线观看| 精品亚洲一区二区三区四区| 国产日韩欧美综合在线| 色乱码一区二区三在线看| 成人av一区二区三区在线观看| 国产精品家庭影院| 91传媒视频在线观看| 影音先锋亚洲天堂| 性久久久久久久久久久| 女教师高潮黄又色视频| 麻豆国产精品官网| 亚洲国产精品嫩草影院久久| 可以直接看的无码av| 国产日韩欧美亚洲| 亚洲制服欧美久久| 激情文学综合插| 久久久国产视频91| 黄色a一级视频| 精品中文字幕av| 风间由美性色一区二区三区 | 欧美一区二区女人| 欧美日韩精品免费在线观看视频| 狠狠干一区二区| 欧美日韩一区二区区| 亚洲美女偷拍久久| 两女双腿交缠激烈磨豆腐| 中文无字幕一区二区三区| 欧美体内谢she精2性欧美| www插插插无码视频网站| 国产一区二区三区四区五区美女| 这里只有精品视频在线| 国产精品免费一区二区三区观看 | 男人操女人逼免费视频| 国产一区二区精品久久99| 亚洲va久久久噜噜噜久久狠狠| 亚洲欧洲另类国产综合| 国产精品亚洲自拍| 捆绑变态av一区二区三区| 日日夜夜精品网站| 最新不卡av在线| 三上悠亚av一区二区三区| 国产精品九九九九九| 中文字幕一区二区三区四区不卡| 超碰97人人人人人蜜桃| 天天综合天天色| xxxx性欧美| 精品无码一区二区三区蜜臀| 久久综合久久鬼色中文字| 91免费高清视频| 91精品人妻一区二区| 成人高清在线视频| 国产成人在线播放| 91动漫免费网站| 亚洲成人精品在线观看| 黑人巨茎大战欧美白妇| 亚洲国产精华液网站w| 日韩a∨精品日韩在线观看| 韩日精品视频一区| 成年人午夜视频| 亚洲成a人v欧美综合天堂下载| 欧美又粗又长又爽做受| 国产三级欧美三级日产三级99| 男人插女人视频在线观看| 欧美激情一区二区在线| 国产精品国产一区二区| 亚洲一卡二卡在线观看| 国产免费一区二区三区香蕉精| 国产乱淫av免费| 日韩欧美精品三级| 四虎影院一区二区三区| 国产a区久久久| 资源网第一页久久久| 青青草成人在线观看| 成人久久久久久久| 亚洲一区二区视频在线播放| 久久综合伊人77777蜜臀| 久久久水蜜桃av免费网站| 东京热加勒比无码少妇| 亚洲1区2区3区视频| 日韩精品在线一区| 性猛交╳xxx乱大交| 日韩精品国产精品| 国产日韩二区| 国产黄色片在线免费观看| 欧美成人精品一区| 超碰在线播放97| 蜜桃视频成人| 91国产成人在线| www.亚洲天堂.com| 那种视频在线观看| 久国内精品在线| 国产精品污www在线观看| 欧美一区二区三区成人精品| 国产欧美最新羞羞视频在线观看| 一区二区国产欧美| 久久草.com| 亚洲6080在线| 久久久久成人片免费观看蜜芽| 最新日韩中文字幕| japanese国产| 樱空桃在线播放| 日韩精品福利在线| 国产精品黄色影片导航在线观看| 密臀av一区二区三区| 一区二区三区精品久久久| 日本xxx在线播放| 91久久精品美女| 第一福利永久视频精品| 国产精品黄色大片| 国产精品日韩欧美大师| 久久日韩粉嫩一区二区三区| www.四虎在线| 国产女人精品视频| 国产99久久久国产精品潘金网站| 欧美一区二区视频17c| 精品视频在线视频| 男女av免费观看| 日韩av在线免费观看一区| 特级西西人体高清大胆| 少妇真人直播免费视频| 这里只有精品999| 福利一区二区在线| 福利二区91精品bt7086| 中文字幕亚洲情99在线| 国产66精品久久久久999小说| 在线播放国产精品| 999国产在线| 国产精品人人爽人人爽| 国产一国产二国产三| 久久99蜜桃精品| 日韩欧美a级成人黄色| 久久久极品av| 日本一区二区三区视频在线观看 | 久久99精品国产99久久| 亚洲欧美日韩精品一区| 久久精品www| 国内精品免费**视频| 在线视频亚洲一区| 久久久久久网址| 亚洲第一精品夜夜躁人人躁| 欧美性jizz18性欧美| 久久精品视频导航| 亚洲一区三区| 东方伊人免费在线观看| 日韩av一二三| 91成人免费在线视频| 欧美在线一级va免费观看| 国产av国片精品| 国产在线观看成人| 国产91对白在线观看九色| 777亚洲妇女| 91免费高清视频| 国产91精品最新在线播放| 一区二区三区精品国产| 国产18无套直看片| 经典三级在线一区| 欧美一区二区在线看| 91影视免费在线观看| 精品人妻人人做人人爽夜夜爽|