返回列表 发帖
回复 7# caruko
有些API句柄只能是在进程运行时的,进程销毁后句柄也被销毁
要让API执行的结果能够完整保留,除非注入到CMD执行或者常驻进程
两个方案的可行性都不佳。。。
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

我觉得,应该在 程序结束时,用一个开关来选择“释放 API句柄” 或者“不释放API句柄”
这样应用范围就更广了。

TOP

回复 5# caruko
应该是后者的用法
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

本帖最后由 caruko 于 2011-8-31 11:40 编辑

这个是好东西啊,顶起....

如果 字符变量带有 空格 ,加上引号会出错吗?
  $"a b c" 还是 "$a b c" ?

TOP

好东西,必须顶起
SYBN QQ:354324773

TOP

虽然对传说中的ApI一无所知,但重要性不言而喻,LZ的神作让我等看到了批处理更遥远的图景,这或许就是新大陆!
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 defanive 于 2011-8-28 23:04 编辑

一些简单的例子

获得CMD的句柄
@echo off
CAPI Call kernel32 GetConsoleWindow
echo %errorlevel%
pauseCOPY
闪烁CMD窗口
@echo off
CAPI Call kernel32 GetConsoleWindow
set hCMD=%errorlevel%
CAPI Call user32 FlashWindow #%hCMD% #1
pauseCOPY
计算字符串长度
@echo off
set str=Defanive
CAPI Call kernel32 lstrlenW $%str%
echo %errorlevel%
pauseCOPY
计算字符串长度2(这样可以保留特殊字符)
@echo off
set str=Defanive
CAPI Call kernel32 lstrlenW *str
echo %errorlevel%
pauseCOPY
获得鼠标的坐标
@echo off
set pos=xxxxyyyy
CAPI Call user32 GetCursorPos ~pos
CAPI Get ~pos #2
pauseCOPY
综合例子,获取3秒后鼠标所指的窗口标题(或内容)
@echo off
setlocal enabledelayedexpansion
set Pos=00000000
echo 3秒后获得鼠标所指的窗口标题
CAPI Call kernel32 Sleep #3000
CAPI Call user32 GetCursorPos ~Pos
for /f "tokens=1,2" %%a in ('CAPI Get "~Pos" "#2"') do set /a "X=%%a","Y=%%b"
CAPI Call user32 WindowFromPoint #%X% #%Y%
set hWnd=%errorlevel%
echo 窗口句柄:%hWnd%
CAPI Call user32 SendMessageW #%hWnd% #14 #0 #0
set Length=%errorlevel%
echo 标题长度:%Length%
if "%Length%"=="0" echo 该窗口没有标题&pause&goto :eof
for /l %%a in (1,1,%Length%) do set "Title=!Title! "
set /a Length+=1
CAPI Call user32 SendMessageW #%hWnd% #13 #%Length% *Title
echo 窗口标题:!Title!
pauseCOPY
通过API可以让批处理变得更强大
API编程相关可以在网上查找资料学习
2

评分人数

    • sl543001: 加油技术 + 1
    • CrLf: 赞一个,很黄很暴力!PB + 10 技术 + 2
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

返回列表