显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

银河军团大本营

光荣的军团,永远的丰碑 <坚持原创>

 
 
 
 
 
 

[置顶] 获取Windows版本信息(可能史上最全最精确^o^)

2012-9-10 14:05:01 阅读7838 评论1 102012/09 Sept10

  在网上查了不少资料,总结了一个可能是史上最全最精确的方法来获取Windows版本信息。

  在google里搜索“msdn os version”及“获取Windows版本”可得到大量的资料,以下代码就是从网上搜集的资料整理而成(代码在VC++ 2005/VC++ 2005 Express/VS2008/VS2010以及VS2013中编译通过,为了方便在64位下编译,所以改成不用预编译的版本,如果要用预编译,请去掉 //#include "stdafx.h" 前的//):

/*****************************************************************************

Operating System Version PlatformID

Windows 10 10.0 VER_PLATFORM_WIN32_NT

Windows Server 2016 10.0 VER_PLATFORM_WIN32_NT

Windows 10 Preview 6.4 VER_PLATFORM_WIN32_NT

Windows 8.1 6.3 VER_PLATFORM_WIN32_NT

Windows Server 2012 R2 6.3 VER_PLATFORM_WIN32_NT

作者  | 2012-9-10 14:05:01 | 阅读(7838) |评论(1) | 阅读全文>>

Django在html中直接使用CSRF token

2014-3-18 9:29:17 阅读2661 评论1 182014/03 Mar18

  上周在做一个用代码直接创建HTML的表单时,运行Django后出现“Forbidden 403”的错误,网上查了一下说是Django CSRF保护机制报的错,对于使用template的情形,只需要在HTML模板中表单的定义之后加上“{% csrf_token %}”标签即可,Django在用模板生成HTML时会自动插入类似以下形式的代码:

<input type="hidden" name="csrfmiddlewaretoken" value="q4PUgQV0QoP6fhykLMchpoIHhq34q36H"/>

  对于Ajax,Django也提供了js脚本可以解决,见“https://docs.djangoproject.com/en/dev/ref/contrib/csrf/”。

  然而,我需要通过代码来动态生成带post的表单,因此需要在代码中获取当前的CSRF token,查看了Django的源代码后,发现可以通过request来取得当前的CSRF token,如以下代码所示:

from django.middleware.csrf import get_token

def build_html_response(request):

# build head

try:

作者  | 2014-3-18 9:29:17 | 阅读(2661) |评论(1) | 阅读全文>>

我心目中的智能电视遥控器

2014-2-10 10:43:26 阅读585 评论0 102014/02 Feb10

  前些天买了一台54吋的康佳智能电视,到家后才发现它的遥控器竟然有好几十个按键!唉,电视机倒是号称智能了,遥控器却依然做得那么傻,这是真正的智能电视么?

  从这个智能电视遥控器的设计可以看出,传统的家电厂商在追赶智能电视的潮流时,其实并没有真正地深刻理解“智能”的含义,他们仍然是在用传统电视的思维做智能电视。我觉得,所谓“智能”电视,并不仅仅是可以上网、玩游戏、装上各种各样的应用程序,更重要的是用起来简单!也就是让电视变得更“智能”,而不仅仅只是性能/功能更强大!

  其实我们仔细分析一下平常在看电视时使用遥控器的情形,你会发现遥控面板上的几十个按键大多数时候都没有用到,大家用得最多的也就是切换频道,调节声音而已。既然如此,为什么还要在遥控面板上放那么多的按键呢?我们完全可以转变一下思路:遥控面板上只有可数的几个按键,其他设置可以进入设置界面之后再设定嘛。

  如果深入地思考一下就会发觉,也许智能电视遥控器的设计并没有想像中那么难。我设想了几种类型,分别如下:

  一、仍然只使用按键,但只有少数几个按键。当然,仅仅这几个按键肯定不够,还需要控制程序的配合;并且此种方式不适用于上网等需要复杂输入的情形。

  二、按键+触控板,以触控板配合光标来实现多数操作,仅有的几个按键只是加快操作速度。如果加上重力感应等传感器,用来玩游戏就比较爽了。

  三、在智能手机或平板电脑上运行控制程序,通过WIFI来无线操控。此种方式完全通过软件实现,硬件上应该不需要特殊处理。

  四、使用类似体感控

作者  | 2014-2-10 10:43:26 | 阅读(585) |评论(0) | 阅读全文>>

如何判断程序在最前面(或窗体在最上层)

2013-11-15 21:57:37 阅读1340 评论0 152013/11 Nov15

  昨日再次发现自己多年前编写的一个简单音乐播放器在点击托盘区图标时表现得有些不太自然:如果播放器窗口可见,且位于其他窗口之后,按一般使用体验来说,此时应让窗口提前显示,而不是最小化。之前只是简单地判断程序是否最小化,如果最小化,则点击托盘区图标就显示窗口;否则就将播放器最小化到托盘区。

  简单的判断,导致使用体验不是太好,于是就想到用GetForegroundWindow/GetTopWindow等API函数来判断窗口是否在最前面(最上层),但测试后发现,在点击托盘区图标时用这些函数来判断都不合适,因为此时的最上层窗口可能是输入法窗口或托盘区及其相关窗口,而不是程序窗口本身!

  网上搜索的结果大多也是说通过GetForegroundWindow 来判断,但其应用范围有限。好在经过不断试验,得到以下代码,可以用来判断程序或窗口是否在最前面:

function isVclAppForm(h: THandle): Boolean;

var

r: TRect;

begin

GetWindowRect(h, r);

// check if TApplication Form (Width=0, Height=0)

Result := (r.Right = r.Left) or (r.Bottom = r.Top);

end;

function isTopMostWindow(h: THandle): Boolean;

作者  | 2013-11-15 21:57:37 | 阅读(1340) |评论(0) | 阅读全文>>

Access SQL语句纵列转横列(行列转换/交叉表)

2013-10-26 15:44:28 阅读2444 评论0 262013/10 Oct26

  Access的SQL不支持case when语法,但可以用子查询来实现类似的效果,举例如下:

项目编号 成本项目 用量金额

90012 99警察冬服

90012 付料 20.12

90012 小计 20.12

90012 动力 5.46

90012 工资 30.12

90012 福利费用 4.56

90012 制造费用 9.56

90012 合计 69.82

用SQL语句怎样实现如下查询结果?

项目编号 付料 动力 工资 福利费用 制造费用

90012 20.12 5.46 30.12 4.56 9.56

用子查询可以这样:

SELECT max(项目编号) as '项目编号',

(select sum(用量金额) from 项目成本用量金额表 where 项目编号=x.项目编号 and 成本项目='付料') as 付料,

(select sum(用量金额) from 项目成本用量金额表 where 项目编号=x.项目编号 and 成本项目='动力') as 动力,

作者  | 2013-10-26 15:44:28 | 阅读(2444) |评论(0) | 阅读全文>>

MSSQL中行列互换(交叉表)

2013-10-26 15:31:25 阅读606 评论0 262013/10 Oct26

  有一个表:

八位款号 色号 尺码 数量 单价 合计金额

16041512 01 48 2 250 500

16041512 01 50 3 250 750

16041512 01 52 1 250 250

16041512 01 54 4 250 1000

  想实现如下的结果:

八位款号 色号 合计数量 合计金额 48 50 52 54

16041512 01 10 2500 2 3 1 4

/*实现如下(以MSSQL为列)*/

create table T_Garment (

八位款号 char(8) not null,

色号 char(2) not null,

尺码 varchar(8) not null,

数量 int not null,

单价 decimal(18,8) not null,

合计金额 money not null,

作者  | 2013-10-26 15:31:25 | 阅读(606) |评论(0) | 阅读全文>>

MSSQL中用存储过程合并某一字段的值

2013-10-26 15:22:04 阅读545 评论0 262013/10 Oct26

/*以下代码示例是整理以前的资料所得,感觉有点意思*/

create table tb

KeyID int,

SecondID int,

KeyName varchar(16)

)

go

insert into tb values(1, 1, 'aaa');

insert into tb values(1, 2, 'bbb');

insert into tb values(1, 4, 'ddd');

insert into tb values(2, 1, '#####');

insert into tb values(2, 2, '@@');

insert into tb values(3, 3, 'OI&*%');

go

create procedure MergeNameByGroupID_tb

as

begin

set nocount on

declare @s varchar(255) /*合并结果不要太长*/

declare @id int

select KeyID, @s as KeyNames into #tb from tb group by KeyID

declare xxx cursor for select KeyID from #tb

作者  | 2013-10-26 15:22:04 | 阅读(545) |评论(0) | 阅读全文>>

Delphi直接打印带滚动条的窗体

2013-8-8 19:54:05 阅读1139 评论1 82013/08 Aug8

  论坛上有人问怎么直接打印带滚动条的窗体,要求是滚动条隐藏的部分也要打印出来。就在考虑这个问题的时候,忽然灵机一动,想了一个有点怪怪的方法,就是先将窗体调整到没有滚动条的大小,然后打印或直接获取图片:

procedure TForm1.Button1Click(Sender: TObject);

var

  w, h: Integer;

begin

   w := Width;

   h := Height;

   try

     if HorzScrollBar.Range > ClientWidth then begin

       ClientWidth := HorzScrollBar.Range;

     end;

     if VertScrollBar.Range > ClientHeight then begin

       ClientHeight := VertScrollBar.Range;

     end;

     //取得图片

     GetFormImage.SaveToFile('C:\form.bmp');

     //直接打印

  

作者  | 2013-8-8 19:54:05 | 阅读(1139) |评论(1) | 阅读全文>>

关于盗版的一些感想

2013-7-31 19:18:56 阅读554 评论0 312013/07 July31

  声明:本文并不是为盗版摇旗呐喊,更不是赞成盗版,只是想述说一个无奈的情形。

  论坛上有人调查说75%以上的程序员认为“盗版损害最大的是程序员的利益”,这里不讨论这个观点正确与否,只是想回忆一下刚开始学习编程的情形。

  记得十多年前下定决心花了五千多块钱自己装了台电脑,当时装的系统是盗版的Windows98,开发工具是C++ Builder 5,从那时起,终于告别了纸上谈兵式的学习方式。凭着不多的几本参考书,当时也不会利用网络,自己一个人开始不断地练习写代码。至于什么代码规范、设计模式什么的,根本就没想过。

  练习写代码足有一年多,终于找到了第一份编程的工作,从此进入了软件开发这一行。工作中的大多数开发工具、开发库以及操作系统基本都是用的盗版。曾经在一家公司,大家觉得Sybase的PowerDesigner这个工具软件挺好用,于是头说要是十万块以内的话,咱就建议老板买一套吧,结果后来一查差不多要十万美元,当时美元还是很坚挺的,对人民币汇率是8块多呢,呵呵,最后当然不了了之。

  回想起来,这么多年工作上用的、自己装的开发工具除了开源的大多是盗版的,开发工具就用过C++ Builder 5/6、Delphi5/6/7/2005/2007/2010/XE2/XE3、VC6/VS2003/VS2005,数据库用过SQL Server/Oracle/Interbase/MySQL等等,要是这些都用正版的话……呃,我还挣什么钱啊?!

  我也知道用盗版不好,问题是要没盗版,我恐怕都进不了这一行。好在,如今对

作者  | 2013-7-31 19:18:56 | 阅读(554) |评论(0) | 阅读全文>>

导出到Excel的一个怪招:障眼法^o^

2013-6-30 23:59:08 阅读719 评论0 302013/06 June30

  由于M$ Excel在企业里的广泛使用,应用软件中将各种数据报表导出到Excel的功能往往少不了。一般而言,导出到Excel有直接写文件和利用OLE方式两种方式。直接写文件又可分为直接输出为某版本的Excel格式二进制文件,以及输出新版Excel支持的XML格式;而OLE方式虽然功能比较强大,但写起来还是比较麻烦,并且如果写得不好,速度也难以保证。

  很久以前就发现M$ Excel可以直接打开Html文件,并正常显示。对于含有表格的Html,更是可以直接转为Excel的单元格来显示。前两天忽然想到:对于只是导出表格数据为主的应用,为什么不用Html格式呢?只要将文件扩展名改为.xls不就可以了?于是立刻试了一下,哈,还真的可以!不仅M$ Excel可以正常打开,用WPS电子表格也可以正常打开,而LibreOffice Calc则可以导入成电子表格!进一步的试验表明,修改数据内容后保存,M$ Excel仍然会将修改后的内容保存为Html,而WPS电子表格则会转换为Excel格式后保存。

  用Html格式有什么好处呢?直接写Excel二进制文件一般会选老版本的Excel,往往连Unicode都不支持;用OLE可能是功能最强大的,当然需要对Excel OLE比较熟悉,还要使用一些技巧,否则在遇到数据量比较大时,可能速度会很慢;导出为XML格式则需要研究M$的新版Excel XML格式,并且老版本的Excel不一定支持(当然,不考虑老版Excel的话,这种导出方法其实挺好的);而导出成Html格式相对而言则简单不少,且对于表格类的数据,Html格式足够用了,写代码方便,输出速度快,最后也只需要在保存时将扩展名改为.xls即可。

作者  | 2013-6-30 23:59:08 | 阅读(719) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

上海市 徐汇区 金牛座

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 
博友列表加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018

注册 登录  
 加关注