Windows客户端开发那些事儿
文章平均质量分 66
用现代的方法进行Windows客户端开发
一苇渡江694
无有功德,一苇渡江
展开
-
解决方案--gloox源码编译错误
在博客《解决方案–VS2015编译的程序在其他机器上缺少msvcp120.dll》中,讲诉了一些问题,和解决方案,最后又遇到了gloox编译错误的问题?问题如下:1>------ Build started: Project: gloox-1.0, Configuration: Release Win32 ------ Creating library C:\Install\gloox-1.0.1原创 2015-10-26 21:20:22 · 3054 阅读 · 1 评论 -
windows客户端开发--实现一个多线程定时器
go了很久了,但是生活还得继续,工作还得继续,今天跟大家分享一个多线程的定时器。Windows为我们提供了SetTimer和KillTimer 启动 SetTimer(m_hWnd, TESTWM_SENDDING_EMAIL_TIMER, 500, NULL);响应 然后响应uMsg == TESTWM_SENDDING_EMAIL_TIMER销毁 KillTimer(m_hWnd, TE原创 2017-05-12 11:18:03 · 3293 阅读 · 0 评论 -
Windows程序设计--起步
第一个windows程序: 首先建立一个win32 application。对于二者的区别可以参见博客《Hey,别搞错了Win32项目和Win32控制台程序》main函数我们都很熟悉,而且许多程序员更加倾向于main函数也应该有个明确的返回值。 windows程序的winmain函数与main函数有相同的组成部分,即include语句、程序入口、函数调用、以及return语句。#include<原创 2015-09-08 14:03:34 · 7923 阅读 · 3 评论 -
Windows程序设计--窗口与消息
进行Windows程序设计时,其实就是在进行一种面向对象的编程。在面向对象中,对象是代码和数据的组合,一个窗口也是一个对象。在用户眼中,窗口是屏幕上的对象,并可借助键盘或鼠标直接与之进行交互。用户对窗口的输入以“消息”的形式传递给窗口,而窗口也借助消息来与其他窗口进行通信。窗口创建看似容易,调用CreateWindow函数即可。但是在创建窗口之前,需要注册一个窗口类。而窗口类又确定了处理窗口消息的窗原创 2015-09-09 14:43:04 · 6861 阅读 · 2 评论 -
Windows程序设计--文本输出(一)
绘制和重绘 之前就写过,windows是一个消息驱动的系统,有两种方式把各种事件通知给应用程序:1是把消息放在应用程序的消息队列中;2是向适当的窗口过程直接发送消息。 这里主要讨论的是WM_PAINT消息 ,以下任何一个事件发送,窗口过程都会收到一条WM_PAINT消息: 1用户移动一个窗口,导致原来被遮盖的部分窗口暴露出来; 2用户调整了窗口的大小; 3程序调用ScrollWindow或原创 2015-10-21 23:10:45 · 21925 阅读 · 0 评论 -
VS2015--win32工程配置的一些想法之VS2015编译的程序在其他机器上缺少msvcp120.dll
今天分享一个自己在开发过程中遇到的困难。用VS2015开发了一个windows客户端(win32项目),在自己的机器上运行很流畅。当你得意的把releas版本进行打包,并进行发布后,问题来了?很多人反馈运行时缺少msvcp140.dll,甚至有人在XP系统上完全不能用。那么首先看看是如何解决的: 在工程上打开属性,选择C/C++,选择代码生成,把运行库改为“多线程(/MT)”。重新编译即可。 但原创 2015-10-26 20:54:22 · 11925 阅读 · 5 评论 -
谷歌C++编程规范补充--windows编程规范
之前博客《谷歌C++编程规范笔记》整理了一些关于C++ Style方面的东西,看的是中文版本的。但是今天翻阅英文版本的,在最后,发现了 Google C++ Style 关于windows的。Windows programmers have developed their own set of coding conventions, mainly derived from the conventio原创 2015-10-27 22:03:58 · 8132 阅读 · 1 评论 -
详解VMware Workstation 12 安装虚拟机
一、背景作为一个windows客户端开发人员,不得不面对的就是windows版本兼容问题。比如说为了使开发的客户端兼容XP,需要在VS编译器中的平台工具集选择“Visual Studio 2015-Windows xp(v140_xp)”等。为了方便开发人员自己测试,在自己的电脑上运行多个系统就ok了。虚拟化巨头VMware发布了VMware Workstation 12 ,能很好的贴合win10的原创 2015-10-30 22:49:44 · 5505 阅读 · 2 评论 -
windows程序托盘图标以及消息提示--基本知识(NOTIFYICONDATA)
首先介绍一下基本知识: NOTIFYICONDATA结构体,语法如下:typedef struct _NOTIFYICONDATA {DWORD cbSize;HWND hWnd;UINT uID;UINT uFlags;UINT uCallbackMessage;HICON hIcon;TCHAR szTip[64];DWORD dwState;DWORD dwStateMas原创 2015-10-31 14:17:17 · 9940 阅读 · 0 评论 -
windows程序托盘图标以及消息提示--基本知识(Shell_NotifyIcon)
之前说了NOTIFYICONDATA结构体的一些内容,下面继续。Shell_NotifyIcon函数,向任务栏的状态栏发送一个消息。原型如下:BOOL Shell_NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA lpdata)参数简要说明: dwMessage为输入参数,传递发送的消息,表明要执行的操作。 可选的值如下: NIM_ADD 向托盘区域添加一原创 2015-10-31 14:26:25 · 8375 阅读 · 1 评论 -
windows程序托盘图标以及消息提示--示例程序
之前两个博客介绍一些基本姿势,都是msdn上的,今天就介绍一下如何使用吧。为了简单起见,还是创建一个MFC based on dialog 功能吧。1创建托盘图标,封装了成一个函数:NOTIFYICONDATA m_nid;bool SetupTrayIcon(HWND m_hWnd){ m_nid.cbSize=sizeof(NOTIFYICONDATA);// 结构大小 m_原创 2015-10-31 14:56:09 · 8328 阅读 · 3 评论 -
Windows程序设计--文本输出(二)
今天要详细讲解一下TEXTOUT,它是显示文本最重要的GDI函数。CSDN是这样描述的: The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color.我们看看他的原型:BOOL原创 2015-11-01 22:07:10 · 4327 阅读 · 3 评论 -
windows客户端开发--使你的客户端运行时记住上次关闭的大小和位置
几乎所有的windows客户端都可以调整大小,所以用户根据自己的喜好调整客户端的大小和位置。但是当该客户端退出后,重新运行客户端的时候,我们往往又要调整自己喜好的大小和位置。微信的windows客户端做了记住客户端退出时候的大小和位置,下次运行的时候直接,窗口直接显示为你喜好的大小和位置。现在的任务就是八一八这个小小的功能。首先,你肯定是想到了使用配置文件。再客户端退出的时候,把客户端窗口的信息记录原创 2016-02-18 20:40:45 · 13587 阅读 · 5 评论 -
Windows API (包含了所有Windows API)
Windows API (包含了所有Windows API)Api函数名 函数说明 WIN16可用 WIN95可用 WINNT可用-------------------------------------------------------------------------转载 2016-02-18 21:57:46 · 6604 阅读 · 3 评论 -
windows客户端开发--使你的客户端运行时记住上次关闭的大小和位置(win32 application)
之前博客写了MFC如何存储windowplacement这个结构体,我们用的是写入注册区。在win32 application中,也试图将信息写入注册区。但是越来越觉得小题大做,于是,还是写入.ini文件吧,写入和读取自己定义的.ini文件,而不是写入win.ini。读写.ini文件是个老掉牙的问题了。但是此时,我们要写入的是一个结构体,我们如何做到呢? 我们读取的数据也是要存入一个结构体,又是如原创 2016-02-19 20:32:11 · 3477 阅读 · 0 评论 -
windows客户端开发--通过ShellExecute函数打开浏览器
在我们的客户端中常常会有一些link,点击后希望通过浏览器导航到该链接。我们是通过ShellExecute函数来实现的。ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。注意,要使用这个函数,要引入头文件:#include <shellapi.h>看看函数原型:ShellExecute(hWnd: HWND;原创 2016-02-19 21:35:39 · 5655 阅读 · 2 评论 -
windows客户端开发--如何测量一个字符串显示的物理长度
首先需要说明的是,我所说的字符串的长度,不是string的length,也不是string的size。我指的是显示的长度,即物理长度。缘由: 之所以要提到这个,是因为遇到了一些问题。 再使用duilib进行开发时,发现label控件不能自适应宽度。思考: 这显示是这个库的一个不足,但是我们可以试图去修改一下这个库。但是本着开源的精神,或许这个库的设计初衷就是label不能自适应字符串的宽度呢?原创 2016-03-01 19:51:50 · 4778 阅读 · 1 评论 -
windows客户端开发--如何修复输入法提示框位置不正确
应该也有人会遇到这样的困扰:就是在edit或是richedit控件中输入时,输入法的提示框位置不正确。何为HIMC ?什么是IME (Input Method Editors)?广义上讲,IME是微软提供的Windows平台的一套输入法编程规范,依照这套规范(框架),你不需要处理太多输入法特性相关的操作(光标跟随,输入捕获,字码转换后输出到应用程序等),你只需要使用IME规范里面提供的工具函数(im原创 2016-03-05 22:30:46 · 4784 阅读 · 0 评论 -
windows客户端开发--使你的输入框具有拖拽上传的功能
今天谈一天windows客户端拖拽上传功能。其实主要是拖拽功能,上传是自己实现的。DragAcceptFiles 函数最重要的就是这个函数了,看看作用: Registers whether a window accepts dropped files原型:VOID DragAcceptFiles( HWND hWnd, BOOL fAccept);参数: hWnd Type: H原创 2016-03-07 22:31:24 · 4464 阅读 · 0 评论 -
windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)
可以我的blog的标题会让你误解,那么好,没图说了xx: 比如微信windows客户端发送了一张图片,我们可以预览这张图片,还可以保存到本地: 那么windows程序是如何下载这张图片的呢?是这样,别人给你发了一张图片,这张图片的原图会存在微信的服务器上,这样这个文件就对应了一个可下载的url。如果你拿到了这个url,用浏览器访问,你就可以通过下载这个原图了。但是,在浏览器下载是我们客户端控制不原创 2016-03-08 21:57:51 · 3224 阅读 · 1 评论 -
windows客户端开发--为你客户端sign一个签名证书
郑重声明:该方法自娱自乐,虽然写入了签名,但是在微软系统免签证书不是合格的。什么是签名? 话不多说,上图(没图说个xx): 微信windows客户端.exe安装文件: 再看另一个.exe文件: 通过两个图片的对比你就知道有没有数字签名的差别了吧。好,现在开始我们的签名之旅: 首先,我要默认一个前提,你是一个程序开发者,你的pc上已经安装了visual studio。比如说我们的exe叫te原创 2016-03-10 20:41:26 · 17028 阅读 · 2 评论 -
windows客户端开发--为你的客户端增加消息提示音
之前的之前已经分享了,windows客户端如何操作托盘图标。也就是如何控制图盘图标的闪烁。但是突然觉得差点意思,因为不管是微信还是QQ,有了新消息,除了托盘图标闪烁外,还要配上一个风骚的铃声。现在,就和你分享一下。有的朋友看到这里估计会心里骂娘了,不就是尼玛一个playsound函数嘛,至于写一篇博客吗。好,我要说的是,他说的没错,就是一个playsound函数,但是里面还是有不少的坑儿。plays原创 2016-03-10 21:13:35 · 2403 阅读 · 1 评论 -
windows客户端开发--获取windows系统中文件的MIME
首先,什么是MIME,是不是文件的后缀名呢?当然不是。有时候我们需要获取某个文件的后缀名,这也许对你来说太小case了,你可能不加思考的写了一个函数,更加文件名字符串查找最后一个’.’,然后取最有一个’.’之后的字符串,即为我们要得到的后缀名。看似非常完美,但确实漏洞百出。如果我的文件没有后缀名怎么办? 如果我的一张png图片,我强制把后缀名改为jpg怎么办? 这样你根据文件名字方法就不能获得百原创 2016-03-14 21:31:17 · 5037 阅读 · 2 评论 -
windows客户端开发--使用、屏蔽一些快捷键
每个windows客户端都有自己的一些快捷键,有的是windows系统提供的。今天就要与大家分享一下,在windows客户端开发过程中对按键的处理。ESC按键 Duilib这个库中,如果不做特殊处理的话,按下ESC会退出程序。这不是我们期望的,我们可以在我们的客户端中屏蔽esc,而微信windows客户端是把ESC按键作为最小化到托盘处理。我们也这样处理:if (uMsg == WM_KEYDOW原创 2016-03-15 22:55:18 · 6618 阅读 · 1 评论 -
windows客户端开发--duilib显示html
今天与大家分享的就是duilib这个库中,如何做到显示html的。有些控件,如Text可以通过showhtml函数来设置是否显示html富文本。加粗{b}加粗{/b}斜体{i}斜体{/i}下划线{u}下划线{/u}被选中{s}被选中{/s}换行{n}链接 这个是最重要的 个人觉得。{a http://www.baidu.com}百度{/a>}例如: 输入 www.baidu.com {n} {原创 2016-03-16 20:56:24 · 15543 阅读 · 0 评论 -
windows客户端开发--如何获取TrustedInstaller权限
今天的windows客户开发,就写写如何获取TrustedInstaller权限。一般是删除System32文件夹下东西需要这个权限。新建 一个txt, 名称任意。输入 以下内容:Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas]@="获取TrustedInstaller权限"[HKEY_CLASSES_RO原创 2016-03-17 22:06:46 · 8205 阅读 · 1 评论 -
windows客户端开发--为国际化做准备
一款好的windows client,当然要做国际化。今天先介绍几个函数,获取windows操作系统的使用语言。GetSystemDefaultLCID函数 这个函数很简单,没有参数,只有返回值: Returns the locale identifier for the system localeGetSystemDefaultUILanguageRetrieves the language原创 2016-03-20 00:14:52 · 3693 阅读 · 0 评论 -
windows客户端开发--windows api大全
网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConn原创 2016-03-20 00:34:17 · 5845 阅读 · 0 评论 -
windows客户端开发--使用tinyxml库解析xml文件
例如,微信windows客户端使用的duilib库中,界面就是用xml进行描述的。所以,今天我们就来谈一谈windows客户端中,也就是C++中如何解析xml。很多时候,我们都使用.ini文件来存储一些数据。xml确实是有很多的优点,某种程度上来说也确实可以完全取代ini,但也并非如有些人鼓吹的处处都比ini强。 xml,对于描述复杂的数据结构非常的方便,缺点相对ini使用麻烦一点。在表达较短的配原创 2016-03-22 22:08:44 · 4023 阅读 · 1 评论 -
windows客户端开发--为你的客户端进行国际化
之前博客讲过函数: GetUserDefaultUILanguage Returns the language identifier for the user UI language for the current user. 我们国际化主要是支持三种语言,简体中文、繁体中文、以及英文。获得用户使用语言 所以我们可以通过GetUserDefaultUILanguage函数来判断用户使用的是何原创 2016-03-23 20:12:15 · 6013 阅读 · 1 评论 -
windows客户端开发--客户端国际化中特殊处理(日期等)
之前介绍了windows客户端使用xml进行国际化。我们更多的时候关注的是显示,比如中文是关闭,英文系统显示为close。但是在国际化过程中,还有一些其他地方不要处理的。不只是简单的翻译而已,有时候需要改变规则。时间就是一个例子。从学习英语我们就知道,老外时间、地址等表达方式跟我们不同。所以这篇博客就是与您探讨探讨客户端国际化过程中对日期的特殊处理。现在的前提是,你拿到了一个时间戳,要把它进行显示。原创 2016-03-24 20:20:06 · 12956 阅读 · 0 评论 -
windows客户端开发--使用json11解析json
类似xml,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。json11是适用于c++11的一个轻量级的库,用于解析json.什么是json? JSON is short for JavaScript Object Notation, and is a way to store information in an organized, easy-to-原创 2016-03-28 22:41:03 · 9489 阅读 · 0 评论 -
windows客户端开发--xmpp协议gloox库
很多聊天室客户端都使用了xmpp协议。这个协议被人们诟病很多,但是对于简单的消息传送还是有很大的使用价值的。XMPP is the open standard for messaging and presence。gloox is a popular library for the Extensible Messaging and Presence Protocol (XMPP), formerly原创 2016-03-30 23:13:15 · 11348 阅读 · 0 评论 -
windows客户端开发--判断一个文件夹中是否存在文件夹
我们做windows客户端,往往需要与文件夹打交道。比如说某些特定的情况下,我们需要删除某个文件夹的子文件夹的全部内容。有时候程序执行的比较慢,我们需要判断到底是否删除了文件夹下的子文件夹呢?换种思维,如果我们能计算出某个文件下下有多少个子文件夹呢?FindFirstFile 函数功能描述:查找指定目录的第一个文件或目录并返回它的句柄 HANDLE FindFirstFile(原创 2016-04-05 22:02:54 · 7624 阅读 · 0 评论 -
windows客户端开发--为你的客户端增加日志系统(log4cplus)
客户端开发到一定阶段,不得不提上日程的就是日志系统了。今天就先跟大家介绍一个简单的,用于C++的日志系统库:log4cplushttps://sourceforge.net/p/log4cplus/wiki/Home/Summarylog4cplus is a simple to use C++ logging API providing thread-safe, flexible, and arb原创 2016-04-07 23:56:20 · 4181 阅读 · 0 评论 -
windows客户端开发--让你的客户端崩溃之前生成dump文件
debug时候我们可以很快速、精确的定位问题所在。但是对于release版本,我们往往无能为力。尤其面对一群难缠的客户,情况就会更加糟糕。而且对于release版本来说,crash的时候日志系统往往起不到任何作用。而且,我们也不可能捕获所有的异常,更何况,客户端崩溃的原因都是我们捕获不了的异常。这就需要dump文件了。dump文件是C++程序发生异常时,保存当时程序运行状态的文件,是调试异常程序重要原创 2016-04-08 23:18:34 · 18532 阅读 · 5 评论 -
windows客户端开发--改变visual studio配色方案
今天写点其他的,改变vs2015的配色方案。缘由: 使用xcode的几个同事都说我的vs2015中代码太难看了,于是就想好好调一调。简单调整: 工具->选项: 如何修改,自己看着办吧。但是问题来了,像我这样没有审美的人很蛋疼,也不知道怎么配色了。而且为了凑热闹,我更倾向于大众的选择。这里要隆重推出一个网址: http://studiostyl.es/在这里我们可以下载到一些配色方案,怎么下载原创 2016-04-09 23:56:02 · 16359 阅读 · 6 评论 -
windows客户端开发--监测windows某一服务是否开启
windows apiOpenSCManager function OpenSCManager( lpMachineName: PChar, lpDatabaseName: PChar, dwDesiredAccess: DWORD): SC_HANDLE; stdcall; 参数 lpMachineName 指向零终止字符串,指定目标计算机的名称。如果该指针为NULL ,或者它指向一原创 2016-06-29 00:33:51 · 6464 阅读 · 0 评论 -
Windows客户端开发--WMI技术介绍
时光荏苒,六道轮回。2004年,初中,欧锦赛,希腊神话,17岁的C罗哭成了泪人!2016年,工作,欧洲杯,能否再让C罗哭成泪人?想要获得计算机硬件的详细信息,我们可以使用WMI。今天就作为开篇,谈一谈什么是WMI? Windows Management Instrumentation (WMI) is a scalable system management infrastructure th原创 2016-07-07 23:37:31 · 29910 阅读 · 2 评论 -
Windows客户端开发--使用WMI获取显卡详细信息(win32控制台程序)
昨天接受了WMI的基础知识,因为自己也是刚刚接触,也是应用型的,没有研究的更深更透。今天,就写一个真是的例子吧。比如说,我们要获得计算机显示适配器的详细信息,包括显卡的型号,显卡驱动的版本号,以及显卡当前的状态。Win32_VideoControllerclass Win32_VideoController : CIM_PCVideoController{uint16 AcceleratorCa原创 2016-07-08 00:09:15 · 18198 阅读 · 8 评论