首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

利用 C++ Builder 實作電腦開機日誌記錄器

     編輯:關於C++

前言

公用機房或辦公室的電腦通常由多人共享,身為管理者或主要使用者,往往希望掌握機器何時被開啟使用。若能建立一份開機記錄,即可隨時透過登錄編輯器查看使用情況。本文將示範如何使用 C++ Builder 5 撰寫一個無視窗的背景程式,於每次開機時自動在登錄表中記錄開機時間與次數,並讓程式自身註冊為開機自動執行,無需手動設定。

程式特色

  • 全自動啟動: 程式會自行在登錄表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 註冊自身,只需執行一次即可完成部署。
  • 無視窗背景執行: 移除預設表單,打造隱蔽的後台程式,不干擾使用者操作。
  • 記錄詳細資訊: 包含開機總次數、每次開機的精確日期時間,以及程式首次註冊的時間點。

核心實作步驟

1. 建立無表單專案

在 C++ Builder 5 中選擇 File > New Application,將專案另存為 Logon.bpr。接著開啟 Project > View Source,刪除 Logon.cpp 中建立表單的兩行程式碼:

USEFORM("Unit1.cpp", Form1);
Application->CreateForm(__classid(TForm1), &Form1);

2. 撰寫 WinMain 入口點

完整的 Logon.cpp 程式碼如下,重點在於登錄表操作與自我註冊邏輯:

#include <vcl.h>
#include <registry.hpp> // 添加登錄表支援
#pragma hdrstop
USERES("logon.res");

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        int num = 0;
        TRegistry *Registry = new TRegistry;
        Registry->RootKey = HKEY_USERS;

        // 嘗試開啟記錄鍵值,不存在則建立並進行首次註冊
        if (!Registry->OpenKey(".DEFAULT\\Logon\\Records", false))
        {
            Registry->CreateKey(".DEFAULT\\Logon\\Records");
            if (!Registry->OpenKey(".DEFAULT\\Logon\\Records", false))
                return 0;
            else
            {
                // ① 將自身加入開機自動執行
                TRegistry *Reg = new TRegistry;
                Reg->RootKey = HKEY_LOCAL_MACHINE;
                Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
                Reg->WriteString("Logon", Application->ExeName);
                Reg->CloseKey();
                delete Reg;

                Application->MessageBox("登錄程式註冊成功!", "結果", MB_OK); // ②
                Registry->WriteInteger("開機次數", num);
                Registry->WriteString("程式註冊時間", Date() + Time());
                return 0;
            }
        }
        else
        {
            // ③ 讀取現有次數,遞增並記錄本次開機時間
            num = Registry->ReadInteger("開機次數");
            Registry->WriteInteger("開機次數", num + 1);
            Registry->WriteString("第" + AnsiString(num + 1) + "次開機", Date() + Time());
        }

        Registry->CloseKey();
        delete Registry;

        Application->Initialize();
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    return 0;
}

進階應用:軟體試用次數限制

將上述登錄表讀寫邏輯移植至其他 C++ Builder 應用程式,即可實作試用版限制。例如在 ③ 處加入判斷:

if (num == 30)
{
    Application->MessageBox("本程式已經使用 30 次,將要退出!!", "警告", MB_OK);
    return 0;
}

並移除 ① 到 ② 的自我註冊程式碼,即可編譯出具備使用次數限制的應用程式。同理也可擴充為時間限制機制。

部署說明

為產出獨立的 EXE 檔,請在 Project > Options 中取消勾選 Linker 分頁的 Use dynamic RTL 以及 Packages 分頁的 Build with runtime packages。將編譯產生的 Logon.exe 複製至目標電腦固定資料夾(如 Windows 目錄)並執行一次,即完成自動註冊與後續記錄功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved