随笔分类 - 软件开发:Windows系统
摘要:一直在网上寻找如何开发windows7的新特性,可是千篇一律的全是.Net的托管代码,不好意思,反正我是看不懂的。然后突然想到Mplayer ww编译版现在也支持windows7的特性啦,于是跑去看源代码。果然让我发现了一个win7shellapi.h。下载下来,打开一看,嘿嘿,就有我想要的ITaskbarList3。哦,对了win7的这些功能是通过COM接口实现的。下载地址:https://mp...
阅读全文
摘要:一直想写一点关于输入法编程的东西,今天终于有点时间,希望对后来者有点帮助。在此要特别感谢“自由拼音”的作者李振春,我刚开始的几个问题都是在他的帮助下才解决。 首先我们需要明白输入法是什么东西。目前常用的输入法基本上有两种类型:外挂式(如早期的万能五笔)及输入法接口式(Input Method Editor-IME)。外挂式比较简单,就是一个exe文件,通过模拟一些Win...
阅读全文
摘要:每个ActiveX Dll都应该有个DllGetClassObject函数,利用该函数就可以直接创建所需的com对象,而不需要通过注册表(或者注册)。这里必须知道两样东西,一个rclsid,就是需要创建的com对象的CLSID,另一个是 riid,该对象的一个接口的 id. 然而,调用DllGetClassObject,并不能直接创建所需要的对象,但可以得到对应的 IClassFactory,再由 IClassFactory.CreateInstance得到所需的对象. vb实现代码大概如下: 需要用到一个库,http://www.mvps.org/emorcillo/download/vb6
阅读全文
摘要:The scope of an object determines which scripts can use that object. By default, when you create an object instance, the object has page scope. Any script command in the same ASP page can use a page-scope object; the object is released when the .asp file completes processing the request. The recomme
阅读全文
摘要:很多朋友都会有过这样的经历,为什么在主线程中创建窗口且窗口工作很正常,但一移到非主线程(有的朋友喜欢叫它为工作线程),却无法正常工作. 本文就这个问题和各位探讨,可能无法做到尽善尽美,但能抛砖引玉也算是欣慰了. 在主线程中创建一个能够正常工作的窗口,估计地球人都知道. 这是一段工作正常的代码: #include \"windows.h\" HWND g_hWnd = NULL; HINSTANCE g_hInst; LRESULT WndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) { return DefWindowProc
阅读全文
摘要:1.控制面板/管理工具/Internet Services Manager/要设置的网站/属性/主目录 设置最下面的"应用程序保护"为"低(IIS 进程)" 将存放dll的虚拟目录同样设置…… 2.控制面板/管理工具/服务 将HTTP/FTP/SMTP服务设置为手工开启 3.控制面板/管理工具/本地安全设置/本地策略/用户权利指派 在"以操作系统方式操作"中添加你的用户名, 如果不清楚或者是开发用机器,就设置为everyone算了,呵呵 4.将以下文本粘贴到一个新文件中,保存为IISProcess.reg 并双击合并之,以设置IIS作为一个进程而不是缺省的服务运行 如果要恢
阅读全文
摘要:在网络程序中,我们常常碰到需要用户输入IP地址的情况。然而C++ Builder并没有为我们提供可以用于输入IP串的控件,于是我们只好用TEdit控件(单行文本框)来接受用户输入的IP串。但是,使用TEdit来输入IP串并不是一个好的主意,因为处理起来非常不方便。事实上,在我们的身旁有一个专门用来输入IP串的Windows控件,就象网络链接属性中, Internet 协议 (TCP/IP) 属性中输入IP的控件。IP控件会拒绝非法的IP串(在每个部分只能输入0~255之间的数字);它让你可以轻松地获取控件中的IP串所对应的IP值(32位整数),这省去了IP串和IP值之间相互转换的麻烦;此外,你
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~) 执行 许多人都知道 ShellExecute ,用于执行一个外部命令。但对于 IShellFoloder 对象来说,它的执行命令,都在它的 ContextMenu 里面了。记得前几节说过如何直接调用 ContextMenu 里的项,因此,执行一个 IShellFoloder,也无非是调用它的 ContextMenu 里默认的项而已://存放 PIDL 的数组 IntPtr[] pidls = new IntPtr[1]; pidls[0] = pidl; //得到 IContextMenu 接口 IntPtr iConte
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~) 有关 PIDL PIDL亦有“绝对路径”与“相对路径”的概念。表示“相对路径”的PIDL(本文简称为“相对PIDL”)只有一个ITEMIDLIST结构的元素,用于标识相对于父文件夹的“路径”;表示“绝对路径”的PIDL(简称为“绝对PIDL”)有若干个ITEMIDLIST结构的元素,第一个元素表示外壳名字空间根文件夹(“桌面”)下的某一子文件夹A,第二个元素则表示文件夹A下的某一子文件夹B,其余依此类推。这样绝对PIDL就通过保存一条从“桌面”下的直接子文件夹或文件的绝对PIDL与相对PIDL是相同的,而其他的文件夹或文件的相
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~) 上一节说到如何弹出 IShellFolder 的上下文菜单,也就是 IContextMenu。有时候我们需要在这个菜单上面,加入一些属于自己的菜单项。举个例子,你打开资源管理器,查看左边目录树的右键菜单,会发现顶层多了一个折叠/展开的菜单项。好,我们也动手来加入这个菜单项。 修改例子3,我们找到 QueryContextMenu 处,这时候提供了一个菜单句柄://提供一个弹出式菜单的句柄 IntPtr contextMenu = API.CreatePopupMenu(); iContextMenu.QueryContextM
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~) 这里解释上一节中获取名称的方法 GetDisplayNameOf 定义:void GetDisplayNameOf( IntPtr pidl, SHGNO uFlags, IntPtr lpName);该方法是用来转换PIDL成为可显示的名称字符串。PIDL必须是相对于对象的父目录的。换句话说,它必须包含一个非空的SHITEMID 结构。因为有多种命名对象的方式,资源管理器通过在uFlags参数中定义SHGNO标识的组合来表示名称类型。SHGDN_NORMAL或SHGDN_INFOLDER将被用来指定名称是相对于文件夹的
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~) 让我们详细解释一下 Shell 编程中最基本的一些函数、结构体和枚举。 SHGetDesktopFolder 获取桌面的 IShellFolder 接口[DllImport("shell32.dll")] public static extern Int32 SHGetDesktopFolder(out IntPtr ppshf);要使用这个函数,必须先定义一个 IntPtr 指针。然后通过指针,使用 GetObjectForIUnknown 返回通过指向 COM 对象的 IShellFolder 接口的指针实例。于是需要编
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)从本节起,我所要讲述的是对 Windows 系统的“Shell 扩展”。“Shell 扩展”从字面上分两个部分:Shell 与 Extension。Shell 指 Windows Explorer,而Extension 则指由你编写的当某一预先约定好的事件(如在以. doc 为后缀的文件图标上单击右键)发生时由 Explorer 调用执行的代码。因此一个“Shell 扩展”就是一个为 Explorer 添加功能的 COM 对象。 “Shell 扩展”有很多种类型,每种类型都在各自不同的事件发生时被调用运行,但也有一些扩展的类型和
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)关于注册动态库必须注册才能使用。除了使用 regasm 来注册 DLL 以外,还应该在代码中增加 RegisterServer 和 UnregisterServer 方法,以指导 DLL 注册时,在 Windows 注册表中增加什么键。关于具体键以下做简单说明:1) 注册 DLL 的 Shell Extensions。具体位置是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved,增加以 GUID 为名称的键
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)QueryInfo扩展 活动桌面引入一项新特性,当你在某些特定对象上旋停鼠标时,工具提示将显示它们的描述。我们可以使用 QueryInfo 扩展为Shell中的其它对象提供自定义的工具提示。如下图: 事实上,这个功能实现比前两个 Shell 扩展更简单,它仅仅是实现 IQueryInfo 接口:IQueryInfo 接口定义 [ComImport(), ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), GuidAttribute("00
阅读全文
摘要:(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~) Windows Shell 编程,即 Windows 外壳编程。我们所看到的资源管理器以及整个桌面,都是一个 Shell。 关于 Windows 外壳的基本概念,我这里不做详细介绍,不了解的朋友,可以看看 姜伟华 的 Windows外壳名字空间的浏览。 好,现在让我们从基础学起,早日做出一个强大的资源管理器软件。(偶也是初学者,多多指教)1 - 基础,浏览一个文件夹我们知道,在win32中是以外壳名字空间的形式来组织文件系统的,在外壳名字空间里的每一个对象(注)都实现了一个IShellFolder的接口,通过这个接口我们可以直
阅读全文
摘要:1、2k以后的操作系统可使用 ntdll.dll中的隐式函数 Windows NT/2000中获取CPU使用率的方法与Windows 9x系统中所使用的方法不同,Windows NT/2000中获取CPU使用率不用"性能计数器"。而是使用一个NTDLL.DLL中未公开的API函数--NtQuerySystemInformation。它的使用方法参见另外一篇文章:《Windows NT/2000系统中如何获取系统的启动时间》。 为了计算Windows NT/2000系统中CPU的使用率,我们使用下面的公式: CpuUsageInPercent = 100 - (CpuTimen - CpuTim
阅读全文
摘要:一般时控函数 vc程序员都会利用windows的wm—timer消息映射来进行简单的时间控制:1.调用函数settimer()设置定时间隔,如settimer(0,200,null)即为设置200毫秒的时间间隔;2.在应用程序中增加定时响应函数ontimer(),并在该函数中添加响应的处理语句,用来完成时间到时的操作。这种定时方法是非常简单的,但其定时功能如同sleep()函数的延时功能一样,精度较低,只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况,而在精度要求较高的条件下,这种方法应避免采用。精度时控函数 在要求误差不大于1毫秒的情况下,可以采用gettickcount(
阅读全文
摘要:.NET Winform中,启用XP主题外观执行以下语句即可:Application.EnableVisualStyles();VC Win32项目,默认是不启用XP主题外观的,并不是每个人都喜欢简洁的Windows经典主题外观。启用XP主题外观,需要用资源文件。有种更简单的方式:头文件里加入以下语句:#include <CommCtrl.h> #pragma comment(lib,...
阅读全文
摘要:Windows Vista 对快速用户切换,用户账户权限,以及服务程序所运行的会话空间都作了很大的改动,致使一些原本可以工作的程序不再能够正常工作了,我们不得不进行一些改进以跟上 Vista 的步伐。我们的软件在Windows NT/2000/XP/Vista 系统中安装了一个系统服务,这个服务负责以 SYSTEM 权限启动我们的主程序。我们的主程序启动后会在系统托盘添加一个图标,点击此图标可以弹...
阅读全文
浙公网安备 33010602011771号