postmessage API 函数的古怪问题__(100分)

  • 主题发起人 主题发起人 herald
  • 开始时间 开始时间
H

herald

Unregistered / Unconfirmed
GUEST, unregistred user!
postmessage API 函数的古怪问题
我有一个程序,是一个外挂,自动寻找一个包含股票帐号、交易密码、通讯密码的login窗口。
现在我的代码已经实现了自动寻找到这个包含股票帐号、交易密码、通讯密码的login窗口,
也找到了输入帐号的那个edit控件,现在我需要模拟按键输入一串帐号。发送之前需要删除
edit控件中的已有的帐号(如果有的话)。之后才是发送一个帐号字符串。

以下代码,可以实现发送帐号,但是有以下麻烦:
1。如果点击鼠标,让股票交易的login窗口获得焦点,那这个code就可
以自动删除账号edit框中的内容。并且可以自动输入帐号。
2。进行步骤1后,如果没有点击鼠标,让股票交易的login窗口获得焦点,
那这个code就只能实现输入账号,无法删除已有的内容。


我百思不得其解,请高手指教,以下这个代码,在对其他edit控件进行操作也是同样的现象。


以下是模拟输入一个账号的,senmessage代码
其中CWnd *cwnd是需要输入账号的cwnd对象。
char *str是需要输入的帐号字符串
BOOL is_combobox是一个无关紧要的参数,已经不使用了


void C_ABchina_FJ_yzt_login::sendkey_serial(CWnd *cwnd,char *str,BOOL
is_combobox)
//往一个windows对象中发送keycode
{
int i;
cwnd->SetFocus();
for(i=0;i<30;i++) //删除已有的内容
{ cwnd->SendMessage(WM_KEYDOWN,VK_DELETE)
//经常不能刷新combobox 文本
//Sleep(3);
cwnd->SendMessage(WM_KEYUP,VK_DELETE);
//Sleep(3);
}
while(*str!=0x00) //输入新的内容
{cwnd->PostMessage(WM_CHAR, *str, 0);
str++;
}
}


请相信我,我写的程序是绝对合法的程序。只是我想自己使用的一个code,绝对不是黑客之类的代码。
请相信我,我写的程序是绝对合法的程序。只是我想自己使用的一个code,绝对不是黑客之类的代码。
 
关于删除,WM_CLEAR 可以。
你的问题看不懂。
不过看你的代码建议postmessage改为sendmessage。
 
这其实是一个设置窗口焦点的问题.
并不是消息发送函数的问题.
可以这样想一下,你现在一个Edit窗口,不是焦点,你直接按键盘输入,那个Edit框里面也不会响应你的按键输入.换成消息发送函数来模拟键盘输入,实际上是一回事,不是焦点,当然不会响应输入.
我在解决此类问题的时候,是用一个DLL来做个鼠标钩子,注入到目标进程中,截取鼠标松开的消息,然后通过setwindowtext函数来设置Edit文本内容.
这样做的好处是,如果你是一个木马程序,那么在更改帐号的时候,不容易被察觉.
 
to zfg886:
真是幸会,没想到在这帖子里遇到。希望大侠留个E-mail,以便能在网络通信
等方面请教一下。。。。

对于这个问题我觉得还是sendmessage的问题。因为lz发送的是KEYDOWN事件消息,
当焦点不在的控件上的时候,这个事件就不能触发,而发送wm_clear,无论有没有
焦点,只要有消息处理,它就可以实现清除。。。。

没试验过,大家看看可不可以。。。。
 
今天再仔细看了一下楼主的问题,我前面的回复有明显的错误了...........
不过我现在非常奇怪,楼主说在窗口没有获得焦点的情况下,还能响应输入.这似乎和我的测试结果相反.
to baiduan
在这里用sendmessage或 PostMessage我认为关系不大.两个函数的区别在于对消息是否立即处理,而对于消息类型应该没有影响.
实际上从楼主的代码中可以看到,他只有输入新的内容时才用了PostMessage,而删除内容时用的是sendmessage
 
to baiduan
你好象认识我?还是认错人了呢....

我的信箱admin@krlm.net
 
to zfg886
没认错,我读过老大你的帖子,觉得你的态度十分值得我学习。

对于上面那个问题,我觉得post发送那种不需要,不能够立即返回的消息
还是不错的例如broadcast.但是在这里要求应该严格点,所以用send.
我经历过post消息被丢弃的。。。也不知道为什么。。。
 
后退
顶部