﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客--随笔分类-05 技巧会聚</title><link>http://www.cnitblog.com/dabor/category/2959.html</link><description>&lt;a href="http://www.cnitblog.com/dabor/"&gt;dabor&lt;/a&gt;　　　　　　　　　　　　　　　　　　　&lt;a href="http://www.cnitblog.com/dabor/"&gt;&lt;img src="http://www.cnitblog.com/images/cnitblog_com/dabor/2981/o_title.gif" width="258" height="52" border="0" align="top"&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 03 Oct 2011 03:53:49 GMT</lastBuildDate><pubDate>Mon, 03 Oct 2011 03:53:49 GMT</pubDate><ttl>60</ttl><item><title>Win32 ASM 自编函数库中的每个函数要分开文件编写</title><link>http://www.cnitblog.com/dabor/archive/2006/07/03/13173.html</link><dc:creator>dabor</dc:creator><author>dabor</author><pubDate>Mon, 03 Jul 2006 03:54:00 GMT</pubDate><guid>http://www.cnitblog.com/dabor/archive/2006/07/03/13173.html</guid><wfw:comment>http://www.cnitblog.com/dabor/comments/13173.html</wfw:comment><comments>http://www.cnitblog.com/dabor/archive/2006/07/03/13173.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/dabor/comments/commentRss/13173.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dabor/services/trackbacks/13173.html</trackback:ping><description><![CDATA[<p align=center><strong>Win32 ASM 自编函数库中的每个函数要分开文件编写</strong> </p>
<pre>例如下面的操作注册表的函数库, 如果把它们放在 Reg.asm 中:
SetRegString	proto _HKEY:dword, _lpszSubKey:dword, _lpszValueName:dword, _lpszString:dword
GetRegString	proto _HKEY:dword, _lpszSubKey:dword, _lpszValueName:dword, _lpszBuffer:dword
SetRegDword	proto _HKEY:dword, _lpszSubKey:dword, _lpszValueName:dword, _lpdwValue:dword
GetRegDword	proto _HKEY:dword, _lpszSubKey:dword, _lpszValueName:dword, _lpdwValue:dword
DelRegValue	proto _HKEY:dword, _lpszSubKey:dword, _lpszValueName:dword
编译生成 mylib.lib :
ml /c /coff Reg.asm
link -lib "Reg.obj" "/out:mylib.lib"
再在 test.asm 中只调用任一个库函数, 如: SetRegDword, 再反汇编查看, 发现上面 5 个函数都在 test.exe 中.
多出了无用的其它 4 个函数体. 这样你的程序是不是很不精简?
所以, 上面 5 个函数应该分开文件写, 即 SetRegString.asm 只含 SetRegString 函数, GetRegString.asm 只含
GetRegString 函数 ...... 再编译生成 mylib.lib :
ml /c /coff *.asm
link -lib "*.obj" "/out:mylib.lib"
这次编译查看 test.exe , 就只有要调用的一个函数 SetRegDword 在程序里面了.
</pre>
<img src ="http://www.cnitblog.com/dabor/aggbug/13173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dabor/" target="_blank">dabor</a> 2006-07-03 11:54 <a href="http://www.cnitblog.com/dabor/archive/2006/07/03/13173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最小化 Console 窗口小程序 + 源码</title><link>http://www.cnitblog.com/dabor/archive/2006/06/21/12621.html</link><dc:creator>dabor</dc:creator><author>dabor</author><pubDate>Wed, 21 Jun 2006 04:59:00 GMT</pubDate><guid>http://www.cnitblog.com/dabor/archive/2006/06/21/12621.html</guid><wfw:comment>http://www.cnitblog.com/dabor/comments/12621.html</wfw:comment><comments>http://www.cnitblog.com/dabor/archive/2006/06/21/12621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dabor/comments/commentRss/12621.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dabor/services/trackbacks/12621.html</trackback:ping><description><![CDATA[下载地址(0.445K)：<br><a class="" title="" href="http://www.cnitblog.com/Files/dabor/m.rar" target=""><font color=#ff0000>IT博客网</font></a>
<pre>;---------------------------------------
; 程序名: "MinForeWin.asm"
;
; 说  明: 最小化前景窗口
;
; 用  法: 将编译生成的 MinForeWin.exe 改名为 m.exe ,
;	  然后在 Console 窗口中直接打 m , 回车,
;	  就可最小化 Console 窗口
;
; 作  者: Dabor (2006.6.21)
;---------------------------------------
;---- 汇编选项 -------------------------
.386
.model	flat, stdcall
option	casemap:none
;!!!!!!!  Include 文件定义   !!!!!!!!!!!
include		windows.inc
include		kernel32.inc
include		user32.inc
includelib	kernel32.lib
includelib	user32.lib
;!!!!!!!!!!!!  代码段  !!!!!!!!!!!!!!!!!
.code
;---------------------------------------
;		主程序
;---------------------------------------
start:
invoke	GetForegroundWindow
invoke	ShowWindow, eax, SW_MINIMIZE
invoke	ExitProcess, 0
end start
</pre>
<img src ="http://www.cnitblog.com/dabor/aggbug/12621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dabor/" target="_blank">dabor</a> 2006-06-21 12:59 <a href="http://www.cnitblog.com/dabor/archive/2006/06/21/12621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win32汇编在对话框应用程序中使用加速键的方法</title><link>http://www.cnitblog.com/dabor/archive/2006/06/18/12457.html</link><dc:creator>dabor</dc:creator><author>dabor</author><pubDate>Sun, 18 Jun 2006 05:38:00 GMT</pubDate><guid>http://www.cnitblog.com/dabor/archive/2006/06/18/12457.html</guid><wfw:comment>http://www.cnitblog.com/dabor/comments/12457.html</wfw:comment><comments>http://www.cnitblog.com/dabor/archive/2006/06/18/12457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dabor/comments/commentRss/12457.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dabor/services/trackbacks/12457.html</trackback:ping><description><![CDATA[<pre>在对话框应用程序中是不能直接响应加速键的. 为了使对话框响应加速键, 我选择了 Hook 方法.
我不选注册系统热键的方法, 因为它可能和别的应用程序发生热键冲突. 再者, Hook 方法可以
产生 WM_COMMAND 消息, 这样给编写程序带来方便.
当 Hook 了对话框的消息时, 在消息钩子过程中只拦截对我们有用的 WM_KEYDOWN 消息, 忽略
WM_SYSKEYDOWN 消息. 在 TranslateAccelerator WM_KEYDOWN 消息时, 发出 WM_COMMAND 消息;
而 TranslateAccelerator WM_SYSKEYDOWN 消息时, 发出 WWM_SYSCOMMAND 消息.
消息流程: "GetMessage" --&gt; "Windows 消息等待" --&gt; "用户按加速键产生消息" --&gt;
"GetMsgProc" --&gt; "TranslateAccelerator" --&gt; "发送 WM_COMMAND" --&gt;
"返回 GetMsgProc" --&gt; "返回 GetMessage" --&gt; "TranslateMessage" --&gt;
"DispatchMessage" --&gt; "GetMessage"
TranslateAccelerator 函数不会修改 _GetMsgProc 中的参数 _lParam 所指向的 MSG 结构,
所以可以放心让消息传到 windows 内部对话框的消息循环中, 即 "GetMessage" --&gt;
"TranslateMessage" ...
; 程序代码如下:
; ---------------------------------------------------
; ......
; 资源定义
ACT_MAIN	equ 106		; 加速键表
ACT_F7		equ 2007	; F7 加速键
ACT_F8		equ 2008	; F8 加速键
.data?
g_hInst		dword ?		; 对话框应用程序句柄
g_hAct		dword ?		; 加速键表句柄
g_dwThrdID	dword ?		; 对话框线程 ID
g_hHook		dword ?		; 钩子句柄
g_hWnd		dword ?		; 对话框窗口句柄
.code
; ......
;	_GetMsgProc
; ------------------------------------------
; 说明: 监控对话框的消息钩子过程
; ------------------------------------------
_GetMsgProc proc _nCode:dword, _wParam:dword, _lParam:dword
mov	edx, _lParam
mov	eax, dword ptr[edx+4]			; 获得消息
.if	(eax == WM_KEYDOWN)
invoke	TranslateAccelerator, g_hWnd, g_hAct, _lParam
.endif
invoke	CallNextHookEx, g_hEverHook, _nCode, _wParam, _lParam
ret
_GetMsgProc endp
; ......
; 在对话框的初始化消息 "WM_INITDIALOG" 中添加
invoke	LoadAccelerators, g_hInst, ACT_MAIN
mov	g_hAct, eax
invoke	GetWindowThreadProcessId, g_hWnd, NULL
mov	g_dwThrdID, eax
; 创建对话框的 MsgHook
invoke	SetWindowsHookEx, WH_GETMESSAGE, addr _GetMsgProc, NULL, eax
mov	g_hHook, eax
; ......
; 现在可以在 WM_COMMAND 中获得加速键消息了
mov	eax, _wParam
.if	(ax == ACT_F7)
; 响应 F7 加速键代码
; ......
.elseif	(ax == ACT_F8)
; 响应 F8 加速键代码
; ......
.endif
; ......
; 在 WM_CLOSE 中卸载钩子
invoke	UnhookWindowsHookEx, g_hHook
; ......
</pre>
<img src ="http://www.cnitblog.com/dabor/aggbug/12457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dabor/" target="_blank">dabor</a> 2006-06-18 13:38 <a href="http://www.cnitblog.com/dabor/archive/2006/06/18/12457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在控制台中打开窗口目录批处理</title><link>http://www.cnitblog.com/dabor/archive/2006/06/03/11502.html</link><dc:creator>dabor</dc:creator><author>dabor</author><pubDate>Sat, 03 Jun 2006 00:31:00 GMT</pubDate><guid>http://www.cnitblog.com/dabor/archive/2006/06/03/11502.html</guid><wfw:comment>http://www.cnitblog.com/dabor/comments/11502.html</wfw:comment><comments>http://www.cnitblog.com/dabor/archive/2006/06/03/11502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dabor/comments/commentRss/11502.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dabor/services/trackbacks/11502.html</trackback:ping><description><![CDATA[<br>
<pre>@echo off
rem -------------------------------
rem ep.bat (ep == explorer)
rem open current folder or file for window
rem
rem written by Dabor
rem -------------------------------
if "%1" == "" goto openCurFolder
rem open disk c(,d,e...)
rem -----------------------
if "%1" == "a" explorer %1:
if "%1" == "a" goto theEnd
if "%1" == "c" explorer %1:
if "%1" == "c" goto theEnd
if "%1" == "d" explorer %1:
if "%1" == "d" goto theEnd
if "%1" == "e" explorer %1:
if "%1" == "e" goto theEnd
if "%1" == "f" explorer %1:
if "%1" == "f" goto theEnd
if "%1" == "g" explorer %1:
if "%1" == "g" goto theEnd
if "%1" == "h" explorer %1:
if "%1" == "h" goto theEnd
if "%1" == "i" explorer %1:
if "%1" == "i" goto theEnd
if "%1" == "j" explorer %1:
if "%1" == "j" goto theEnd
if "%1" == "k" explorer %1:
if "%1" == "k" goto theEnd
if "%1" == "l" explorer %1:
if "%1" == "l" goto theEnd
if "%1" == "m" explorer %1:
if "%1" == "m" goto theEnd
rem open folder
rem ----------------------
if exist %1\nul explorer %1
rem open file or run file for win98 or winme
rem win2k or winxp directly open or run
rem ----------------------
if exist %1 start %1
goto theEnd
rem default open current folder
rem ----------------------
:openCurFolder
explorer .
:theEnd
</pre>
<img src ="http://www.cnitblog.com/dabor/aggbug/11502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dabor/" target="_blank">dabor</a> 2006-06-03 08:31 <a href="http://www.cnitblog.com/dabor/archive/2006/06/03/11502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>