實現乙個程式登入時長限制的小功能

2021-10-24 01:49:10 字數 2401 閱讀 5858

受專案的需求,需要實現程式臨時使用一段時間且25天後再次登入就不能再使用,基於vc++,使用的方法是通過讀寫登錄檔的首次登入時間和最近登入時間來實現記錄天數,從而實現該功能。

void limitloginbyreg()

;//第一次登入時間

cstring strtimefirst{};

ctime timefirst{};

char retkeyvallast[500]{};//最近一次登入時間

cstring strtimelast{};

ctime timelast{};

cstring strtimenow{};//當前時間

ctime timetemp = ctime::getcurrenttime();//獲取時間長度

strtimenow = timetemp.format("%y-%m-%d %h:%m:%s");

dword size = strtimenow.getlength() + 1;

unsigned char tmp[500]{};

cstring tmpstring = tmp;

hkey hkey;

dword type = reg_sz;

cstring path = "software\\local spcs-3000 dcs\\spcs-3000 dcs 系統管理程式\\initialization";

//登錄檔項為hkey_current_user,注意這裡要給key_all_access,才能對登錄檔同時進行讀與寫

long ret = ::regopenkeyex(hkey_current_user, path, 0, key_all_access, &hkey);

if (ret != error_success)

//獲取第一次登入時間

ret = ::regqueryvalueex(hkey,"limittimefirst", null, &type, (lpbyte)retkeyvalfirst, &size);

if (ret != error_success)

strtimefirst += retkeyvalfirst;

//獲取第二次登入時間

ret = ::regqueryvalueexa(hkey, "limittimelast", null, &type, (lpbyte)retkeyvallast, &size);

if (ret != error_success)

strtimelast += retkeyvallast;

//這裡使用vc++裡面自帶的計算時間差的類ctime

int nyear, nmonth, ndate, nhour, nmin, nsec;

sscanf(strtimefirst,"%d-%d-%d %d:%d:%d", &nyear, &nmonth, &ndate, &nhour, &nmin, &nsec);

ctime t1(nyear, nmonth, ndate, nhour, nmin, nsec);

sscanf(strtimelast, "%d-%d-%d %d:%d:%d", &nyear, &nmonth, &ndate, &nhour, &nmin, &nsec);

ctime t2(nyear, nmonth, ndate, nhour, nmin, nsec);

ctimespan tmspan = t2 - t1;

int idays = tmspan.getdays();

if (idays >= 25)

exit(0);

sscanf(strtimenow, "%d-%d-%d %d:%d:%d", &nyear, &nmonth, &ndate, &nhour, &nmin, &nsec);

ctime t3(nyear, nmonth, ndate, nhour, nmin, nsec);

tmspan = t3 - t2;

idays = tmspan.getseconds();

if (idays >= 0) ;//當前時間

strcpy(retkeyvalnow, strtimenow);

::regsetvalueex(hkey, "limittimelast", null, type, (lpbyte)retkeyvalnow, size);

} else

exit(0);//若是通過修改系統時間則不能登入

::regclosekey(hkey);

}

執行的結果如下圖所示,可以看到最後的結果是以二進位制顯示的,如果你想讓這不能修改,你可以對時間進行加密再寫入登錄檔。讀取解密再轉換為時間。

限制開啟乙個程式例項

限制開啟乙個程式,只執行乙個程式例項 實現的方法有很多,但簡單而常用的方法有下面幾種 方法1 handle handle createmutex null,false t only one instance if handle null else 方法2 if globalfindatom uniq...

通過session id限制僅乙個使用者登入

我們有的時候,希望乙個賬戶,僅在乙個地方登入。即,在別的地方登入該賬戶時,當前使用者會被自動登出。使用者資料表admin idname password session id 1root 63a9f0ea7bb98050796b649e85481845 3olcdjkj5jjaq2u9t30mbun...

做乙個拖拽的小功能

做了乙個拖拽功能,感覺有點卡頓。思路比較簡單,滑塊拖動的時候限制邊界條件就好了,完整 如下 拖拽 title style divclass drag style head body div class div class divclass drag div div script window.onl...