
Win32API
都市夜猫
不学无术,五毒俱全,见利忘义,重色轻友,好吃懒做,异想天开,瞻前顾后,患得患失,阴险狡诈,见异思迁
展开
-
关于保存网页为 MHTML Document 格式的第三种方式
前两种方式可以参见:http://dkfdtf.blogbus.com/logs/20284731.html 当我们用 InternetExplorer 或 WebBrowse 对象来保存网页为 mht 格式的本地文件时, 对话框是一定会出现的,不管你如何设置 ExecWB 的第二个参数。但我们可以用程序来模拟用户按键,这样就可以不需要用户的参与了。问题是 vfp 只能以单线程的方式来运行原创 2008-05-06 06:07:00 · 5272 阅读 · 2 评论 -
Windows 下直接控制打印端口
近日在完成最后的 POS 打印模块时有所斩获。POS 机的小票打印是一个不太好控制的内容,原因是小票的长度从来不固定,它要根据用户购买的货品种类,以及附加信息的不同(例如可能需要打印折扣/优惠/会员等汇总信息);用报表+自定义纸张也许可以解决,不过长度的精确计算是件不容易实现的事,且动态自定义纸张要求当前用户拥有管理员或打印机操作员的权限,受到的限制颇多;另一方面,POS 打印机通常都自带字库,而原创 2008-09-13 19:55:00 · 3522 阅读 · 4 评论 -
列举系统进程及调用模块
好久没有写东西了,这两天晚上抽空又熟悉了一下 TlHelp32 中几个 api 函数,有点收获,也要感谢 yrt888,如果没有他提出这个问题,我也不会研究这几个 api 的用法。下面是这个工具的 prg 版本(不知道如何上传文件到这个博客,换成 prg 版本可是花了点时间的),由于主要是研究 api 函数的用法,所以没有去实现一个工具应有的一些功能,例如点题头排序,右键菜单,自动刷新等,其实要自原创 2008-07-05 14:52:00 · 2174 阅读 · 12 评论 -
下载连接
昨天在分析为什么天网无法用 OpenProcess 打开时在网上搜了很多地方,最后在炉子的博客里转不出来了,牛人,可怕啊,还只是一个高中生!用他的 SSDT 看了一下,原来 pfw hook 了很多的 api,其中就有 OpenProcess,自然被它截取了,用 ssdt 恢复后就没有问题了,不过要用 vfp 来实现还真是难。顺便找到一个有不少工具的地方:http://cid-0b2eb0a417原创 2008-07-08 10:20:00 · 2849 阅读 · 7 评论 -
枚举局域网内所有的 SQL Server 服务器实例名
如果希望检查一个指定名称的 SQL Server 服务器是否存在,或希望给用户一个自己挑选需要连接的 SQL 服务器的话,就需要先枚举出局域网内所有的 SQL Server 服务器实例名称。我所知的方法有三种:1. 使用 SQLDMO 对象的 ListAvailableSQLServers 方法 loSqlDMO = CreateObject(SQLDMO.Application)原创 2009-02-02 22:08:00 · 4067 阅读 · 5 评论 -
留个记录
以后可能用得着的几个 api 函数,留个记录,以免到要用时忘了名称。IsUserAnAdmin - 判断当前用户是否是 Administrators 组的成员: declare long IsUserAnAdmin in shell32 ? iif( 1 == IsUserAnAdmin(), Yes, No)FindExecutable - 查找打开指定文件的缺省关联程序: ? G原创 2008-12-13 04:10:00 · 1338 阅读 · 1 评论 -
利用 Windows Crypt API 获取 MD5/SHA1 值
昨天有人给了我一段据说是根据网上的 java 程序改编的计算 md5 值的 vfp 代码,他说与他使用 md5 计算工具得到的 md5 值不同,想让我看看是哪里改编时出了问题。粗略看了一下,其实这段代码十分眼熟,在 csdn 的 vfp 讨论区中就曾出现过,只是我以前没有需要,所以都是一眼而过,但对那段长长的 hash 变换表却印象深刻。由于我也不知道具体的 md5 值算法,所以也只能先看那段 j原创 2009-03-14 09:28:00 · 9313 阅读 · 11 评论 -
计算可打印区域及页边距
其实以前就研究过这个问题,只是当时粗心,漏看了 MSDN 中参数,以至当时没有找到计算的方法。 #define HORZRES 8#define VERTRES 10#define LOGPIXELSX 88#define LOGPIXELSY 90#define PHYSICALWIDTH原创 2009-03-20 10:58:00 · 2294 阅读 · 3 评论 -
编程实现可执行文件的数字签名验证及证书安装
为何要制作数字签名,请参见我以前的文章 http://dkfdtf.blogbus.com/logs/10896854.html,我最近的一个项目也需要实现自验证功能,狐狸天堂上的金威先生也恰好有这个需要,所以索性将实现的核心代码公布出来,希望有深入研究的网友可以给予指正。如何制作数字签名需要的工具:makecert.exe, signtool.exe。这两工具网上大把,自己搜一下下载即可。如果安原创 2009-07-14 22:09:00 · 12305 阅读 · 1 评论 -
Vfp 调用 API 实现 RunAs 功能
下面是回答狐狸天堂中的一位网友提问时写的代码,他的情况是:正常情况下,所有机器都是以受限用户登录的,而他的程序需要自动注册一些 ActiveX 控件,由于机器数量比较多,虽然可以手工切换到管理员来完成安装,但以后增加功能时加入新的控件或重装系统时都需要手工切换,所以他希望他的程序可以在受限用户的权限下也能正常运行;也就是说,程序启动时,可以从一个加密文件中取出管理员口令,临时以管理员身份调用 re原创 2009-06-06 01:55:00 · 3611 阅读 · 12 评论 -
在新的虚拟桌面中运行你的程序
前两天有网友问如何让用户只有在正确登录后才能进入系统缺省的桌面。这个问题其实可以用虚拟桌面来解决,Windows 启动后让它自动运行我们的一个切换器,它创建一个新的桌面,然后在新桌面中运行我们自己的登录检查程序,只有检查通过的用户才切换回系统缺省的桌面,否则一直停留在新建的桌面中。由于新建桌面上不会有任何可操作的东西,且所有系统快捷键(包括 ctrl+alt+del)都只对缺省桌面起作用,所以不能原创 2009-11-12 12:22:00 · 4262 阅读 · 3 评论 -
生成 vfp2c32.fll 的代码
我通常不喜欢将那些小的 DLL / FLL 作为独立的文件来发布,我一般会将它们作为资源放入一个编译进 exe 的 dbf 文件的备注字段内,使用前再 Copy Memo res_name To ... 释放出来,这样可以避免文件被用户删除/替换/病毒感染造成运行错误。然而如果要在示例代码中使用 DLL / FLL,那么就需要将它一起提供给用户,碰到像 优快云 这样的 blog,不提供附件下载的原创 2008-09-09 23:01:00 · 244979 阅读 · 14 评论 -
带行号显示的 RichEdit 改造
不久前坛子上有人提出如何用 vfp 实现带行号显示的 RichEdit 控件,查了下资料,得到下面的结果。结论:不是很实用,有些问题不好处理,不像通常所用的代码编辑器,只显示一种字体,这个控件主要是用来显示 Rich 文本的,而且可能夹杂图像,所以显示行号的功能对此控件来说有些勉强。 示例下载:http://filer.blogbus.com/1502086/resource_15原创 2010-07-17 14:09:00 · 4235 阅读 · 6 评论 -
提取可执行文件中图标
上星期看到豆三版主在坛子上发表的提取 EXE/DLL 文件中图标的帖子,由于当时没有空闲时间,没仔细看代码,趁今天有空仔细看了看后,发现有些问题:1. 示例代码中使用了 ExtractIcon 来提取图标,用这个函数得到的不一定是 exe/dll 文件中图标资源的原内容。按照 msdn 上的解释,该函数会依据注册表中 HKEY_CURRENT_USER/Control Panel/deskto原创 2010-06-18 20:14:00 · 4562 阅读 · 5 评论 -
TreeView/ListView/ImageList 控件改造
今天又有人发短消息问怎样更改树控件的背景色,又是一个问了上千次的问题!实在不想再回答,就放在这里自己看吧。其实用到的 api 就一条,但是很多人都没有正确的使用它们。正确的方法是:1. 不要使用 v6 版的 TreeView 控件,同时也就不要使用 v6 版的 ImageList 控件,要用就都用 v5 版的。v5 版的除了不带检查框这个比较麻烦外,其它都可以用 SetWindowLong原创 2008-08-09 11:32:00 · 4100 阅读 · 17 评论 -
打开文件对话框缺省为缩略图方式显示
最新情况: 参见 打开公用对话框的初始视图类型问题------------------------------------------------------坛子上有人问到如何对使用 CommonDialog 组件显示的打开对话框缺省显示为缩略图的问题,其实上一次提出这个问题的时候我就已经回答过,可能楼主对 api 不熟悉,所以没有写出实现的代码。这次豆三版主挑出了我的马甲,只好勉为其难了。查原创 2008-08-30 19:58:00 · 3224 阅读 · 7 评论 -
创建快捷方式
C 程序员通常都会使用 IShellLink 来创建快捷方式,但 vfp 没有这么幸运,虽然可以用 CoCreateInstance 创建出一个 IShellLink 界面对象,可是却无法调用这种 COM 对象提供的方法,原因可以参见这里。所以一直以来都没有非常好的编程创建快捷方式的方法。常用方法是使用安装程序提供方法来在安装时创建它,可如果做成绿色版,就没这个方便性了,于是利用编程动态创建快捷方原创 2008-08-25 16:55:00 · 1850 阅读 · 16 评论 -
临时以其它登录用户来执行操作
有时我们需要临时以其它用户的权限来执行某项操作。典型的像从一个共享文件夹中复制数据到本地,如果这个共享文件夹处于一个安全的服务器上,且设置了只有指定的用户才能读取,这时这种技术就非常有用;通常的处理方法是临时映射一个本地盘符,用完后取消映射,但如果要处理的时间稍长,有经验的用户会察觉到它,并在你的程序执行操作的同时也同样可以访问到其中的敏感内容,所以我们需要秘密的访问它。Windows 有几个 A原创 2008-05-07 21:46:00 · 1270 阅读 · 1 评论 -
跨进程获取树控件节点信息
几天前在 myf1 上遇到人问如何获取其它程序中的树控件节点内容,当时就将要用到的几个 api 告诉了它,然后自己试了一试,成功!今天空闲时无意中又运行了它,结果却发现被探测的程序挂掉了!仔细回忆一下,原来测试时是在同一个 vfp 内运行两个表单,一个做测试对象,里面有一个 TreeView,另一个就是这个探测器;由于同在一个 vfp 进程内,所以没有发生错误。这次不同是,被探测的是 msdn 的原创 2008-07-16 21:27:00 · 3559 阅读 · 6 评论 -
枚举和清除 IE 缓存
使用 WinINet 中的函数实现枚举和清除 IE 缓存文件, Cookie, 浏览历史。PUBLIC oFormoForm = NEWOBJECT( MyForm )oForm.Show#define CSIDL_INTERNET_CACHE 0x0020#define CSIDL_COOKIES 0x0021原创 2008-08-01 04:29:00 · 2031 阅读 · 9 评论 -
检查是否已连接上 Internet
一小段检查 Internet 连接的代码:IF CheckInternetConnection() MESSAGEBOX( 已经连上 Internet ) ELSE MESSAGEBOX( 没有连上 Internet ) ENDIFFUNCTION CheckInternetConnection #define TEST_PROMPT原创 2008-08-04 05:20:00 · 1846 阅读 · 1 评论 -
获取指定类型文件的缺省系统关联
有时我们需要检查指定类型的文件是否存在缺省的程序可用来打开它,例如,如果我们要显示一个 .DOC 文件,首先我们要检查当前系统中是否安装了合适的程序可以打开它,下面的函数可以完成此功能:m.cType = xlsm.cExeFile = SysDefaultOpenedBy( m.cType )IF EMPTY( m.cExeFile ) MESSAGEBOX原创 2008-08-04 08:31:00 · 1261 阅读 · 4 评论 -
一种屏蔽所有系统热键的方法
今天在这个网站上看到一篇论述在新建桌面中运行应用程序来屏幕所有系统热键的文章,很受启发,按照它的思路和代码改成了一个 vfp 类,只要直接实例化它并调用它的 run 方法即可在新建桌面中运行一个应用程序。关于屏蔽系统热键的问题,以前看过很多方法,最好的方法是替换 GINA,但用 vfp 无法实现。这篇文章中的方法可以很容易的修改为几乎所有语言的代码。原理很简单:系统热键(如:ctrl+alt+原创 2008-08-05 00:34:00 · 4279 阅读 · 1 评论 -
让机器进入待机或休眠状态
系统待机 / 休眠----------------------------------------------------------------------------------------------DECLARE Long SetSuspendState IN PowrProf ; Long Hibernate, Long ForceCritical, Long DisableWak原创 2008-08-04 06:24:00 · 1864 阅读 · 11 评论 -
Windows 系统文件保护
Windows 从 2000 开始就引入了系统文件保护功能(WFP),今天先看看如何列出被保护的系统文件。代码很简单,只调用了一个 api 函数:SfcGetNextProtectedFileDECLARE Long SfcGetNextProtectedFile IN sfc Long RpcHandle, String @ ProtFileDataCREATE CURSOR p原创 2008-08-06 21:35:00 · 959 阅读 · 4 评论 -
创建一个不能用鼠标操作的表单
新建一个表单,设置 Desktop = .T.(或者设为顶层表单),先加几个文本框控件,再加一个退出按钮,按钮.Click 中写 Thisform.Release(),然后在表单的 Load 事件中加入下面的代码:DECLARE Long GetWindowLong IN WIN32API Long, LongDECLARE Long SetWindowLong IN WIN32A原创 2008-08-06 16:34:00 · 790 阅读 · 7 评论 -
Ping 操作
咱也来个 ping 函数,使用的主要是 ICMP(Internet Control Message Protocol) 提供的函数来完成的,用到了下面几个结构:#define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 typedef struct WSAData { WORD wVersion;原创 2008-08-05 20:57:00 · 2297 阅读 · 8 评论 -
Windows 系统文件保护(续)
研究了一晚上,发现:第一种方法并不容易实现,而且过程繁琐第二种方法可以实现,但由于需要采用远程注入的方式来调用未公开函数 SfcTerminateWatcherThread(sfc_os.dll 中序号为 2,此函数必须在 WinLogon 进程内调用才生效),这样就存在一个限制,因为要调用 CreateRemoteThread 在 WinLogon 进程空间内创建远程线程,而这个功能会被很多病毒原创 2008-08-07 09:07:00 · 1227 阅读 · 3 评论 -
卷管理函数
今天研究 Volume Management Functions 部分的 api 函数:这个部分函数包含两大块,第一块是卷管理,第二块是卷挂接第一块中的函数包括:DefineDosDevice, GetDriveType, GetLogicalDrives, GetLogicalDriveStrings, GetVolumeInformation, GetVolumeInformationByH原创 2008-08-07 22:02:00 · 1588 阅读 · 11 评论 -
卷管理函数(续)
上一篇研究了利用 DefineDosDevice 和 QueryDosDevice 这两个函数来映射一个文件夹到一个本地盘符,以及查询所有 DOS 映射设备的方法,附带发现了一个获取硬盘序列号的方法。卷挂接在 Unix/Linux/Netware 系统上应用比较常见,Windows 可能由于多用于个人平台,所以知道卷挂接技术的人就比例上来说少了很多。你可以将它理解为:把一个物理设备挂接到一个逻辑盘原创 2008-08-08 04:07:00 · 1339 阅读 · 2 评论 -
vfp 中使用 BStr, SafeArray
当我们调用其它语言编写的 DLL 或使用某些 COM / OCX 对象时,我们经常碰到要传递 BSTR 类型的字符串和 SafeArray 类型数组的问题。BSTR 来自于 Basic 的字符串结构( Basic STRing),其结构是:[Length prefix] + [Data string] + [Terminator]Length prefix - 长度前缀, 4 字节, 不包含尾原创 2008-08-22 16:09:00 · 2340 阅读 · 2 评论 -
用 PictureVal 直接在 Image 控件上显示系统默认文件类型的图标
表单上加一个 Image 和 CommandButton 控件,按钮的 Click 中贴下面代码:Local cFile, nSize, cSFI, nBuf, nWidth, nHeight, nSize, cPicValLocal hIcon, hTk, hBmp, pMem, hStream* --------------------------------------------原创 2014-03-30 11:37:59 · 2183 阅读 · 0 评论