39.右鍵彈出菜單管理游戲列表

上一個內容:38.控制功能實現

以?????????38.控制功能實現?它的代碼為基礎進行修改

效果圖:

點擊設置之后的樣子

點擊刪除

點擊刪除之后的樣子

實現步驟:

首先添加一個菜單資源,右擊項目資源選擇下圖紅框

然后選擇Menu

然后雙擊請在此輸入,搞成下圖中的樣子

然后給列表添加右擊事件

CWndAddGame.h文件,新加 SetData函數。修改了Init、OnBnClickedButton3函數

#pragma once// CWndAddGame 對話框class CWndAddGame : public CDialogEx
{DECLARE_DYNAMIC(CWndAddGame)public:CWndAddGame(CWnd* pParent = nullptr);   // 標準構造函數virtual ~CWndAddGame();// 對話框數據
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ADDGAME };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:afx_msg void OnBnClickedButton1();CString GameName;CString GamePath;CString GameFullPath;CString GameCmds;CString DllPath;void* father;bool IsCreate;int index;afx_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton3();
public:void Init(void* _father, bool Create = true, int _index = 0);void SetData(CString& _GameName,CString& _GamePath, CString& _GameExe, CString& _GameCmds, CString& _DllPath);
};

CWndAddGame.cpp文件:

#include "pch.h"
#include "GAMEHACKER2.h"
#include "CWndAddGame.h"
#include "afxdialogex.h"
#include "CWndINJ.h"// CWndAddGame 對話框IMPLEMENT_DYNAMIC(CWndAddGame, CDialogEx)CWndAddGame::CWndAddGame(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_ADDGAME, pParent), GameName(_T("")), GamePath(_T("")), GameFullPath(_T("")), DllPath(_T(""))
{}CWndAddGame::~CWndAddGame()
{
}void CWndAddGame::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, GameName);DDX_Text(pDX, IDC_EDIT2, GamePath);DDX_Text(pDX, IDC_EDIT3, GameFullPath);DDX_Text(pDX, IDC_EDIT4, GameCmds);DDX_Text(pDX, IDC_EDIT5, DllPath);
}BEGIN_MESSAGE_MAP(CWndAddGame, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CWndAddGame::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CWndAddGame::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON4, &CWndAddGame::OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON3, &CWndAddGame::OnBnClickedButton3)
END_MESSAGE_MAP()// CWndAddGame 消息處理程序void CWndAddGame::OnBnClickedButton1()
{static TCHAR BASED_CODE szFilter[] = _T("exe (*.exe)|*.exe|dat (*.dat)|*.dat|All (*.*)|*.*||");// CFileDialog是mfc封裝好的打開文件或另存為窗口CFileDialog dialog(TRUE, NULL, NULL, 6,szFilter);UpdateData(TRUE);if (dialog.DoModal() == IDOK){// 游戲可執行文件GameFullPath = dialog.GetPathName();// 游戲名稱GameName = dialog.GetFileTitle();// 游戲路徑GamePath = dialog.GetFolderPath() + L"\\";UpdateData(FALSE);}
}void CWndAddGame::OnBnClickedButton2()
{UpdateData(TRUE);static TCHAR BASED_CODE szFilter[] = _T("動態鏈接庫 (*.dll)|*.dll|All (*.*)|*.*||");// CFileDialog是mfc封裝好的打開文件或另存為窗口CFileDialog dialog(TRUE, NULL, NULL, 6, szFilter);if (dialog.DoModal() == IDOK){// 注入模塊路徑DllPath = dialog.GetPathName();UpdateData(FALSE);}
}void CWndAddGame::OnBnClickedButton4()
{CDialog::OnCancel();
}void CWndAddGame::OnBnClickedButton3()
{CWndINJ* p = (CWndINJ*)father;UpdateData(TRUE);if (IsCreate) {p->AddGame(GameName, GameFullPath, GamePath, GameCmds, DllPath);}else {p->SaveGame(GameName, GameFullPath, GamePath, GameCmds, DllPath, index);}CDialog::OnCancel();
}void CWndAddGame::Init(void* _father, bool Create, int _index)
{father = _father;IsCreate = Create;index = _index;
}void CWndAddGame::SetData(CString& _GameName, CString& _GamePath, CString& _GameExe, CString& _GameCmds, CString& _DllPath)
{GameName = _GameName;GamePath = _GamePath;GameCmds = _GameCmds;GameFullPath = _GameExe;DllPath = _DllPath;}

CWndINJ.h文件中的代碼,新加 OnMenuSet、OnMenuDel、OnNMRClickList1、SaveLstToIni、SaveGame。新加變量 lstSel

#pragma once#include "CWndAddGame.h"
#include "INJCET.h"// CWndINJ 對話框class CWndINJ : public CDialogEx
{DECLARE_DYNAMIC(CWndINJ)public:CWndINJ(CWnd* pParent = nullptr);   // 標準構造函數virtual ~CWndINJ();// 對話框數據
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_PAGE_0 };
#endifprotected:INJCET m_INJCET;virtual BOOL OnInitDialog();virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CListCtrl ExeLst;afx_msg void OnBnClickedButton1();// 注入BOOL B_INJCET;// 調試BOOL B_DEBUG;// 暫停BOOL B_PAUSE;CWndAddGame wndAddGame;CString AppPath;// 配置文件路徑CString GameIni;
public:void Init(CString& _AppPath);void AddGame(CString& GameName, CString& GamePath,CString& GameFullPath,CString& GameCmds,CString& DllPath);void SaveGame(CString& GameName,CString& GamePath,CString& GameFullPath,CString& GameCmds,CString& DllPath,int index);void LoadGame();afx_msg void OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnMenuSet();afx_msg void OnMenuDel();int lstSel;void SaveLstToIni();
};

CWndINJ.cpp文件中的代碼

 // CWndINJ.cpp: 實現文件
//#include "pch.h"
#include "GAMEHACKER2.h"
#include "CWndINJ.h"
#include "afxdialogex.h"#include <ImageHlp.h>
#include <fstream>
#pragma comment(lib, "ImageHlp.lib")//void _stdcall INJECTCode() {
//    AfxMessageBox(L"aa");
//    unsigned address = 0xCCCCCCCC;
//    PREMOTE_DATA p = (PREMOTE_DATA)address;
//    p->f_LoadLibrary(p->dllName);
//}// CWndINJ 對話框IMPLEMENT_DYNAMIC(CWndINJ, CDialogEx)CWndINJ::CWndINJ(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_PAGE_0, pParent), B_INJCET(FALSE), B_DEBUG(FALSE), B_PAUSE(FALSE)
{}CWndINJ::~CWndINJ()
{
}BOOL CWndINJ::OnInitDialog()
{CDialogEx::OnInitDialog();LONG_PTR lStyle;// 得到窗口的樣式,GWL_STYLE在GetWindowLongPtr說明中有lStyle = GetWindowLongPtr(ExeLst.m_hWnd, GWL_STYLE);lStyle |= LVS_REPORT;SetWindowLongPtr(ExeLst.m_hWnd, GWL_STYLE, lStyle);DWORD dStyle = ExeLst.GetExtendedStyle();dStyle |= LVS_EX_FULLROWSELECT;dStyle |= LVS_EX_GRIDLINES;ExeLst.SetExtendedStyle(dStyle);ExeLst.InsertColumn(0, L"名稱", 0, 200);ExeLst.InsertColumn(1, L"可執行文件", 0, 400);ExeLst.InsertColumn(2, L"文件夾", 0, 400);ExeLst.InsertColumn(3, L"命令行", 0, 400);ExeLst.InsertColumn(4, L"注入模塊", 0, 400);return 0;
}void CWndINJ::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, ExeLst);DDX_Check(pDX, IDC_CHECK1, B_INJCET);DDX_Check(pDX, IDC_CHECK2, B_DEBUG);DDX_Check(pDX, IDC_CHECK3, B_PAUSE);
}BEGIN_MESSAGE_MAP(CWndINJ, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CWndINJ::OnBnClickedButton1)ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CWndINJ::OnNMDblclkList1)ON_NOTIFY(NM_RCLICK, IDC_LIST1, &CWndINJ::OnNMRClickList1)ON_COMMAND(ID_32771, &CWndINJ::OnMenuSet)ON_COMMAND(ID_32772, &CWndINJ::OnMenuDel)
END_MESSAGE_MAP()// CWndINJ 消息處理程序void CWndINJ::OnBnClickedButton1()
{// TODO: 在此添加控件通知處理程序代碼/*ExeLst.InsertItem(0, L"DNF");ExeLst.SetItemText(0, 1, L"dlls.dll");*/用來指定創建時進程的主窗口的窗口工作站、桌面、標準句柄和外觀。//STARTUPINFO si{};//si.cb = sizeof(si);//PROCESS_INFORMATION prinfo{};//CreateProcess(L"C:\\Users\\am\\Desktop\\易道云\\游戲保護\\練手游戲\\初級\\JX2\\Sword2.exe",//    NULL,NULL,NULL,//    FALSE,//    // 新進程的主線程處于掛起狀態創建,在調用 ResumeThread 函數之前不會運行。//    CREATE_SUSPENDED,//    NULL,//    L"C:\\Users\\am\\Desktop\\易道云\\游戲保護\\練手游戲\\初級\\JX2\\",//    &si,//    &prinfo//    );///**//    注入功能寫在這里(CreateProcess與ResumeThread函數之間)//*/讓游戲繼續運行//ResumeThread(prinfo.hThread);wndAddGame.Init(this);wndAddGame.DoModal();}void CWndINJ::Init(CString& _AppPath)
{AppPath = _AppPath;GameIni.Format(L"%s\\config\\Games.ini", AppPath);LoadGame();
}void CWndINJ::AddGame(CString& GameName, CString& GamePath, CString& GameFullPath, CString& GameCmds, CString& DllPath)
{int count = GetPrivateProfileInt(L"main", L"count", 0, GameIni);count++;CString key;key.Format(L"count_%d", count);WritePrivateProfileString(key, L"GameName", GameName, GameIni);WritePrivateProfileString(key, L"GamePath", GamePath, GameIni);WritePrivateProfileString(key, L"GameFullPath", GameFullPath, GameIni);WritePrivateProfileString(key, L"GameCmds", GameCmds, GameIni);WritePrivateProfileString(key, L"DllPath", DllPath, GameIni);CString wCount;wCount.Format(L"%d", count);WritePrivateProfileString(L"main", L"count", wCount, GameIni);int iCount = ExeLst.GetItemCount();ExeLst.InsertItem(iCount, GameName);ExeLst.SetItemText(iCount, 1, GamePath);ExeLst.SetItemText(iCount, 2, GameFullPath);ExeLst.SetItemText(iCount, 3, GameCmds);ExeLst.SetItemText(iCount, 4, DllPath);}void CWndINJ::SaveGame(CString& GameName, CString& GamePath, CString& GameFullPath, CString& GameCmds, CString& DllPath, int index)
{CString key;key.Format(L"count_%d", index);WritePrivateProfileString(key, L"GameName", GameName, GameIni);WritePrivateProfileString(key, L"GamePath", GamePath, GameIni);WritePrivateProfileString(key, L"GameFullPath", GameFullPath, GameIni);WritePrivateProfileString(key, L"GameCmds", GameCmds, GameIni);WritePrivateProfileString(key, L"DllPath", DllPath, GameIni);int iCount = index-1;ExeLst.SetItemText(iCount, 0, GameName);ExeLst.SetItemText(iCount, 1, GamePath);ExeLst.SetItemText(iCount, 2, GameFullPath);ExeLst.SetItemText(iCount, 3, GameCmds);ExeLst.SetItemText(iCount, 4, DllPath);
}void CWndINJ::LoadGame()
{int count = GetPrivateProfileInt(L"main", L"count", 0, GameIni);for (int i = 0; i < count; i++) {CString GameName, GameExe, GamePath, GameCmds, GameDlls, _AppName;_AppName.Format(L"count_%d", i+1);wchar_t wRead[0xFF];GetPrivateProfileString(_AppName, L"GameName", L"", wRead, 0xFF, GameIni);GameName.Format(L"%s", wRead);GetPrivateProfileString(_AppName, L"GamePath", L"", wRead, 0xFF, GameIni);GameExe.Format(L"%s", wRead);GetPrivateProfileString(_AppName, L"GameFullPath", L"", wRead, 0xFF, GameIni);GamePath.Format(L"%s", wRead);GetPrivateProfileString(_AppName, L"GameCmds", L"", wRead, 0xFF, GameIni);GameCmds.Format(L"%s", wRead);GetPrivateProfileString(_AppName, L"DllPath", L"", wRead, 0xFF, GameIni);GameDlls.Format(L"%s", wRead);ExeLst.InsertItem(i, GameName);ExeLst.SetItemText(i, 1,  GameExe);ExeLst.SetItemText(i, 2, GamePath);ExeLst.SetItemText(i, 3, GameCmds);ExeLst.SetItemText(i, 4, GameDlls);}
}void* _imageload(wchar_t* filename) {std::ifstream streamReader(filename, std::ios::binary);streamReader.seekg(0, std::ios::end);unsigned filesize = streamReader.tellg();char* _data = new char[filesize];streamReader.seekg(0, std::ios::beg);streamReader.read(_data, filesize);streamReader.close();return _data;
}void _unloadimage(void* _data) {delete[] _data;
}void CWndINJ::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼*pResult = 0;int index = pNMItemActivate->iItem;if (index < 0)return;CString GamePath = ExeLst.GetItemText(index, 2);CString GameExe = ExeLst.GetItemText(index, 1);CString GameCmds = ExeLst.GetItemText(index, 3);CString GameDlls = ExeLst.GetItemText(index, 4);UpdateData(TRUE);PROCESS_INFORMATION prinfo{};bool Pause = B_PAUSE;if (B_INJCET && (GameDlls.GetLength() > 1)) {Pause = true;}m_INJCET.StartProcess(GameExe, GamePath, GameCmds.GetBuffer(), &prinfo, Pause);if (B_INJCET && (GameDlls.GetLength() > 1)) {m_INJCET.CreateRemoteData(prinfo.hProcess, GameExe, GameDlls);}if (B_DEBUG){PROCESS_INFORMATION odinfo{};//F:\其它\OllyDbg\Ollydbg.exe - p 4760CString dbgExe, dbgPath, dbgCmds;dbgExe = L"F:\\其它\\OllyDbg\\Ollydbg.exe";dbgPath = L"F:\\其它\\OllyDbg\\";dbgCmds.Format(L"%s -p %d", dbgExe, prinfo.dwProcessId);m_INJCET.StartProcess(dbgExe, dbgPath, dbgCmds.GetBuffer(), &odinfo, false);}if (B_PAUSE) {AfxMessageBox(L"按下確認,進程開始執行!");}ResumeThread(prinfo.hThread);// 用來指定創建時進程的主窗口的窗口工作站、桌面、標準句柄和外觀。// STARTUPINFO si{};// si.cb = sizeof(si);//STARTUPINFO si{};//si.cb = sizeof(si);//CreateProcess(dbgExe,//    dbgExe.GetBuffer(),//    NULL, NULL,//    false,//    // 新進程的主線程處于掛起狀態創建,在調用 ResumeThread 函數之前不會運行。//    0,//    NULL,//    dbgPath,//    &si,//    &odinfo//);//ResumeThread(odinfo.hThread);//m_INJCET.CodeRemoteData(&_data);/**CreateProcess(GameExe,GameCmds.GetBuffer(),NULL,NULL,FALSE,// 新進程的主線程處于掛起狀態創建,在調用 ResumeThread 函數之前不會運行。CREATE_SUSPENDED,NULL,GamePath,&si,&prinfo);*//** 方式一調用apiCStringA GameExeA;GameExeA = GameExe;PLOADED_IMAGE image =  ImageLoad(GameExeA, NULL);DWORD dEntryPoint = image->FileHeader->OptionalHeader.AddressOfEntryPoint;CString wTxt;wTxt.Format(L"%X", dEntryPoint);AfxMessageBox(wTxt);ImageUnload(image)*//** 方式二(要在32位環境下運行)void* image = _imageload(GameExe.GetBuffer());IMAGE_DOS_HEADER* dosHeader = (IMAGE_DOS_HEADER*)image;unsigned PEAddress =  dosHeader->e_lfanew + (unsigned)image;IMAGE_NT_HEADERS* ntHeader = (IMAGE_NT_HEADERS*)PEAddress;DWORD dEntryPoint = ntHeader->OptionalHeader.AddressOfEntryPoint;CString wTxt;wTxt.Format(L"%X", dEntryPoint);AfxMessageBox(wTxt);_unloadimage(image);*///LPVOID adrRemote = VirtualAllocEx(prinfo.hProcess, 0, 0x3000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);//SIZE_T lwt;//WriteProcessMemory(prinfo.hProcess, adrRemote, INJECTCode, 0x200, &lwt);//CString wTxt;//wTxt.Format(L"%X", adrRemote);//AfxMessageBox(wTxt);// 讓游戲繼續運行//m_INJCET.CreateRemoteData(prinfo.hProcess, GameDlls.GetBuffer());}void CWndINJ::OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{LPNMITEMACTIVATE pActive = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼*pResult = 0;if (pActive->iItem != -1) {lstSel = pActive->iItem;// 獲取最后一個消息發生時的鼠標位置DWORD dwPos = GetMessagePos();CPoint point(LOWORD(dwPos), HIWORD(dwPos));CMenu menu;menu.LoadMenuW(IDR_MENU1);CMenu* pop = menu.GetSubMenu(0);pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x,point.y, this);}
}void CWndINJ::OnMenuSet()
{// TODO: 在此添加命令處理程序代碼//AfxMessageBox(L"按下了設置");CString GameName = ExeLst.GetItemText(lstSel, 0);CString GamePath = ExeLst.GetItemText(lstSel, 2);CString GameExe = ExeLst.GetItemText(lstSel, 1);CString GameCmds = ExeLst.GetItemText(lstSel, 3);CString GameDlls = ExeLst.GetItemText(lstSel, 4);wndAddGame.Init(this, false, lstSel+1);wndAddGame.SetData(GameName, GamePath, GameExe, GameCmds, GameDlls);wndAddGame.DoModal();}void CWndINJ::OnMenuDel()
{// TODO: 在此添加命令處理程序代碼//AfxMessageBox(L"按下了刪除");ExeLst.DeleteItem(lstSel);SaveLstToIni();
}void CWndINJ::SaveLstToIni()
{int count = ExeLst.GetItemCount();for (int i = 0; i < count; i++) {CString GameName = ExeLst.GetItemText(i, 0);CString GamePath = ExeLst.GetItemText(i, 2);CString GameExe = ExeLst.GetItemText(i, 1);CString GameCmds = ExeLst.GetItemText(i, 3);CString GameDlls = ExeLst.GetItemText(i, 4);int tempI = i + 1;CString key;key.Format(L"count_%d", tempI);WritePrivateProfileString(key, L"GameName", GameName, GameIni);WritePrivateProfileString(key, L"GamePath", GameExe, GameIni);WritePrivateProfileString(key, L"GameFullPath", GamePath, GameIni);WritePrivateProfileString(key, L"GameCmds", GameCmds, GameIni);WritePrivateProfileString(key, L"DllPath", GameDlls, GameIni);}CString wCount;wCount.Format(L"%d", count);WritePrivateProfileString(L"main", L"count", wCount, GameIni);}

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

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

相關文章

【C語言】字符/字符串+內存函數

目錄 Ⅰ、字符函數和字符串函數 1 .strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 11.字符函數 12. 字符轉換函數 Ⅱ、內存函數 1 .memcpy 2.memmove 3.memcmp Ⅰ、字符函數和字符串函數 1 .strlen 函數原型&#xff1a;…

《計算機英語》 Unit 6 Internet 互聯網

Section A Internet 互聯網 The Internet is a global system of interconnected computer networks that use the standard Internet protocol suite (TCP/IP) to link several billion devices worldwide. 互聯網是一個全球性的互連計算機網絡系統&#xff0c;使用標準的互聯…

python多線程加速web服務

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、代碼實現&#xff1f;1.引入庫2.讀入數據 總結 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 1 提示&#xff1a;以下是本篇文章…

15、Spring~容器啟動過程

15、Spring~容器啟動過程 容器啟動過程AnnotationConfigApplicationContext類的四個構造器&#xff1a;啟動過程詳解無參構造方法refresh()方法prepareRefresh()方法prepareBeanFactory()方法invokeBeanFactoryPostProcessors()方法registerBeanPostProcessors()方法finishBean…

蘋果CMS-V10 搭建教程踩坑,跳過部分驗證

我突發奇想,想要安裝一個CMS 蘋果CMS搭建教程-CSDN博客 然后就有了下面的問題 結論是zip相關依賴未安裝, 通過 apt install php-zip, 重新打開安裝頁面,同樣如此 最后依據某個網站提示,修改 "\\192.168.1.200\root\var\www\html\maccms\application\install\control…

JSR 303全解析:如何在Java項目中實施高效數據校驗

1. JSR 303是什么&#xff1f; JSR 303&#xff08;Java Specification Request 303&#xff09;&#xff0c;也稱為Bean Validation&#xff0c;是Java中的一個規范&#xff0c;用于定義Java對象的校驗規則。 1.1 JSR 303的主要功能 注解驅動&#xff1a;通過注解直接在Jav…

多家國產大模型提供OpenAI API服務替代方案,谷歌將推出明星網紅AI聊天機器人

ChatGPT狂飆160天&#xff0c;世界已經不是之前的樣子。 更多資源歡迎關注 1、OpenAI終止對中國提供服務 6月25日凌晨&#xff0c;多個用戶收到OpenAI的推送郵件&#xff0c;信中稱&#xff0c;自今年7月9日起&#xff0c;將開始阻止來自非支持國家和地區的API&#xff08;應…

3.任務的創建與刪除

1.什么是任務&#xff1f; 任務可以理解為進程/線程&#xff0c;創建一個任務&#xff0c;就會在內存開辟一個空間。 任務通常都含有while(1)死循環 2.任務創建與刪除相關的函數 3.CUBEMAX相關配置 編輯一個led1閃爍的任務

小程序使用echarts和echarts配置項總結(全網最簡單詳細)

文章目錄 概要小程序中使用echarts1. ec-canvas2. 下載項目3. 去echarts官網定制&#xff1a;4.點擊下載5.引入使用 echarts的option配置知識點歸納整理&#xff08;還在更新&#xff09;&#xff1a;小結 概要 小程序中使用echarts&#xff08;簡單詳細&#xff09; 小程序中…

解密城市酷選為何異軍突起!打造消費新潮流的排隊免單模式

一、城市酷選平臺簡介 在數字化浪潮席卷全球的今天&#xff0c;城市酷選作為一個前沿的消費平臺&#xff0c;憑借其獨特的排隊免單模式&#xff0c;成功吸引了眾多消費者和商家的目光。該平臺不僅整合了線上線下的資源&#xff0c;更通過數字化手段&#xff0c;為消費者提供了…

云計算 | 期末梳理(中)

1. 經典虛擬機的特點 多態(Polymorphism):支持多種類型的OS。重用(Manifolding):虛擬機的鏡像可以被反復復制和使用。復用(Multiplexing):虛擬機能夠對物理資源時分復用。2. 系統接口 最基本的接口是微處理器指令集架構(ISA)。應用程序二進制接口(ABI)給程序提供使用硬件資源…

C3P0數據庫連接池

目錄 一&#xff1a;連接池介紹 1.1連接池解決的問題 2.常用的數據庫連接池 二&#xff1a;c3p0介紹 2.1C3P0介紹&#xff1a; 2.2C3P0快速入門 1.常用參數說明 2.API介紹 3.使用步驟 1.導入jar包c3p0-0.9.1.2.jar 2.編寫c3p0-config.xml配置文件&#xff0c;配置對…

Python 中字符串修飾符

1. 原始字符串 (Raw String) - r 或 R 使用 r 或 R 前綴&#xff0c;可以告訴 Python 字符串中的所有反斜杠都是普通字符&#xff0c;而不是轉義字符。這在處理文件路徑、正則表達式等情況下非常有用。 path rC:\new_folder\test.txt # 原始字符串2. 格式化字符串 (Formatt…

第十九條:要么為繼承而設計并提供文檔說明,要么就禁止繼承

在前面一條中&#xff0c;我們已經知道了David寫了A類被Tom拿去繼承了&#xff0c;導致了A類的封裝性遭到了破壞&#xff0c;那么有沒有可能做點事情避免此事發生呢&#xff1f;第十九條孕育而生&#xff01;David在創建A類的時候寫上文檔說明&#xff0c;說Al類不允許任何類來…

node 實現導出, 在導出excel中包含圖片(附件)

如果想查看 node mySql 實現數據的導入導出&#xff0c;以及導入批量插入的sql語句&#xff0c;連接如下 node mySql 實現數據的導入導出&#xff0c;以及導入批量插入的sql語句-CSDN博客https://blog.csdn.net/snows_l/article/details/139998373 一、效果如圖&#xff1a; 二…

中介子方程三十四

XXFXXuXXWXXuXXdXXrXXαXXuXpXXKXηXiXXαXXiXηXKXXpXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXpXXKXηXiXXαXXiXηXKXXpXuXXαXXrXXeXqXXNXXpXπXbXeXyXeXWXXπXWXuXXdXXrXXαXXuXpXXKXηXiXXαXXiXηXKXXpXuXXαXXrXXdXXuXXWXXuXXFXXEXXyXXEXXrXXαXXuXpXXK…

paraview跨節點并行渲染

參考&#xff1a; https://cloud.tencent.com/developer/ask/sof/101483588 ParaView 支持使用其內置的網絡拓撲來進行跨節點的并行渲染。以下是一個簡單的步驟來設置和運行跨節點的并行渲染&#xff1a; 確保你的計算環境支持多節點計算&#xff0c;比如通過SSH、MPI或其他集…

阿里云擴容

官網&#xff1a;https://help.aliyun.com/zh/ecs/user-guide/extend-the-partitions-and-file-systems-of-disks-on-a-linux-instance?spm5176.ecs-console-storage_disk.help.dexternal.72d24df5QOL4ss 博客&#xff1a;http://t.csdnimg.cn/cUykr

Android APP通過View修改鼠標樣式

app view上修改鼠標樣式比較簡單&#xff0c;使用如下方法修改為自定義圖片&#xff1a; getWindow().getDecorView().setPointerIcon(PointerIcon.load(getResources(), R.drawable.pointer_spot_touch_icon)); 設置鼠標樣式setPointerIcon的調用棧 frameworks/base/core/jav…

C語言:流量控制

前言 流量控制可以讓發送端根據接收端的實際接受能力控制發送的數據量。它的具體操作是&#xff0c;接收端主機向發送端主機通知自己可以接收數據的大小&#xff0c;于是發送端會發送不會超過該大小的數據&#xff0c;該限制大小即為窗口大小&#xff0c;即窗口大小由接收端主…