本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。今天闲着无聊,试着用c#写查看密码框的程序(不仅限于密码框,应该是任何有文本的控件都可以)
代码见下面.
用c++实现起来超简单的这么个东东..用c#复杂得很,我又不想用unsafe,我总觉得用unsafe的话,干嘛不干脆用c++算了.
int length=300;
intptr thandle=apis.getlocalwindow();//取得当前鼠标所在位置的控件句柄
int address=apis.virtualallocex(process.getcurrentprocess().handle,0,length,0x1000,0x04);//在本进程内分配length大小的内存
apis.sendmessage(thandle,0x000d,new intptr(255),new intptr(address));//发送消息到目标控件,0x000d就是wm_gettext,255的意思是保存返回的值,new intptr(address)是指保存到address指定的地址
byte[] buf=new byte[length];
apis.readprocessmemory(process.getcurrentprocess().handle,address,buf,length,0);//读取刚才保存的内容
messagebox.show(encoding.default.getstring(buf));//显示出来测试一下.
其中apis开头的,是我自己写的api类库,相关声明如下:
[dllimport("user32.dll")]
public static extern intptr windowfrompoint(
 point lppoint
 );
[dllimport("user32.dll")]
public static extern int getcursorpos(
 out point lppoint
 );
public static intptr getlocalwindow()//这个只是把上两个结合了一下
{
 point point;
 getcursorpos(out point);
 return windowfrompoint(point);
}
//不加ex的话.上面就不用第一个handle参数了
[ dllimport( "kernel32.dll" )]
public static extern system.int32 virtualallocex(
 system.intptr hprocess,
 system.int32 lpaddress,
 system.int32 dwsize,
 system.int16 flallocationtype,
 system.int16 flprotect
 );
[dllimport("user32.dll")]
public static extern intptr sendmessage(
 intptr hwnd,
 int msg,
 intptr wparam,
 intptr lparam
 );
[ dllimport( "kernel32.dll" )]
public static extern int readprocessmemory(
 system.intptr hprocess, 
 system.int32 lpbaseaddress,
 byte[] lpbuffer,
 long nsize,
 long lpnumberofbyteswritten
 );
*******************************************************************
因为一般要查看的是外部程序,配合快捷键不失不一种好方法.
c#的实现如下:
在初始化窗口的代码里加上
keymodifiers modifiers=keymodifiers.windows;//定义为win+快捷键,也可定义为别的.
registerhotkey(handle, 1001,modifiers,keys.v);//给win+v分配id为1001
override一下wndproc
protected override void wndproc( ref message m )
{ 
 const int wm_hotkey = 0x0312; 
 switch(m.msg) 
 { 
 case wm_hotkey:
 switch (m.wparam.toint32())
 {
 case 1001:
 onhotkeyv();
 break;
 default:break;
 }
 break; 
 } 
 base.wndproc(ref m );
}
在onhotkeyv函数里写上我最开始写的那段代码就可以了.