JCHub

  • Home
  • Category
    • A/V
    • WebRTC
    • Beauty of Programming
    • Linux
    • Windows
    • Moments of Life
    • Campus Life
  • Reference
    • API Reference
    • Utilities
    • AV Test
    • Doc
  • Message Board
  • About
JCHub
Code as My Sword, Lost in Obsession
Moments of Life

我的PC软件清单

到今天win10用了快四个月了,我的5年历史老笔记本(大一时买的)还能流畅跑着,看电影,听歌,偶尔玩下单机游戏,跑VS2015都不卡。经常在网上看到有人说电脑很卡,我觉得重装系统是一个方法外,良好的软件使用习惯也很重要,要不每次重装系统不久又卡了。我觉得自己软件使用习惯还好,用了好多小众软件,这些软件比主流的强多了,而且轻巧。下面就分享下我电脑上的一些软件。 1)本地视频播放:Potplayer,比国产的暴风等强多了,强在哪里就不说了; 2)音乐播放:网易云音乐与foobar2000,网易云音乐主要用来找歌与下载歌曲的,foobar用来听歌,尤其是用来听无损音乐; 3)浏览器:Chrome,自己偶尔也写些小扩展; 4)文档编辑:现在用的是office家庭和学生版; 5)PDF阅读:SumtraPDF,小巧,启动快,而且是开源的; 6)笔记:Onenote,win10本身自带一个通用应用版本的,我自己主要用的是桌面版的; 7)文本编辑:notepad++,visual code; 8)下载:迅雷极速版以及Free Download Manager; 9)代理:shadowsocks; 10)编程IDE:Visual Studio社区版以及Pycharm 11)抓包分析工具:wireshark 12)输入法:搜狗输入法; 13)磁盘整理:smart defrag; 14)系统管理维护:Advanced SystemCare 以及CCleaner; 15)压缩:好压; 16)聊天:TIM; 17)虚拟机:VMvare,软件是官网下载的,只是序列号是网上找的。 目前常用的就这些了。

2015年12月11日 2comments 2583hotness 0likes Jeff Read all
Windows

VC实现程序单实例运行

有时候我们希望我们的程序只能运行一个实例。常见的一个方法是通过创建互斥对象实现。在主程序中加入如下代码即可实现: [crayon-69d8bc1ec652b764931124/]

2015年11月25日 0comments 1999hotness 0likes Jeff Read all
A/V

使用libVLC实现的播放器:支持双击全屏

背景 最近在学习duilib这个库,看了网上Alberl的教程,他那个仿迅雷播放器做的不错,我就直接拿来学习duilib了。不过这个播放器有个缺点,就是无法双击全屏,也就是鼠标放到libVLC播放窗口时无法响应消息,消息都被libVLC内部处理了。这对我们而言不是很方便。因为有时我们需要双击全屏,或者弹出鼠标右键菜单做一些操作。后来上网查了下,好多人遇到这个问题。下面是一些查到的解决方法。 解决libVLC无法响应鼠标消息 如下是查到的一些方法: 1)使用全局钩子; 2)修改libVLC鼠标消息处理代码,重新编译; 3)禁用子窗口消息。 第一种方法不安全,容易被杀毒软件干掉,而且效率不高,第二种方法麻烦,编译就得花你好多时间,而且很麻烦,第三种方法比较简单,解决方法如下: [crayon-69d8bc1ec7a35901252413/] 具体实现见下面。 基于duilib实现 duilib学起来还是很容易上手的,这里我的代码是基于Alberl的仿迅雷播放器。最后实现的界面如下: 按照上面的解决方法,在这个程序中我是这么解决无法响应消息的: 1)当开始播放某个文件后,创建一个一秒的定时器(也可以不创建,直接跳到直接第二步,创建定时器是为了确保我们处理时VLC窗口已经生成); [crayon-69d8bc1ec7a3f196058243/] 2)在定时器的回调函数中枚举得到VLC创建的窗口的句柄,通过spy++可以了解到libVLC创建的播放窗口名为:VLC video output,获取到VLC窗口的句柄后使用EnableWindow函数禁用掉键鼠输入,EnableWindow函数的作用是允许/禁止指定的窗口或控件接受鼠标和键盘的输入,代码如下: [crayon-69d8bc1ec7a43027597902/] 通过如上方法,在VLC播放窗口上的鼠标键盘消息我们都可以获得,这样就可以去实现自己想要的功能。比如我在全屏时响应WM_MOUSEMOVE消息,实现底部播放面板自动隐藏。双击全屏也很简单,当响应双击消息时,只显示作为libvlc父窗口那个控件,其他控件都隐藏即可。整个播放器的代码我已经上传到Github。 地址:https://github.com/yjfxfjch/JCHPlayer 我是用的是VS2015编译,低版本VS可能无法直接打开编译。下面一节是使用MFC做界面实现的版本。 基于MFC实现 1)在MFC对话框程序中,首先添加一个控件,这里我添加了一个Picture Contron:IDC_PLAYWND; 2)获得IDC_PLAYWND控件句柄; [crayon-69d8bc1ec7a47581843971/] 3)让libVLC播放对象设置gPlayHwnd 为播放窗口句柄,这样libVLC播放窗口就成为IDC_PLAYWND控件的子窗口; [crayon-69d8bc1ec7a4a864760115/] 4)开始播放后创建一个定时器(也可以不创建,直接EnableWindow相应窗口句柄); [crayon-69d8bc1ec7a4d596285730/] 5)定时器回调函数以及处理过程如下: [crayon-69d8bc1ec7a51910227530/] 在上述代码中,我们通过之前得到的IDC_PLAYWND控件句柄枚举得到子窗口VLC播放窗口句柄,接着通过EnableWindow函数禁止VLC播放窗口接受鼠标键盘输入。这时我们的程序就可以响应鼠标点击libVLC播放窗口的消息了; 6)设置全屏,主要是设置IDC_PLAYWND控件全屏时占满整个屏幕,然后隐藏其他控件以及标题栏,这样VLC子窗口就可以全屏播放了。不需要使用libvlc_set_fullscreen这个内置api,使用这个api无法达到效果。 最后实现的简单版本如下: MFC版本支持双击全屏的libvlc播放器代码我也上传到Github,具体的可以去看下。 Github地址:https://github.com/yjfxfjch/SimpleVlcPlayer

2015年11月23日 15comments 11123hotness 12likes Jeff Read all
Windows

libcef编译使用--使用VS2015

1.背景 现在好多客户端程序都内嵌浏览器,有的用于实现界面,有的用于实现一些特殊功能,比如网易云音乐,QQ客户端,微信桌面客户端等。如果要内嵌浏览器,传统的方法是加入自带的IE webbrowser activex控件,但是IE对html5标准的支持不是很好,无法完成一些最新的功能。此时webkit就是最好的选择,可是webkit是一个很复杂的工程,编译也非常麻烦。好在有人替我们完成这个工作。有个叫libcef的库,实现了对webkit的封装,我们只需要直接调用就可以了,从而往我们的程序嵌入webkit浏览器,实现我们需要的功能。上面说到的那三个软件都用到了libcef这个库,在这些程序的安装目录下我们可以看到libcef.dll,libEGL.dll等dll文件。 2.生成VS工程文件 从https://cefbuilds.com/下载预编译好的二进制包,我下载的是cef_binary_3.2526.1346.g1f86d24_windows32.7z,2526分支的32位版本。然后解压到本地,比如我的是D:\SDK\cef。虽然需要的dll以及两个lib文件已经帮我们编译好了,但此时libcef还不能直接使用,因为我们还需要libcef_dll_wrapper.lib这个文件,而这个需要我们自己编译,如果没有这个的话,我们运行里面的cefsimple: [crayon-69d8bc1ec8f7c116503807/] 会报如下错误: [crayon-69d8bc1ec8f86986124425/] 都是些 referenced in function _wWinMain@16的错误。 要编译libcef_dll_wrapper.lib文件,需要我们去生成VS工程文件,然后用VS打开编译。此时我们需要用到cmake软件。如下图所示打开cmake软件,设置代码目录以及工程文件生成目录: 接着点击Configure,选择编译器,我用的是默认VS2015自带的: 然后点击Generate即在cef目录下生成VS工程文件: 如下图,目录下已经生成了cef.sln解决方案文件,此时我们打开cef.sln文件 可以看到该解决方案下有5个工程: 编译libcef_dll_wrapper工程即可得到libcef_dll_wrapper.lib文件,然后我们编译运行示例工程cefclient,即可看到一个简单的浏览器,很简单吧。

2015年11月20日 9comments 62900hotness 9likes Jeff Read all
A/V

libvlc_new初始化失败

最近在做一个视频播放器,用到了libvlc,使用起来也是挺方便的,不过刚开始的时候遇到了一个问题: libvlc_new(0, NULL)这个函数总是返回NULL,后来发现是没把vlc的Plugins文件夹也放到程序执行目录,我只放了libvlc.dll与libvlccore.dll那两个dll文件,vlc初始化过程也需要初始化相应插件。放了之后,一切正常。 --------------------------------------------------------------------------------------------------- /*2015-12-25*/ 今天在linux下做libvlc开发,也遇到了libvlc_new执行失败的问题,我用的是QT框架。程序执行这一函数时候,报如下错误提示: [crayon-69d8bc1ecc049952673943/] 卸载重装vlc与libvlc-dev也没解决问题,后来查了些资料,发现问题是出在vlc的插件缓存,该缓存需要刷新。 [crayon-69d8bc1ecc052837204070/] 通过上述命令即可解决。 --------------------------------------------------------------------------------------------------

2015年11月13日 7comments 6519hotness 5likes Jeff Read all
Beauty of Programming

MFC WebBrowser控件如何实现滚动条滑动

最近在写一个自动刷流量的程序,用到了WebBrowser 控件,通过该控件往程序嵌入一个IE浏览器,MFC中如何嵌入该控件可以看下参考链接1。 由于要自动刷流量,所以就要模仿用户平时浏览网页的习惯,也就是打开网页,然后慢慢向下滚动鼠标。在程序中我是通过滑动右侧滚动条实现的。刚开始我的代码是参照链接3给的,不过该代码在有些网页下实现不了滚动条滑动,也就是没反应。我上网Google了下,发现好多人也遇到类似情况,比如链接2与链接4中的内容,不过都没人给出答案。我自己也试了好多种方法,比如修改WebBrowser的IE版本,最后也都是以失败告终。 过了几天在Google上搜索,无意间看到一段代码,试了下,有效果,在不同类型网页下都可以顺利滚动。哈哈哈。废话不多说,直接上代码: [crayon-69d8bc1ecd313723450576/] 通过上面函数的代码我们就可以实现WebBrowser向下滑动100像素。需要提醒的是,如果编译器提示undeclared identifier错误,我们需要包含mshtml.h文件。 [crayon-69d8bc1ecd31c989935401/] 到此就大功告成了,用定时器结合该代码就可以实现一个自动刷流量的程序,详细的我就不说了。 参考链接: 1)VC中调用WebBrowser简单的实现过程(图解过程) 2)如何获得webBrowser控件滚动条滑块的位置问题补充 - VC/MFC / 界面 3)Programmatically scrolling WebBrowser control from Visual C/C++ 4)webbrowser control: auto scroll + total webpage size

2015年7月21日 0comments 2155hotness 0likes Jeff Read all
Beauty of Programming

PortAudio捕获输出音频

记得前面说到使用PortAudio抓取声卡输出音频,通过PortAudio确实可以实现,但是我研究发现无法基于PortAudio使用Wasapi抓取计算机输出音频,PortAudio只能使用Wasapi抓取麦克风的输入音频,而不能抓取计算机播放的声音。 先说下PortAudio如何抓取声卡输出: 1)条件:不开启立体声混音。首先我们要枚举所有设备,然后获取各个设备信息,得到设备的HostApiType,代码实现如下: [crayon-69d8bc1ecdb95155667409/] 在上述代码中我们传入设备Index参数获取HostApi类型,PortAudio中定义的HostApi有如下几种类型: [crayon-69d8bc1ecdb9d343513832/] 通过枚举所有设备我们获取ApiType为paWDMKS的设备,并且该设备的maxInputChannels参数不能为0,接下来在Pa_OpenStream函数传入的参数中设置该设备为目标设备即可,在回调函数中实现录音即可抓取计算机输出的音频,即Capture what we hear from the speaker. 2)开启立体声混音。同样要枚举所有设备,这次我们要获取ApiType为paWASAPI的设备,该设备的maxInputChannels参数不能为0(不开启立体声混音只有麦克风满足这两个条件),而且通过Pa_GetDeviceInfo( deviceIndex )->name获取到的设备名不能含有麦克风字样,最后按前面所说方法传入该设备Index即可抓取音频。 真正通过Wasapi 抓取音频是无所谓开不开启立体声混音的,通过Wasapi捕获音频有个条件是被捕获的设备要工作在loopback模式下,可以看下MSDN上的这篇文章:Loopback Recording。 通过Wasapi如何捕获音频,微软给出了示例代码:https://code.msdn.microsoft.com/windowsapps/Windows-Audio-Session-22dcab6b#content。由于我的系统不是win8,VS版本达不到要求,故没去编译这个示例代码。 这个链接是微软员工写的通过Wasapi捕获音频代码:http://blogs.msdn.com/b/matthew_van_eerde/archive/2014/11/05/draining-the-wasapi-capture-buffer-fully.aspx。这个代码确实可以捕获输出音频。

2015年7月15日 0comments 2987hotness 3likes Jeff Read all
Beauty of Programming

MFC自绘带背景颜色标题栏

最近在写一个EDID文件生成器,可以根据输入的一些参数生成EDID文件,大多数字节是固定的,主要是详细时序这几个字节的计算,界面用的是MFC,不过我重绘了,因为MFC原生界面太丑了。下图是EDID生成器初步的效果: 本文主要讲怎么绘制带颜色的标题栏,就像上图的蓝色背景标题栏。 1)首先是根据向导创建一个普通对话框程序,然后修改对话框Border属性为None。 2)在void XXXXDlg::OnPaint()函数中加入如下绘制代码: [crayon-69d8bc1ece3e7500377030/] 代码中我除了绘制标题栏,还绘制了程序底部的边框。 3)响应鼠标点击标题栏消息,实现鼠标拖动。在对话框的OnLButtonDown消息中添加如下代码: [crayon-69d8bc1ece3ef125361789/] 到此就大功告成了,实现了一个蓝色背景的标题栏。在后面的文章中我还会介绍如何完善该标题栏,加入关闭,最小化按钮。

2015年6月25日 4comments 5239hotness 8likes Jeff Read all
1…1112131415…26
Copyright Statement

Unauthorized reproduction or plagiarism in any form is strictly prohibited. For reprint requests, please contact via email.

Recent Comments
Addiea9 Published at 3 days ago(04 04202643001 08 08am26) Some called it luck. Then Sarah cashed 800K. Be ne...
snail Published at 2 weeks ago(03 03202633105 27 27pm26) 多谢,大佬。醍醐灌顶!
dongxuh Published at 9 months ago(07 07202573103 27 27pm25) 真心不错的博客,有机会能一起分享
南南 Published at 9 months ago(07 07202573103 15 15pm25) 写的超棒!
Jeff Published at 11 months ago(05 05202553105 15 15pm25) 2025-03-12的提交已经支持了
Ad

COPYRIGHT © 2026 jianchihu.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang