日韩性视频-久久久蜜桃-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图像,还能玩贪吃蛇的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产欧美精品区一区二区三区 | 久久久不卡国产精品一区二区 | 国产污污 | 欧美 日韩 国产一区 | 精品自拍av | 精品日本视频 | 综合av在线 | 欧美又粗又深又猛又爽啪啪九色 | 四虎在线免费视频 | 亚洲www色 | 婷婷国产一区二区三区 | 日韩在线视频在线 | av一区二区三区 | 色吊丝中文字幕 | 宅男午夜在线 | 青青毛片 | 91精品中文字幕 | 色综合天天色 | 少妇流白浆 | 五月天精品 | 日本熟妇一区二区三区 | 456亚洲影院 | 不卡av免费观看 | 污污免费在线观看 | 九色tv | 超污视频网站 | 91色噜噜| 亚洲天堂av免费在线观看 | 福利视频在线看 | 中文字幕有码在线播放 | 玖玖视频国产 | 麻豆精品在线视频 | 久久久精品人妻一区二区三区四 | 亚洲一区av | 日韩中文字幕网站 | 全黄一级男人和女人 | 精品综合久久久久 | 欧美女优一区二区 | 免费观看全黄做爰的视频 | 日韩精品成人一区二区在线 | 污污的视频在线观看 | 韩国伦理在线看 | 亚洲AV成人无码网站天堂久久 | 在线免费观看小视频 | 美国一级大黄一片免费中文 | 日韩免费看片 | www成人在线| 黄色大片aa | 中文字幕在线观看亚洲 | 亚洲免费中文字幕 | 亚洲在线视频免费观看 | 精品国产一级久久 | 亚洲av无码日韩精品影片 | 日韩精品一区二区三区视频在线观看 | 国内自拍在线 | 热久久av | 风流僵尸艳片a级 | 华丽的外出在线 | 精品播放 | 顶级嫩模啪啪呻吟不断好爽 | 天天上天天干 | 中文字幕在线看人 | 免费在线看黄网址 | 天天射天天干天天色 | 99热在线观看精品 | 你懂的网址在线观看 | 日韩二级片 | 国产免费a视频 | 亚洲经典三级 | 精品一区二区三区视频日产 | 黄色大片网站 | 激情av网站 | 庆余年三 | 欧美视频第二页 | 黄色成年人 | 亚洲午夜精品久久 | 少妇一级淫片免费放播放 | 在线色综合 | 六月丁香婷婷激情 | 黄a免费网络 | 午夜激情在线观看 | 欧美精品一区二区三区久久 | 免费看国产精品 | 国产日韩久久 | 网站国产 | 国产v片在线观看 | 日韩啊v| 欧美福利电影 | 欧美a性 | 国产精品suv一区二区三区 | 三上悠亚中文字幕在线播放 | 欧美成人免费大片 | 按摩毛片| 成人午夜免费毛片 | 欧美精品久久久久久久多人混战 | 在线免费亚洲 | 丝袜人妖 | 亚洲人一区二区三区 | 色天使在线视频 |