日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab的开方算法_正确的「记事本」打开方式:能渲染3D图像,还能玩贪吃蛇

發布時間:2025/3/19 循环神经网络 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab的开方算法_正确的「记事本」打开方式:能渲染3D图像,还能玩贪吃蛇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

效果是這樣的:

立方體旋轉、陰影變化,還挺有內味的。

還有貪吃蛇效果的:

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

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

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

在此之前,需要做一些設置工作。

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

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

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

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

得到的 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 orderchar 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 向它發送一個 WM char 事件的問題。

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

基本算法如下:

FOR EACH block of memory allocated by our target processIF that block is committed and read/write enabledScan the contents of that block for our byte patternIF WE FIND ITreturn that address

內存掃描程序需要做的第一件事,就是遍歷進程分配的內存。

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

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

一旦有了第一個 MEMORY basic information 結構,在內存中進行迭代只需要將當前結構的 BaseAddress 和 RegionSize 成員添加到一起,并將新地址提供給 VirtualQueryEx 以獲得下一組連續的頁面。

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;} }

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

一旦內存被復制到本地可見的緩沖區,搜索字節模式就很容易了。

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;} }

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

更多細節描述,可以參考文末的參考鏈接。

更多的「記事本」玩法

當然,關于記事本的別樣玩法,還有好多。

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

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

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

歡迎在評論區留言推薦~

參考鏈接

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

—完—

@量子位 · 追蹤AI技術和產品新動態

深有感觸的朋友,歡迎贊同、關注、分享三連?'?' ? ?

總結

以上是生活随笔為你收集整理的matlab的开方算法_正确的「记事本」打开方式:能渲染3D图像,还能玩贪吃蛇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲美女精品 | 午夜写真片福利电影网 | 五月伊人网| 老司机久久精品视频 | 一本色道久久综合狠狠躁的推荐 | 亚洲色图日韩精品 | 91在线观看网站 | 亚洲欧美在线免费观看 | 精品一区二区三区四区五区 | 免费欧美视频 | av在线网址观看 | 青青草国产成人av片免费 | 亚洲一级特黄毛片 | 91蝌蚪91密月 | 久久特黄| 成人欧美一区二区 | 一品毛片 | 伊人精品视频 | 天堂av免费 | 亚洲电影中文字幕 | 亚洲精品视频一区 | 午夜天堂 | 国产精品免费久久 | 成人av免费在线看 | 国产精品美女久久久 | 尤物av无码色av无码 | 亚洲精品一区二区 | 欧美日韩在线二区 | 第五色婷婷 | 福利视频在线 | www.五月天com | 香蕉视频污在线观看 | jizz久久| 国产精品一线二线三线 | jzzijzzij亚洲成熟少妇在线观看 久久久精品人妻一区二区三区 | 天天舔天天爱 | 91热热 | 91网站永久免费看nba视频 | 日本韩国中文字幕 | 无遮挡的裸体按摩的视频 | 亚洲精品免费在线观看 | 国产视频一区二区三区在线观看 | 欧美成人一区二区在线 | 又污又黄的网站 | 自拍第一区 | 欧美福利片在线观看 | 成人影视在线播放 | 黄色在线观看国产 | 国产成人免费电影 | 美女视频黄是免费 | 黄视频网站免费看 | 亚洲黄色免费电影 | 综合色天天 | 国产综合无码一区二区色蜜蜜 | 亚洲第一伊人 | 欧美丰满老妇 | 欧美激情免费视频 | 日本激情视频在线观看 | 日韩一区二区视频在线观看 | 欧美色综合 | 求一个黄色网址 | 视频一区二区视频 | 黄色片在线免费观看 | 视频在线观看一区二区三区 | 和美女啪啪 | 日韩三级视频在线播放 | 精品国产一区二区三区久久久久久 | 精品久久久久久久久久岛国gif | 九色亚洲| 欧美俄罗斯乱妇 | 日韩三级中文 | 日本黄色美女视频 | 美女爱爱视频 | 男女国产精品 | 夜夜免费视频 | 一级特黄aa| 美女被草 | 天堂资源在线播放 | 91精品国产91久久久久久久久久久久 | 欧美激情在线一区 | 欧美激情亚洲色图 | 国产美女无遮挡免费视频 | 国产成人自拍视频在线观看 | 在线观看免费成人 | 国产乱人乱偷精品视频 | 一本黄色片 | 亚洲无码一区二区三区 | 青娱乐国产在线 | 精品福利一区 | 无码人妻一区二区三区免费 | av五月| 绯色av蜜臀vs少妇 | 黄色片久久久 | 性福宝av | 亚洲精品18p | 一本在线免费视频 | 欧美黄色免费大片 | 免费国产黄| 国产做爰视频免费播放 |