⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 取得控制台程序的handle的2种方法 .txt

📁 会变语言实现的一些程序
💻 TXT
字号:
取得控制台程序的handle的2种方法 
    作者:Kevin E 于2007-9-16上传   

--------------------------------------------------------------------------------
  前面介绍了如何设计一个控制台程序,很多时候我们需要取得运行程序的handle,
通常会使用下面的API:

  invoke GetModuleHandle,NULL

  返回值在EAX中。但是,这种方法在控制台程序中并不好用(谁知道为什么?)
经过笔者一番查找,找到了2种其他方法。

一.通过更改窗口的标题再查找标题
  这里使用的一个API是 invoke SetConsoleTitle,CTXT("HH") ;这样就将窗口的标题设置为了 HH(具体说明具体请参考参考2)

  接下来,我们在使用FindWindow  API 函数查找标题是‘HH’的窗口的handle:
FindWindow,NULL,CTXT("HH") ;第一个参数是class,第二个参数是窗口名。我们这里只使用窗口名,所以第一个参数设置为空(具体说明具体请参考参考3)

  因此,参考1中给出的方法就是 保存当前 console 窗口的标题?更改标题?查找更改后的标题取得handle?改回原来的标题。需要注意的是,在更改标题和查找更改后的标题之间需要有一个延时,暂时不清楚是什么原因必须这样做。
参考一给出的是C语言的程序,有兴趣的读者不妨试验一下修改为asm的。

二.更简单的方法使用GetConsoleWindow API

   Windows提供了一个更直接简单的API,就是GetConsoleWindow,关于它的介绍在本期前面的文章中有提到过,请参考。下面列出程序


;#Mode=CON
.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc

includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm

.data?
   buffer   db 100 dup(?)

.CODE
START:
   invoke GetConsoleWindow
   invoke ShowWindow,eax,SW_MINIMIZE ;这个地方用来验证取得的是否为
;console的handle,如果取得正确
;控制台会自动最小化
   
   ;暂停显示,回车键关闭
   invoke StdIn,addr buffer,sizeof buffer
   invoke ExitProcess,0
end START

  很多文章中提到了使用如下方法:

  invoke GetStdHandle,STD_OUTPUT_HANDLE

  但是经过我的实验这种方法是无法取得的,每次都是固定的值。

  参考1:http://support.microsoft.com/kb/124103/zh-cn

--------------------------------------------------------------------------------
<<<上一篇  欢迎访问AoGo汇编小站:http://www.aogosoft.com <a href="downpage.asp? 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -