日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

谁动了你的主机-Windows“唤醒”和“开机”时自动拍照-狩猎者项目

發(fā)布時(shí)間:2025/3/15 windows 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谁动了你的主机-Windows“唤醒”和“开机”时自动拍照-狩猎者项目 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

項(xiàng)目介紹:

Java那邊的同事的筆記本上的鍵盤壞了,他懷疑是有人動(dòng)了他的電腦,但不知道是誰(shuí),身為C++程序員的我(雖然是個(gè)實(shí)習(xí)狗),但還是做出了一個(gè)小程序,當(dāng)Windows喚醒和開機(jī)時(shí),會(huì)自動(dòng)拍照,看看是誰(shuí)動(dòng)了他的主機(jī)。


本次采用C/C++語(yǔ)言。Qt框架


程序運(yùn)行截圖如下:


為了方便操作我還做成了托盤程序:



當(dāng)點(diǎn)擊保存設(shè)置后,會(huì)把上面的兩個(gè)ComBox的內(nèi)容寫入cfg.dat這個(gè)文件中,并且添加注冊(cè)表,讓其能夠開機(jī)自啟動(dòng)



當(dāng)睡眠或者開機(jī)時(shí),會(huì)自動(dòng)創(chuàng)建文件夾并且拍照:

如下圖:


源碼下載地址:

https://download.csdn.net/download/qq78442761/10453826

碼云下載地址:

https://gitee.com/IT1995/hunter/tree/master


下面將對(duì)此程序的原理給出詳細(xì)的說(shuō)明

程序的關(guān)鍵:

一:當(dāng)Windows睡眠的時(shí)候,程序是被“凍結(jié)”的,不會(huì)被運(yùn)行,但有一個(gè)東西喚醒時(shí)會(huì)變動(dòng)的,那就是系統(tǒng)時(shí)間。

所以實(shí)現(xiàn)功能的關(guān)鍵就是,在程序里面做一個(gè)計(jì)時(shí)器,這個(gè)計(jì)時(shí)器和系統(tǒng)時(shí)間做對(duì)比(運(yùn)行的時(shí)候,這兩個(gè)值是一樣的)。

當(dāng)喚醒后,他們之間會(huì)不一樣,然后更具這個(gè)差值,如果滿足某個(gè)條件,就拍照。

二:拍照的時(shí)候,一點(diǎn)要有“延時(shí)”,這個(gè)意思就是說(shuō)。每次拍照之間要有時(shí)間間隔,關(guān)閉攝像頭也要有,不然拍照是不會(huì)成功的。


上面的兩點(diǎn)就是程序的關(guān)鍵。

下面說(shuō)下技術(shù)上的細(xì)節(jié)。(所有源代碼可以在上面的鏈接中下載);

程序結(jié)構(gòu)如下圖所示:



插入注冊(cè)表:

void Widget::appAutoRun() {QSettings reg("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",QSettings::NativeFormat);QString strAppPath=QDir::toNativeSeparators(QCoreApplication::applicationFilePath());reg.setValue("狩獵者",strAppPath); }

判斷是否要拍照:

void MyWorker::beginJudge() {if(QDateTime::currentDateTime().toTime_t()-m_judNum<(uint)m_flexibleNum*10){//正常狀態(tài)m_judNum=QDateTime::currentDateTime().toTime_t();}else{//可以拍照了emit takeAPicture();} }


拍照時(shí)的細(xì)節(jié)(延時(shí))

void MyWorker::ALLDelay() {if(m_picNum>0){ //可以拍照了qDebug()<<"m_picNum>0";emit setPic(m_picNum);}else if(m_picNum>-1){ //關(guān)閉攝像頭qDebug()<<"m_picNum>-1";emit closeCamera();}else if(m_picNum>-2){qDebug()<<"emit this->initAllData();";emit initAllData();}else{}m_picNum--; }

創(chuàng)建文件并開始拍照:

void Widget::takeAPicture() {qDebug()<<"開始拍照!";m_timer_1->stop();if(!m_timer_2)m_timer_2=new QTimer;m_savePath=qApp->applicationDirPath()+"/"+QString::number(QDateTime::currentDateTime().toTime_t());QDir dir(m_savePath);if(dir.exists()){//應(yīng)該不可能有相同的文件夾Q_ASSERT(!"impossibility");}dir.mkdir(m_savePath);//開始拍照咯!m_camera=new QCamera(this);m_viewfinder=new QCameraViewfinder(this);m_imageCapture=new QCameraImageCapture(m_camera);m_camera->setViewfinder(m_viewfinder);m_camera->start();m_myWorker->setPicNum(ui->cameraCountComboBox->currentText().toInt());connect(m_timer_2,SIGNAL(timeout()),m_myWorker,SLOT(ALLDelay()));connect(m_myWorker,SIGNAL(setPic(int)),this,SLOT(takePic(int)));connect(m_myWorker,SIGNAL(closeCamera()),this,SLOT(closeCamera()));connect(m_myWorker,SIGNAL(initAllData()),this,SLOT(stopTimAndInit()));m_timer_2->start(1000); }


總結(jié)

以上是生活随笔為你收集整理的谁动了你的主机-Windows“唤醒”和“开机”时自动拍照-狩猎者项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。