首页
社区
课程
招聘
[旧帖] [求助]利用sendMessage控制记事本无法响应 0.00雪花
发表于: 2012-3-6 22:26 1760

[旧帖] [求助]利用sendMessage控制记事本无法响应 0.00雪花

2012-3-6 22:26
1760
//利用sendMessage控制记事本无法响应
//通过发送按键,弹出另存对话框,但是一直没成功,postmessage也试过了无效,到底问题出在什么地方呢
#include<windows.h>
#include<stdio.h>
int main()
{
  HWND  notepad_h;
  notepad_h=FindWindow("Notepad",NULL);
  if(notepad_h!=NULL)
  {
    SetForegroundWindow(notepad_h);
  SendMessage(notepad_h,WM_KEYDOWN,VK_MENU,0);
   SendMessage(notepad_h,WM_KEYUP,VK_MENU,0);
SendMessage(notepad_h,WM_KEYDOWN,'F',0);
   SendMessage(notepad_h,WM_KEYDOWN,'A',0);;
}
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
int main()
{
  HWND  notepad_h=FindWindow("Notepad",NULL);
  if(notepad_h)
  {
    SetForegroundWindow(notepad_h); //这行不是必需的.
  SendMessage(notepad_h,WM_KEYDOWN,VK_ALT,0);
   SendMessage(notepad_h,WM_DOWN,VK_F,0);
   SendMessage(notepad_h,WM_UP,VK_F,0);
   SendMessage(notepad_h,WM_DOWN,VK_A,0);
   SendMessage(notepad_h,WM_UP,VK_A,0);
  SendMessage(notepad_h,WM_KEYDOWN,VK_ALT,0);
}
}
2012-3-6 22:58
0
雪    币: 40
活跃值: (145)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
窗口句柄应该是那个编辑框吧
2012-3-6 23:28
0
雪    币: 408
活跃值: (156)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
不是发送消息到记事本主窗口句柄,是获取记事本edit句柄,或者直接模拟按键盘:)
keybd_event(VK_MENU,0,0,0);
keybd_event(70,0,0,0);
2012-3-7 00:23
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
试试这个

int main(void)
{
  HWND  notepad_h=FindWindow(NULL,"无标题 - 记事本");
  if(notepad_h)
  {
    SendMessage(notepad_h,WM_COMMAND,WPARAM(0x00000004),0);
  }
  return 0;
}
2012-3-7 09:57
0
雪    币: 175
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
delphi的一段代码:

procedure SwitchToThisWindow(          hWnd: HWND;
    fAltTab: BOOL
); stdcall; external 'user32.dll';

var
  notepad_h,c: Cardinal;

begin
notepad_h:=FindWindow('Notepad',0);
asm
  mov c, 10100000000000000000000000000001b
end;
  c := ((MapVirtualKey(Integer('F'), 0) and $ff) shl 16) or c;
    SwitchToThisWindow(notepad_h, True);
  PostMessage(notepad_h,WM_SYSCHAR,Integer('F'),c);
asm
  mov c, 10000000000000000000000000000001b
end;
  SwitchToThisWindow(notepad_h, True);
  c := ((MapVirtualKey(Integer('A'), 0) and $ff) shl 16) or c;
  PostMessage(notepad_h,WM_CHAR,Integer('A'),c);
end;
2012-3-7 11:44
0
游客
登录 | 注册 方可回帖
返回
//