m0_61078026
2021-10-07 15:47
采纳率: 0%
浏览 3.4k

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

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

  • 收藏

20条回答 默认 最新

  • 胸毛男 2021-10-08 11:31

    思路: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

    10 4 打赏 评论
  • Goblin_M 2021-10-08 11:03

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

    3 1 打赏 评论
  • jockbutt 2021-10-07 16:19

    其实如果截图的话,QQ就可以。
    如果你想自动刷新的话,其实你可以写一个脚本。
    python或者c++都行,如果你懒的话,可以用一些现成的连点器软件来记录你一次的操作,每两分钟实行一次就行了

    1 打赏 评论
  • ak01_10 2021-10-09 13:08

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

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

    1 打赏 评论
  • Visual Studio 2022 2021-10-07 16:24

    SetTimer

    打赏 评论
  • 神仙别闹 2021-10-07 17:37

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

    img

    2 2 打赏 评论
  • hbxncjs 2021-10-08 09:18

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

    打赏 评论
  • 李筱宝 2021-10-08 14:35

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

    2 2 打赏 评论
  • limhabit 2021-10-08 19:38

    以下代码,运行结果为:
    定时运行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
    
    
    
    
    
    打赏 评论
  • Roc-xb 2021-10-08 19:51

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

    打赏 评论
  • 急速光粒 2021-10-09 08:43

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

    打赏 评论
  • lawesen 2021-10-09 14:22

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

    打赏 评论
  • isSamle 2021-10-11 20:07

    1.如果是自己开发的软件,要接口写个轮询
    2.如果是别人的软件
    2.1方法一:python写个定时任务脚本挂在后台,每隔两分钟触发一次
    2.2方法二:用脚本精灵直接录制

    打赏 评论
  • IT老张 2021-10-11 23:11

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

    打赏 评论
  • Alan.hsiang 2021-10-12 00:01

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

    打赏 评论
  • weixin_34115936 2021-10-13 18:39

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

    打赏 评论
  • vigiles 2021-10-13 23:20
    打赏 评论
  • Secure0708 2021-10-14 11:14

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

    打赏 评论
  • 网友疯 2021-10-14 11:35

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

    img

    img

    打赏 评论
  • D狂风R 2021-10-07 18:11

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

    1 打赏 评论

相关推荐 更多相似问题