找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7313|回复: 1

[开源] 操纵其他程序的SysDateTimePick32 

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2012-4-12 20:16:44 | 显示全部楼层 |阅读模式
procedure TForm1.Button1Click(Sender: TObject);
var   
  Mwd,Cwd: LongInt;
  st: TSystemTime;
  pid,phd: thandle;
  p: pointer;
  l: dword;
  b: boolean;
begin   
  Mwd := h;  // (h是父窗口句柄,事先取不赘述)

  GetWindowThreadProcessId(mwd, pid);
  phd := openprocess(PROCESS_ALL_ACCESS, true, pid);
  VirtualAllocEx(phd,p,sizeof(st), MEM_COMMIT, PAGE_READWRITE);
  if p = nil then
  begin
    ShowMessage('error1');
    exit;
  end;
  l:=0;

  Cwd := FindWindowEx(Mwd, 0, 'SysDateTimePick32', nil);

  DateTimeToSystemTime(Date-6, st);
  b:=WriteProcessMemory(phd, p, @st, sizeof(st), l);
  if (not b) and (l<>sizeof(st)) then
  begin
    ShowMessage('error2');
    exit;
  end;
  PostMessage(cwd, DTM_SETSYSTEMTIME, GDT_VALID, longint(p));

  CloseHandle(phd);  // 这两行是重点,必须有
  p := nil;

end;   

说明:使用上面的代码操作时,一定不能动态申请内存,比如控件的hint之类,必须事先在全局变量中定义变量,让系统为变量事先分配内存,否则出错。

来源:http://www.slit.cn/bbs/forum.php?mod=viewthread&tid=494283
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-4-5 10:38:23 | 显示全部楼层
thank you! ^_^
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表