?關于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 上創建和顯示一個窗口是很基礎的操作,會用到CreateWindow
和ShowWindow
等函數。
#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. 文件操作
可以使用CreateFile
、ReadFile
和WriteFile
等函數進行文件的創建、讀取和寫入操作。
#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 !?