關于C使用Windows API獲取系統管理員權限和對文本屬性的操作,以及windows API的核心操作

?關于windows系統的操作程序開發,本文介紹一部分重要的文本屬性操作,和運行計次器。

獲取系統管理員權限

#include <windows.h>
VOID ManagerRun(LPCSTR exe, LPCSTR param, INT nShow)  
{ //注意:會跳出提示。SHELLEXECUTEINFO ShExecInfo; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);  ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS ;  ShExecInfo.hwnd = NULL;  ShExecInfo.lpVerb = "runas";  ShExecInfo.lpFile = exe; ShExecInfo.lpParameters = param;   ShExecInfo.lpDirectory = NULL;  ShExecInfo.nShow = nShow;  ShExecInfo.hInstApp = NULL;   BOOL ret = ShellExecuteEx(&ShExecInfo);  CloseHandle(ShExecInfo.hProcess);return;
}
int main(int argc, char *argv[])
{if(argc == 1){ShowWindow(GetConsoleWindow(),SW_HIDE);ManagerRun(argv[0],"2", SW_SHOWNORMAL);return 1;}else if(argc == 2) {/*你的程序主代碼在此*/}return 0;
}

?將指定路徑文件隱藏屬性設置為“True”

#include <windows.h>
#include <stdio.h>
int main() {char *p="D:\\a.txt";// 文件夾路徑const char* folderPath = p;// 獲取文件夾的屬性DWORD attributes = GetFileAttributes(folderPath);if (attributes == INVALID_FILE_ATTRIBUTES) {perror("GetFileAttributes");return 1;}// 添加隱藏屬性attributes |= FILE_ATTRIBUTE_HIDDEN;// 設置文件夾的新屬性if (!SetFileAttributes(folderPath, attributes)) {perror("SetFileAttributes");return 1;}printf("文件夾屬性已設置為隱藏\n"); return 0;
}

將指定路徑文件隱藏屬性設置為“False”

#include <windows.h>
#include <stdio.h>int main() {// 文件夾路徑const char* folderPath = "D:\\a.txt";// 獲取文件夾的屬性DWORD attributes = GetFileAttributes(folderPath);if (attributes == INVALID_FILE_ATTRIBUTES) {perror("GetFileAttributes");return 1;}// 清除隱藏屬性attributes &= ~FILE_ATTRIBUTE_HIDDEN;// 設置文件夾的新屬性if (!SetFileAttributes(folderPath, attributes)) {perror("SetFileAttributes");return 1;}printf("文件夾的隱藏屬性已取消\n");return 0;
}

文本運行的計次器?

關于指定的C語言程序,我們知道特定的源代碼產生特定的exe運行文件,

而且當源程序確定時,通過編譯鏈接得到的exe運行文件,

每次運行該exe文件所產生的效果是恒定的,因為他不具備存儲功能,

如果想要控制用戶打開指定第幾次時,才觸發某些操作,則需要一些存儲手段。

(放到啟動文件夾里,就可以檢測從存放如文件以來第n次的開機,可以指定病毒延遲效果)

我們需要向指定恒定存在路徑新建一個文本文件,通過每次運行來向其中讀寫內容,從而控制信息的存儲,來實現計次手段。

#include <stdio.h>
#include<windows.h>
#include<conio.h>
int main()
{FILE *p1 = fopen("D:\\a.txt", "a");fputs("1", p1);fclose(p1);char a[2000];FILE *p2 = fopen("D:\\a.txt", "r");fgets(a,2000,p2);int n=0;int num = 0;while(1)
{if(a[n]=='1'){n++;	num++;}else{break;}
}
printf("這是你第%d次打開這個程序\n",num);
printf("按下W鍵關閉,\n或者按下S鍵重置次數");while(1)
{if(kbhit)
{if(GetAsyncKeyState('W')){break;}if(GetAsyncKeyState('S')){FILE *p3 = fopen("D:\\a.txt", "w+");fputs("", p3);printf("\n已為你重置運行次數!"); break;}}
}return 0;
}

我在其中設定了最基礎的 計次 和 重置次數 功能,感興趣的話,你可以通過編寫,控制該程序在第幾次的觸發你預先設定好的程序,這個裝置可以用來干嘛我就不多說了,配上一點C語言文本指針的內容讀寫操作,功能自由。

關于windows API 的核心基礎,有以下幾點

1. 創建和顯示窗口

在 Windows 上創建和顯示一個窗口是很基礎的操作,會用到CreateWindowShowWindow等函數。

#include <windows.h>// 窗口過程函數
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}// 主函數
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {static TCHAR szAppName[] = TEXT("HelloWin");HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInstance;wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName = NULL;wndclass.lpszClassName = szAppName;if (!RegisterClass(&wndclass)) {MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);return 0;}hwnd = CreateWindow(szAppName, TEXT("The Hello Program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL);ShowWindow(hwnd, iCmdShow);UpdateWindow(hwnd);while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;
}

2. 文件操作

可以使用CreateFileReadFileWriteFile等函數進行文件的創建、讀取和寫入操作。

#include <windows.h>
#include <stdio.h>int main() {HANDLE hFile;DWORD dwBytesWritten, dwBytesRead;char buffer[] = "Hello, Windows API!";char readBuffer[100];// 創建文件hFile = CreateFile("test.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {perror("CreateFile");return 1;}// 寫入文件if (!WriteFile(hFile, buffer, sizeof(buffer), &dwBytesWritten, NULL)) {perror("WriteFile");CloseHandle(hFile);return 1;}CloseHandle(hFile);// 打開文件進行讀取hFile = CreateFile("test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {perror("CreateFile");return 1;}// 讀取文件if (!ReadFile(hFile, readBuffer, sizeof(readBuffer), &dwBytesRead, NULL)) {perror("ReadFile");CloseHandle(hFile);return 1;}CloseHandle(hFile);printf("Read from file: %s\n", readBuffer);return 0;
}

3. 消息框顯示

使用MessageBox函數可以顯示一個簡單的消息框。

#include <windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {MessageBox(NULL, TEXT("這是一個消息框示例!"), TEXT("消息框"), MB_OK | MB_ICONINFORMATION);return 0;
}

4. 進程創建

使用CreateProcess函數可以創建一個新的進程。

#include <windows.h>
#include <stdio.h>int main() {STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(pi));// 創建新進程if (!CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {perror("CreateProcess");return 1;}// 等待進程結束WaitForSingleObject(pi.hProcess, INFINITE);// 關閉進程和線程句柄CloseHandle(pi.hProcess);CloseHandle(pi.hThread);return 0;
}

本次內容到此為止,goog night !?

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

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

相關文章

Web 項目實戰:構建屬于自己的博客系統

目錄 項目效果演示 代碼 Gitee 地址 1. 準備工作 1.1 建表 1.2 引入 MyBatis-plus 依賴 1.3 配置數據庫連接 1.4 項目架構 2. 實體類準備 - pojo 包 2.1 dataobject 包 2.2 request 包 2.3 response 包 2.3.1 統一響應結果類 - Result 2.3.2 用戶登錄響應類 2.3.3…

從“被動跳閘”到“主動預警”:智慧用電系統守護老舊小區安全

安科瑞顧強 近年來&#xff0c;老舊小區電氣火災事故頻發&#xff0c;成為威脅居民生命財產安全的重要隱患。據統計&#xff0c;我國居住場所火災傷亡人數遠超其他場所&#xff0c;僅今年一季度就發生8.3萬起住宅火災&#xff0c;造成503人遇難。這些建筑多建于上世紀&#x…

【深入淺出 Git】:從入門到精通

這篇文章介紹下版本控制器。 【深入淺出 Git】&#xff1a;從入門到精通 Git是什么Git的安裝Git的基本操作建立本地倉庫配置本地倉庫認識工作區、暫存區、版本庫的概念添加文件添加文件到暫存區提交文件到版本庫提交文件演示 理解.git目錄中的文件HEAD指針與暫存區objects對象 …

Mybatis的簡單介紹

文章目錄 MyBatis 簡介 1. MyBatis 核心特點2. MyBatis 核心組件3. MyBatis 基本使用示例(1) 依賴引入&#xff08;Maven&#xff09;(2) 定義 Mapper 接口(3) 定義實體類(4) 在 Service 層調用 4. MyBatis 與 JPA/Hibernate 對比 MyBatis 簡介 MyBatis 是一款優秀的 持久層框…

Android Studio 在 Windows 上的完整安裝與使用指南

Android Studio 在 Windows 上的完整安裝與使用指南—目錄 一、Android Studio 簡介二、下載與安裝1. 下載 Android Studio2. 安裝前的依賴準備3. 安裝步驟 三、基礎使用指南1. 首次啟動配置2. 創建第一個項目3. 運行應用4. 核心功能 四、進階功能配置1. 配置 SDK 和工具2. 自定…

WPF 綁定方式舉例

WPF 綁定方式舉例 一、如果ItemsControl 控件的ItemsSource要綁定到List類型&#xff0c;可以如下&#xff1a; List<string> Names new List<string>(); Names.Add("aaa"); Names.Add("bbb");<ItemsControl ItemsSource"{Binding …

LangSmith 設置指南

什么是 LangSmith&#xff1f; LangSmith 是 LangChain 團隊開發的一個統一開發者平臺&#xff0c;用于構建、測試、評估和監控基于大型語言模型&#xff08;LLM&#xff09;的應用程序。它提供了一套工具&#xff0c;幫助開發者更好地理解、調試和改進他們的 LLM 應用。 注冊…

手撕TCP內網穿透及配置樹莓派

注意&#xff1a; 本文內容于 2025-04-13 15:09:48 創建&#xff0c;可能不會在此平臺上進行更新。如果您希望查看最新版本或更多相關內容&#xff0c;請訪問原文地址&#xff1a;手撕TCP內網穿透及配置樹莓派。感謝您的關注與支持&#xff01; 之前入手了樹莓派5&#xff0c;…

Java從入門到“放棄”(精通)之旅——程序邏輯控制④

Java從入門到“放棄”&#xff08;精通&#xff09;之旅&#x1f680;&#xff1a;程序邏輯的完美理解 一、開篇&#xff1a;程序員的"人生選擇" 曾經的我&#xff0c;生活就像一段順序執行的代碼&#xff1a; System.out.println("早上8:00起床"); Syste…

學習筆記九——Rust所有權機制

&#x1f980; Rust 所有權機制 &#x1f4da; 目錄 什么是值類型和引用類型&#xff1f;值語義和引用語義&#xff1f;什么是所有權&#xff1f;為什么 Rust 需要它&#xff1f;所有權的三大原則&#xff08;修正版&#xff09;移動語義 vs 復制語義&#xff1a;變量賦值到底…

Cocos Creator Shader入門實戰(八):Shader實現圓形、橢圓、菱形等頭像

引擎&#xff1a;3.8.5 您好&#xff0c;我是鶴九日&#xff01; 回顧 Shader的學習是一條漫長的道路。 理論知識的枯燥無味&#xff0c;讓很多人選擇了放棄。然而不得不說&#xff1a;任何新知識、新領域的學習&#xff0c;本身面臨的都是問題&#xff01; 互聯網和AI給了我…

深入理解計算機操作系統(持續更新中...)

文章目錄 一、計算機系統漫游1.1信息就是位上下文 一、計算機系統漫游 1.1信息就是位上下文 源程序實際上就是一個由值0和1組成的位&#xff08;又稱為比特&#xff09;&#xff0c;八個位被組織成一組&#xff0c;稱為字節。每個字節表示程序中的某些文本字符 大部分現代計…

YOLO V8的??Anchor-Free??、??解耦頭(Decoupled Head)、損失函數定義(含??Varifocal Loss)

YOLOv8 的 ??Anchor-Free?? 設計摒棄了傳統 YOLO 系列中依賴預定義錨框&#xff08;Anchor Boxes&#xff09;的機制&#xff0c;轉而直接預測目標的中心點和邊界框尺寸。這種設計簡化了模型結構&#xff0c;降低了超參數調優的復雜度提升了檢測速度和精度。以下是其核心實…

QuarkPi-CA2 RK3588S卡片電腦:6.0Tops NPU+8K視頻編解碼+接口豐富,高性能嵌入式開發!

QuarkPi-CA2 RK3588S卡片電腦&#xff1a;6.0Tops NPU8K視頻編解碼接口豐富&#xff0c;高性能嵌入式開發&#xff01; 芯片框架 視頻介紹 https://www.bilibili.com/video/BV1btdbYkEjY 開發板介紹 核心升級&#xff0c;產品炸裂 QuarkPi-CA2卡片電腦搭載瑞芯微RK3588S芯片…

【響應式編程】Reactor 常用操作符與使用指南

文章目錄 一、創建操作符1. just —— 創建包含指定元素的流2. fromIterable —— 從集合創建 Flux3. empty —— 創建空的 Flux 或 Mono4. fromArray —— 從數組創建 Flux5. fromStream —— 從 Java 8 Stream 創建 Flux6. create —— 使用 FluxSink 手動發射元素7. generat…

從靜態綁定驅動模型到現代設備模型 —— 一次驅動架構的進化之旅

&#x1f50d; B站相應的視屏教程&#xff1a; &#x1f4cc; 內核&#xff1a;博文視頻 - 從靜態綁定驅動模型到現代設備模型 在 Linux 內核的發展歷程中&#xff0c;設備驅動結構經歷了從"硬編碼 手動注冊"的早期實現方式&#xff0c;到"設備模型統一管理&qu…

Embedding質量評估、空間塌縮、 Alignment Uniformity

Embedding質量的評估和空間塌縮的解決是自然語言處理&#xff08;NLP&#xff09;和推薦系統領域的關鍵問題。以下是綜合多篇研究的總結&#xff1a; 一、Embedding質量評估方法 基準測試與任務指標 MTEB/C-MTEB&#xff1a;使用多語言或中文的基準測試集&#xff08;如58個數據…

批量給dwg顯示略縮圖_c#插件實現(com)

如果&#xff0c;cad文件無略縮圖&#xff1a; AutoCAD2021版本以上&#xff0c;命令行輸入"netload "加載此dll插件&#xff0c;然后輸入 “lst”&#xff0c;選擇文件夾&#xff0c;即可一鍵實現給dwg增加略縮圖。 效果如下&#xff1a; 附部分代碼&#xff1a; …

嬰幼兒托育服務與管理實訓室:托育未來的基石

在社會對嬰幼兒托育服務的重視程度不斷加深的當下&#xff0c;專業托育人才的需求急劇增長。嬰幼兒托育服務與管理專業作為培育這類人才的關鍵途徑&#xff0c;要求學生熟練掌握嬰幼兒身心發展、飲食營養以及衛生保健等基礎知識&#xff0c;同時具備全面的照護與管理能力。要實…

(自用)若依生成左樹右表

第一步&#xff1a; 在數據庫創建樹表和單表&#xff1a; SQL命令&#xff1a; 商品表 CREATE TABLE products (product_id INT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(255) , price DECIMAL(10, 2) , stock INT NOT NULL, category_id INT NOT NULL); 商品分類…