Windows下需要一款能刷新并截图的软件

Windows系统,有一个软件需要实时刷新才能收到信息,如果没有刷新,收不到信息。所以我需要一个能实现能隔2分钟刷新一下,如果有新信息来就截图自动保存下来的软件。有没有推荐的,谢谢了

思路:MFC程序。。。。。1、获得屏幕HWND 2、获得屏幕HDC 3、创建HDC句柄 4、取得屏幕矩形 5、创建匹配的bitmap 6、设置实体 7‘bitblt函数画一下 记得要删除临时的HDC 还有Bitmap 确实是用SetTimer定时截取。这是部分程序 你改吧改吧应该可用
void CServerMyFaTuDlg::CapSreen()
{
HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND.
HDC hScreenDC = ::GetDC(hWnd); //获得屏幕的HDC.
HDC MemDC = ::CreateCompatibleDC(hScreenDC);
RECT rect;
::GetWindowRect(hWnd, &rect);
SIZE screensize;
screensize.cx = rect.right - rect.left;
screensize.cy = rect.bottom - rect.top;
hBitmap = ::CreateCompatibleBitmap(hScreenDC, screensize.cx, screensize.cy);
HGDIOBJ hOldBMP = ::SelectObject(MemDC, hBitmap);
::BitBlt(MemDC, 0, 0, screensize.cx, screensize.cy, hScreenDC, rect.left, rect.top, SRCCOPY);
::SelectObject(MemDC, hOldBMP);
::DeleteObject(hOldBMP);
::ReleaseDC(hWnd, MemDC);
::DeleteObject(MemDC);
::DeleteDC(MemDC);
::ReleaseDC(hWnd, hScreenDC);
::DeleteDC(hScreenDC);

}
我做了个带界面的exe 需要vs2013的环境

img

运行起来是这样

img


每N秒次按照“桌面截图+年月日时分秒.bmp”格式存图。
是这样吗?

我又添加了些程序:把鼠标移动到屏幕右上角 点击鼠标左键 按F5刷新桌面 这是整个线程的程序


```c++
DWORD WINAPI CServerMyFaTuDlg::Thread_CapScreenSave(LPVOID pthread)
{
    CServerMyFaTuDlg* dlg = (CServerMyFaTuDlg*)pthread;


    int iIng = dlg->GetDlgItemInt(IDC_EDIT3);

    dlg->SetTimer(0, iIng * 1000, NULL);
    CString strFilePath;
    dlg->GetDlgItemTextW(IDC_EDIT4, strFilePath);
    dlg->GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);

    // 记录时间
    CTime tm = CTime::GetCurrentTime();
    CString strDateTime;
    CString strFinnal;
    while (dlg->abstate.load(std::memory_order_acquire)==TRUE)
    {
        tm = CTime::GetCurrentTime();
        strDateTime = tm.Format(L"%Y%m%d%H%M%S");


        HDC hdc = ::GetDC(NULL);
        int iWidth = GetSystemMetrics(SM_CXSCREEN); //获取屏幕水平分辨率
        int iHeight = GetSystemMetrics(SM_CYSCREEN); //获取屏幕垂直分辨率

        SetCursorPos(iWidth, 0);//设置鼠标位置
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//左键按下
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//左键弹起

        Sleep(10);

        //通过F5,刷新桌面
        HWND hWndProgram = ::FindWindow(_T("Progman"), NULL);
        HWND hWndDefView = ::FindWindowEx(hWndProgram, NULL, _T("SHELLDLL_DefView"), NULL);
        HWND hWndListView = ::FindWindowEx(hWndDefView, NULL, _T("SysListView32"), NULL);
        ::PostMessage(hWndListView, WM_KEYDOWN, VK_F5, 0);
        ::PostMessage(hWndListView, WM_KEYUP, VK_F5, 0);


        // 截图
        dlg->CapSreen();
        strFinnal = strFilePath + L"\\桌面截图" + strDateTime + L".bmp";
        if (!dlg->SaveBitmapToFile(dlg->hBitmap, strFinnal))
        {
            dlg->PostMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON1, BN_CLICKED), NULL);
        }

        WaitForSingleObject(dlg->hEvent, INFINITE);

    }


    return 0;
}

```
你要保证电脑没有开游戏,浏览器什么的,右上角要留出来可以点击鼠标的位置哦。

这是这个工程的源码链接,只能这样了 ┑(~▽ ~)┍
https://download.csdn.net/download/weixin_41376117/29638132

1.写一个VBS,什么编译,安装软件通通不用,执行就能刷新,
2.你这个软件也是奇葩,为什么要用户自己刷新才能更新消息,用户体验感极差。反人类呀

你这个所谓的软件,应该是像QQ、网易云音乐之类的软件吧,没有操作接口,要实现实时刷新,必须模仿人类的操作。
有两种方法:
1.用按键精灵,自己制定好刷新和截图的脚本。
优点是,按键精灵是现成的软件,不用自己从头开始写程序。
缺点是,仅仅限于按键精灵提供的功能,你不能临时加一些自己的想法
比如,截图时,如果发现图片没改变,也就是没有新消息,就删掉这图片。这些想法,你是没办法实时处理的。必须在按键精灵使用完后再另行处理。
2.用sikuli。
优点是,想实现什么功能就实现什么功能。比如我让它自动点刷新,然后截个图,再将这张图扔到百度文字识别解析,收集到最新消息,再来判断是否有最新消息,如果是旧消息,自动删掉这张图。或者有消息来时,我可以设置一下回复内容。
缺点是,要从头开始写程序。程序其实也不难,都封装好了。

按键精灵仅限于代替全手动的操作——鼠标点击、按键、快捷键实现截图。
如果你的操作过程既要包含手动操作部分,也要同步包含程序计算、处理等过程,那就只能用sikuli。

SetTimer

FastStone capture这个软件,有个计划任务,可以定时截图。

img

可以用按键精灵写个脚本,每隔两分钟点击刷新,然后如果刷新出了新消息,就截图

1、什么软件
2、刷新什么?刷新这个软件还是刷新 window 桌面,如果是刷新软件的话,需要知道刷软件的操作
3、怎么样才叫有新消息,是 window 提醒还是软件存在 新消息标识
4、如果是刷软件的话请提供软件安装包和操作说明
5、如果是window 桌面的话请提供新消息标识
6、确定好之后可以采纳我,我可以提供脚本服务

以下代码,运行结果为:
定时运行xxx程序(程序名路径需人为输入在txt文档)X秒后截图,退出程序,间隔Y秒后,再运行程序截图。循环运行

X+Y=120秒。截图文件保存在程序文件所放置路径,以日期时间命名。
(本地试验运行测试有道词典,网易云音乐,截图OK)。

import time,os
import  win32con,win32gui
from win32api import WinExec
import ctypes
from PIL import ImageGrab

user32=ctypes.windll.user32
class sss():
    t=20
    classname=''
    title=''
    HWND=0
    left=0
    top=0
    right=0
    bottom=0
    lenth=0
    high=0
    
    def __init__(self,exe_Path="",t=20,nowpath="D:\\"):
        '''
        

        Parameters
        ----------
        exe_Path : 软件启动exe路径,格式如"C:\Program Files (x86)\Chroma\Chroma Solar Array Simulation Soft Panel.exe"

        Returns
        -------
        None.

        '''
        self.exe_Path=exe_Path
        self.t=t
        self.nowpath=nowpath
    def PV_Start(self):

        WinExec(self.exe_Path,1)
        time.sleep(self.t)
        self.title = win32gui.GetWindowText (win32gui.GetForegroundWindow())
        inittime=time.time()
        while time.time() - inittime<60:
            hwnd = user32.GetForegroundWindow()
            self.HWND=hwnd
            try:
                win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
                #win32gui.SetForegroundWindow(hwnd)
                win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, 0,0,0,0, win32con.SWP_NOMOVE | win32con.SWP_SHOWWINDOW| win32con.SWP_NOSIZE | win32con.SWP_NOOWNERZORDER)
                self.left, self.top, self.right, self.bottom = win32gui.GetWindowRect(hwnd)  # 获取窗口边界
                break
            except Exception :
                pass
                
    def PV_Kill(self):
        if self.HWND!=0:
            ba,exename=os.path.split(self.exe_Path)
            os.system("taskkill /F /IM "+exename)
    

    
    def capture(self):
        

        self.PV_Start()
        if self.HWND!=0:
            bbox = (self.left, self.top, self.right, self.bottom)
            im = ImageGrab.grab(bbox)
            im.save(nowpath+"\\" + time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())).replace(":",".")+ ".jpg")
            time.sleep(0.3)
            self.PV_Kill()
        
if __name__=="__main__" :

    nowpath=os.getcwd()
    with open(nowpath+"\\parameters.txt",'r') as f:
        for linedata in f:
            if linedata.find('SoftwareNamePath=')!=-1:
                paths=linedata.replace("\n","").split("=")[1]
            elif linedata.find('SoftwareStartTime')!=-1:
                ti=int(linedata.replace("\n","").split("=")[1])
    a=sss(paths,ti,nowpath)
    t0=time.time()
    i=0
    while True:
        if time.time()- t0 > i*120:
            i+=1
            a.capture()
```python



可以用脚本精灵来定时触发事件

什么叫需要实时刷新才能收到消息,不是太能理解。这个和2分钟定时截图又有什么关系,现象和目标都没描述清楚。

python可以实现你说的这种功能,有兴趣可以联系下我

我理解主要是两点:
1、刷新桌面,可以直接模拟发送F5键盘按键消息即可;
2、截图功能也比较简单,获取桌面DC,拷贝到内存中,保存成bmp图片就行了。

不同的软件,刷新方法都不同的,比如:浏览器打开的web页面?还是windows上安装的其他软件?刷新之前是否需要登录,是否需要做配置,不同的操作可能对应的解决方法也不同。

可以做一个exe工具,实现windows exe工具的控件操作和截图。
完全支撑你的需求。

路过,在macos下用python写了一个,基于像素比较图片,刷新内容有变化自动截图。看到很多大佬已经针对win回答了,这里就没有发布到win测试。

,自测还不错。

这个。可以python模拟鼠标点击,然后找一个截图软件设置快捷键。每次python模拟点击后就自动运行快捷键。实现了刷新和截图,也不用那么费事

我已经帮你写好啦哈哈 如果需要联系我 因为不知道具体怎么刷新 我没有加入 刷新功能
目前是定时截图 自动对比图片是否相同 然后保留 有改变 的截图

img

img

其实你可以说是个啥软件,这样更容易帮到你