NOTEPAD!NPCommand函數分析之comdlg32!GetSaveFileNameW--windows記事本源代碼分析

第一部分:

kd> kc

USER32!InternalCallWinProc
USER32!UserCallDlgProcCheckWow
USER32!DefDlgProcWorker
USER32!SendMessageWorker
USER32!InternalCreateDialog
USER32!InternalDialogBox
USER32!DialogBoxIndirectParamAorW
USER32!DialogBoxIndirectParamW
USER32!DialogBoxIndirectParamW_wrapper
comdlg32!NewGetFileName
comdlg32!NewGetSaveFileName
comdlg32!GetFileName
comdlg32!GetSaveFileNameW
NOTEPAD!NPCommand
NOTEPAD!NPWndProc
USER32!InternalCallWinProc
USER32!UserCallWinProcCheckWow
USER32!DispatchClientMessage
USER32!__fnDWORD
ntdll!KiUserCallbackDispatcher
nt!KiCallUserMode
nt!KeUserModeCallback
win32k!SfnDWORD
win32k!xxxSendMessageToClient
win32k!xxxSendMessageTimeout
win32k!xxxSendMessage
win32k!xxxTranslateAccelerator
win32k!NtUserTranslateAccelerator
nt!_KiSystemService
SharedUserData!SystemCallStub
ntdll!KiUserCallbackDispatcher
USER32!NtUserTranslateAccelerator
NOTEPAD!WinMain
NOTEPAD!WinMainCRTStartup
kernel32!BaseProcessStart

第二部分:

??????????? //
// Do common dialog to save file
//

??????????? if (GetSaveFileName(&OFN))
{


第三部分:


/* ** Notepad command proc - called whenever notepad gets WM_COMMAND
message.? wParam passed as cmd */
INT NPCommand(
HWND???? hwnd,
WPARAM?? wParam,
LPARAM?? lParam )
{
HWND???? hwndFocus;
LONG???? lSel;
TCHAR??? szNewName[MAX_PATH] = TEXT("");????? /* New file name */
FARPROC? lpfn;
LONG???? style;
DWORD??? rc;
RECT???? rcClient;

??? switch (LOWORD(wParam))
{

??????? case M_SAVEAS:

??????????? OFN.lpstrFile?????? = szNewName;
OFN.lpstrTitle????? = szSaveCaption;
/* Added OFN_PATHMUSTEXIST to eliminate problems in SaveFile.
* 12 February 1991??? clarkc
*/
OFN.Flags = OFN_HIDEREADONLY???? | OFN_OVERWRITEPROMPT |
OFN_NOREADONLYRETURN | OFN_PATHMUSTEXIST?? |
OFN_EXPLORER???????? |
OFN_ENABLESIZING???? |
OFN_ENABLETEMPLATE?? | OFN_ENABLEHOOK;

??????????? OFN.lpTemplateName= TEXT("NpEncodingDialog");
OFN.lpfnHook= NpSaveDialogHookProc;

??????????? /* ALL non-zero long pointers must be defined immediately
* before the call, as the DS might move otherwise.
* 12 February 1991??? clarkc
*/
OFN.lpstrFilter?????? = szSaveFilterSpec;
OFN.lpstrDefExt?????? = TEXT("txt");

??????????? if (!fUntitled)
{
lstrcpyn(szNewName, szFileName, MAX_PATH); /* set default selection */
}
else
{
lstrcpy (szNewName, TEXT("*.txt") );
}

??????????? fInSaveAsDlg = TRUE;

??????????? OFN.nFilterIndex= FILE_TEXT;

??????????? //
// Do common dialog to save file
//

??????????? if (GetSaveFileName(&OFN))
{

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915899.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Qt開發】信號與槽(一)

目錄 1 -> 信號和槽概述 1.1 -> 信號的本質 1.2 -> 槽的本質 2 -> 信號與槽的連接方式 2.1 -> 一對一 2.2 -> 一對多 2.3 -> 多對一 3 -> 小結 1 -> 信號和槽概述 在 Qt 中,用戶和控件的每次交互過程稱為一個事件。比如 “用戶…

目標檢測中的標簽分配算法總結

目標檢測中的標簽分配算法是訓練過程中的一個核心環節,它決定了如何將標注好的真實目標框分配給模型預測出來的候選框(Anchor Boxes或Points),從而為這些候選框提供監督信號(正樣本、負樣本、忽略樣本)。它…

圖片轉 PDF三個免費方法總結

📌 為什么需要圖片轉 PDF? 在工作和生活中,我們經常需要將多張圖片整理成 PDF 文檔,例如:工作資料歸檔, 學習筆記整理,作品集展示,便捷分享。 方法一、iLoveOFD在線工具 提供圖片…

Kafka 在分布式系統中的關鍵特性與機制深度解析

在分布式系統架構中,消息中間件扮演著 "數據樞紐" 的核心角色,而 Kafka 憑借其卓越的性能和可靠性,成為眾多企業的首選。本文將深入剖析 Kafka 在分布式環境中的核心特性與底層機制,揭示其高吞吐、高可用的底層邏輯。一…

Python實戰:基于Streamlit的股票篩選系統,實時K線圖+數據緩存優化

基于 Streamlit 構建的股票篩選分析工具,整合了 Tushare 接口獲取股票數據,并通過交互式界面實現股票篩選、信息展示和 K 線圖分析。以下是深度解讀:一、代碼結構概覽依賴庫導入import streamlit as st import tushare as ts import pandas a…

網絡安全威脅和防御措施

網絡安全基礎概念網絡安全指保護網絡系統及其數據免受未經授權的訪問、破壞或泄露。涵蓋硬件、軟件、數據及服務的安全防護,涉及技術、管理和法律等多層面措施。常見網絡安全威脅惡意軟件:病毒、蠕蟲、勒索軟件等通過漏洞感染系統。網絡釣魚:…

Spring DeferredResult 實現長輪詢

1、背景 在項目開發中,有一個流程性的方法執行,這個方法會調用各種方法,可能會導致時間比較長 ,如果一直等待響應結果的話,可能會造成超時,如果直接使用異步的方式的話,前端無法知道整體流程什…

Python設計模式 - 橋接模式

定義 橋接模式是一種結構型設計模式,它的核心思想是將抽象部分與實現部分分離,使它們可以獨立變化。 結構抽象類(Abstraction):定義抽象接口,持有實現部分的引用。具體抽象類(Refined Abstracti…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 用戶注冊實現

大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解用戶注冊實現 視頻在線地址: …

華為7月23日機考真題

📌 點擊直達筆試專欄 👉《大廠筆試突圍》 💻 春秋招筆試突圍在線OJ 筆試突圍OJ](bishipass.com) 03. 山峰觀測站數據分析 問題描述 LYA是一名地理數據分析師,負責分析山峰觀測站收集的海拔高度數據。觀測站在一條直線上設置了…

圖像分析學習筆記(4):機器學習圖像特征與描述

圖像分析學習筆記(4):機器學習圖像特征與描述深度學習基礎深度學習技巧深度模型構建深度學習基礎 深度學習概念:深度學習是機器學習的一個分支,它基于一系列算法,試圖通過使用多個處理層建立數據的高級抽象…

鎖付機器人,如何精準鎖附革新新能源鋰電裝配效率

其實呢,隨著科技的不斷發展,新能源電池、智能制造、精密裝配、工藝升級以及工業自動化這些領域都在飛速前進。新能源行業如今可是炙手可熱,中國新能源行業進入快速發展階段,就像一列高速行駛的火車,勢不可擋。在這個過…

Vue項目開發注意事項(包含node/npm/cnpm等)

事項一:項目代碼放在本地怎么運行起來 1、首先確定項目對應的node和npm版本 node下載地址 Index of /dist/https://nodejs.org/dist/ node 與 npm版本對應關系 Node.js — Node.js Releases 2、node卸載的時候,會自動把對應的npm卸載掉 情況1&…

GitHub:只支持 Git 作為唯一的版本庫格式進行托管

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

秋招Day17 - Spring - MVC

Spring MVC有哪些核心組件?DispatcherServlet:前端控制器,所有HTTP請求首先經過它,分發請求到正確的處理器,并與其他組件協調。HandlerMapping:維護URL和處理器的映射關系Handler:處理器&#x…

使用mybatis實現模糊查詢和精準查詢切換的功能

1、首先在前端頁面添加勾選框&#xff08;name設置為check&#xff09;2、mybatis代碼當check勾選時&#xff0c;check不為null&#xff0c;走模糊查詢like當check未勾選時&#xff0c;check為null&#xff0c;走精準查詢 <if test"check ! null and check ! "&g…

Android模塊化實現方案深度分析

模塊化是現代 Android 開發應對項目復雜度激增、團隊協作效率、編譯速度瓶頸、功能復用與動態化等挑戰的核心架構思想。其核心目標是高內聚、低耦合、可插拔、易維護。 一、模塊化的核心價值與目標 降低復雜度&#xff1a; 將龐大單體應用拆分為獨立、職責清晰的模塊。加速編譯…

網絡基礎16--VRRP技術

一、VRRP核心概念定義虛擬路由器冗余協議&#xff08;VRRP&#xff0c;Virtual Router Redundancy Protocol&#xff09;&#xff0c;可以將多個路由器加入到備份組中&#xff0c;形成一臺虛擬路由器&#xff0c;承擔網關功能。RFC 3768標準定義的VRRP是一種容錯協議&#xff0…

最長公共前綴-leetcode

編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 輸入&#xff1a;strs [“flower”,“flow”,“flight”] 輸出&#xff1a;“fl” 示例 2&#xff1a; 輸入&#xff1a;strs [“dog”,“racecar”,…

vs2022:C++安裝opencv

vs2022:C安裝opencv https://opencv.org/releases/ 1.配置包含目錄 2.配置庫目錄 3.配置連接器 4.配置環境變量 5.重新啟動VS2015/VS2017 6.測試 1.配置包含目錄 (頭文件) 2.配置庫目錄&#xff08;dll存放的庫目錄&#xff09; 3.配置連接器(庫) 4.配置環境變量 5.重新啟動VS…