VC开发Windows客户端软件之旅——前言

从第一次拖着行李入京找活,至今已工作若干年了。这些年一直追逐自己的梦想,跑过三个城市,换了三份工作,认识了很多业内的朋友。和朋友们闲聊时,发现很多人都已经不再做客户端软件了。有的转去做管理,有的转去做IOS,有的转去做安卓,有的转去做投资,“坚守”的人真的不多。曾经朋友开玩笑,说我们都是抱着微软的大腿,如果微软倒了,我们就失业了。我们说这句话时,多半是抱着戏谑的态度。时过境迁,随着移动互联网的兴起,PC的没落是难免的。相应的PC客户端没落,从业人数减少,现在想招一个合格的windows程序员已经非常难了。或许是出于一种纪念,我想起编写该系列博客,和大家讲讲windows客户端软件开发中的点点技术。让大家可以清晰了解到一款软件的诞生之旅。

一般一款软件的诞生会经过漫长的准备过程,比如立项、调研、交互设计、UI设计等。出于介绍Windows客户端相关技术的目的,开发之前的所有步骤将一笔带过。各个模块使用的技术细节也不会进行详细的介绍,因为该系列博文侧重于介绍实现模块所有“用”到的技术。同时出于考虑该系列博文主要针希望了解Windows开发软件的同学,所以也不会使用一些复杂的技术——比如boost。但是为了不失去乐趣,我将介绍hook技术,并使用hook技术实现一些“不可思议”的功能。

以下为我将介绍的模块提纲和相关的技术:

  1. 界面。Windows之所以可以占据PC端系统大部分份额,一个很重要的原因就是其有良好的界面交互。所以windows客户端程序,一个很重要的因素便是界面。我经历过很多项目,其中界面相关的重构及开发都占据很大的比例。往往一个产品做到最后一个迭代,也是界面改动需求——say goodbye。所以这块技术非常重要。目前这块技术分为如下几种:

    • 窗口控件类型。比如我们熟知的MFC和WTL,以及在这些基础上封装的金山贝壳UI引擎等。
    • 无窗口控件类型。比如DUI和Htmlayout,以及一些对浏览器内核封装后的界面引擎。
  2. 网络。在互联网如此普及的年代,假如你的软件没有联网功能,那可能就真的out了。一般情况下,我们软件会使用到如下网络行为:
    • 上传。除了一些无良的公司会偷偷上传一些用户信息外,其中一个用到上传功能的场景是:上传崩溃分析日志。
    • 下载。下载是让软件实现更新功能的必要技术。如果一款软件失去了自更新,我一般认为它就是“僵尸”了。因为它已经失去了“重生”的机会。
    • 查询。对于一些机密算法,我们放在本地自然不合适,因为破解对高手来说是easy的。那么我们通过网络向服务器提供“物料”,让保存机密算法的服务器告知我们计算结果。
  3. 数据。数据的形式非常多。如果我们一旦涉及通信,便会有数据参与。比如和服务器通信,我们可能需要对数据进行加密或者hash。我们会在之后介绍如下算法的使用:
    • MD5。它是一种hash算法,之前人们一直认为该算法是唯一性很高的算法。它一般用于做数据校验。前几年中国某大学教授发现MD5可以发生碰撞,但是MD5在计算机界的地位还是无法撼动的。可以说我们日常使用的软件里,几乎都存在MD5算法。特别是一些URL请求,其中一些字段就是某些字段组织后进行MD5计算后的结果。这对做过协议破解的人来说,应该是司空见惯的。
    • AES。它是一种加密算法,它是用于取代DES算法的。
    • DES。它也是一种加密算法,但是已经out了,尽量使用AES吧。

    数据是什么格式,是CS端相互约定的。我将介绍如下两种格式的使用:

    • XML。
    • Json。

    数据如果过大,可能要压缩或者解压。这块我将介绍两种库的使用:

    • zip
    • 7z
  4. 日志打点。日志打点的作用不可小视。对于开发同学,日志可以标识程序执行的脉络,从而方便我们定位问题。对于产品交互设计同学,打点可以帮助统计一个按钮被按下多少次,是经过什么顺序被按下的,从而我们可以依据这些数据设计出更合理的交互。有时候,我们安装一款软件后,往往会有个勾选——帮助我们改进。如果你勾选了,那么这款软件就会上传这些日志打点信息。一般,每条日志,都会携带用户标志信息。对于没有账户系统的软件,用户标志一般是若干硬件信息(硬盘序列号等)组合后的结果。
  5. 崩溃。可能除了著名的Hello World,没有哪款著名的程序可以保证自己不崩溃。对于折腾过破电脑或者安装过很多杀软的同学来说,应该见过蓝屏是什么样子——操作系统崩溃了。连操作系统都会崩溃,更何况我们写的程序呢?所以崩溃并不可怕,可怕的是我们不能收集崩溃日志和不会分析崩溃日志。这块技术,我将讲解两个模块:
    • 崩溃日志生成。
    • 崩溃日志分析。
  6. 数据库。任务一款软件,都可能试图在系统本地留点什么——老子到此一游。那软件怎么刻字,又刻在什么地方呢?简单点,写几个文件就行了。复杂点就要使用到数据库了。

以上基础的模块介绍完后,我们会插入一些有意思的技术:

  1. 进程间通信。有时候,我们需要调用其他进程来完成任务。一种可能是这款软件是我们自己写的,我们可以在软件代码内部编写进程间通信代码。另一种是这款软件只有固定的输出,我们需要接管其输出,完成单向通信。
  2. 云指令。这是一个非常有意思的主题。通过指令可配置化,我们可以像控制网页一样方便的控制客户端的行为——一般情况下,如果我们要改变客户端逻辑可能需要修改代码并发布新的版本。采用云指令后,我们只要改动服务器配置便可以轻易完成对客户端行为的改变,而不需要走漫长的发布和升级流程。
  3. 修改别的进程的行为(入侵)。入侵可能每个技术Geek都曾尝试过的经历。为了让我们这次开发之旅变得有意思,我会在最后做个善意的“入侵”,完成一些好玩的功能。

希望经过这次旅程,大家可以对windows客户端开发技术和模块有个了解。可以借助该系列博文中的模块,快速搭建自己的应用。

时间: 2025-01-10 08:46:51

VC开发Windows客户端软件之旅——前言的相关文章

腾讯QQ的开发分客户端软件和服务器端软件

Windows客户端主要是C++ COM/ATL Q+Web 后端C++ CGI ,前端javascript和flash 望采纳 腾讯QQ使用何种开发平台? 腾讯QQ的开发分客户端软件和服务器端软件两部分. 客户端采用 Microsoft Visual C++开发: 服务器端软件采用Linux gcc开发 : 数据库采用MySql 数据库. 腾讯QQ采用标准的TCP/IP协议为通信协议. TCP/IP协议中又分为TCP协议和UDP协议,TCP协议是面向连接的协议,它比较安全.稳定,但是效率不高,

VC++开发Windows系统全局钩子

本文的大部分内容属于对一篇网文的实践与练习,同时参考的还有一本书,在此向网文与书的作者表示敬意. 这个程序是一个windows系统键盘监控程序,随着开机自动启动,可以监控系统中各用户的键盘,并将按键记录写在指定的log文件里. 程序分为两个部分:全局钩子DLL和一个隐藏的单文档应用程序. 全局钩子DLL 创建基于“MFC AppWizard(dll)”的“扩展MFC DLL(Extension MFC DLL)”类型工程KeyBoardHook 在自动生成的源文件KeyBoardHook.cpp

Windows客户端开发简介(一)

在这样一个移动当道的年代,我跟大家讨论Windows客户端开发,似乎有些倚老卖老的意思了.然而我却觉得无论什么时候,Windows客户端开发其实还是有着不少实用经典的技术的.对了,确切说我是要说说Windows C++客户端开发,什么WinForm,WPF,并不在讨论范围之内,我承认用.NET ,C#做Windows客户端对开发人员来说确实是件轻松愉快的事,但是因为这些技术由于种种原因(主要还是效率问题)在经典的Windows客户端程序采用的少之又少,所以我打算把他们略过. 我并不是什么微软技术

用互联网思维来开发客户端软件——项目开发小结

随着智能手机.平板电脑的快速发展,台式电脑在个人用户那里已经没落了,但是台式电脑仍然是企业用户工作中的主要工具,且具有不可替代的作用.客户端软件在企业级用户那里有着不可替代的作用,结合时代发展,我们应以互联网思维来做好企业级应用客户端软件?研发快速迭代.快速试错,把大功能拆分成小功能,分阶段实现,追求微创新. 通常企业级应用的客户端,就是企业管理应用系统,一般分为BS与CS两种架构,CS架构要求在用户的电脑上装上客户端与数据库,或者数据库安装在数据库服务器上.这种方式我们经常会碰到一些问题,比如

windows客户端开发调试工具

本文介绍windows常用开发与调试工具. 1.windows常用开发与调试工具 1.1 Sysinternals 内核大神打造,含大量windows系统工具,windows开发必备神器,大神被MS招安. 下载地址:http://technet.microsoft.com/en-us/sysinternals Procmon.exe 监视程序运行过程中的动作,可用于性能监控. procexp.exe 相当于升级版的任务管理器,可以查看加载模块,模块查找,线程列表(含CPU百分比), 创建dump

Windows客户端C/C++编程规范“建议”——前言

前言 工作中接触了很多编程规范.其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:"该规范不适用于Windows平台开发".看来这份规范是由做其他平台开发的同学制定的.那么做Windows开发的人都去哪儿了?后来由于工作需要,项目组需要我制定一份编程规范.这也是我这系列博客的由来.(转载请指明出于breaksoftware的csdn博客) 说到"规范"",可能没多少人喜欢这样的东西.相信很多工程师和我一样,都

windows客户端开发--也许是一条不归路

如今的Windows客户端开发,已经被同行嘲笑为鸡肋,甚至有些人认识做Windows客户端就是一个笑柄. 食之无味,弃之可惜. 不可否认,PC端没落的很快. 但是想说的是,任何一门技术都有存在的道理. 微软就是所有Windows客户端开发人员的大腿,虽然这个大腿让人捉摸不定,主方向总是变化. 换言之,Windows客户端开发难度不小.如果你能轻松的驾驭指针.内存.类等等,即使有一个Windows客户端彻底完蛋了,你也许只用一个星期或是一个月就掌握了另一种编程语言开发. 重要的是思想~ 我个人认为

WPF学习开发客户端软件-任务助手

本人纯属WPF新手,布局和WPF的开发水平相当欠缺,从个人来说,还是比较喜欢WPF的,有人说WPF是界面加上WINFORM,我不这样认为,WPF与WINFORM主要的不同在于数据绑定. 这个软件虽然功能比较简单,没有做分层设计,也没有使用MVVM的开发模式,但也确实花了我不少的时间,算是这段时间学习WPF的结果吧,在此给大家展示一下,也给同行的新手门一个参考的例子(喜欢不会是误导). 软件具体功能如下: 1.本软件可以设置计划任务运行的周期:一次.每月.每天.每小时.间隔分钟等不种不同的运行模式

windows客户端开发--为你客户端sign一个签名证书

郑重声明:该方法自娱自乐,虽然写入了签名,但是在微软系统免签证书不是合格的. 什么是签名? 话不多说,上图(没图说个xx): 微信windows客户端.exe安装文件: 再看另一个.exe文件: 通过两个图片的对比你就知道有没有数字签名的差别了吧. 好,现在开始我们的签名之旅: 首先,我要默认一个前提,你是一个程序开发者,你的pc上已经安装了visual studio. 比如说我们的exe叫test_siginature.exe,讲它放在桌面上吧. 1 打开vs工具命令提示符 2 创建 X.50