找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 605|回复: 5

[研讨] 给移屏工具定义“左右箭头”快捷键

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-1-8 15:53:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
看了老大的介绍用API给ACAD加钩子的帖子,
让LISP控制WINDOWS消息循环(给ACAD注入钩子)监控键盘鼠标消息
写个测试代码,
定义两个命令 c:viewleft 屏幕左移2/3屏,c:viewright 屏幕右移2/3屏幕。


然后定义快捷键 <- -> ,加载代码后,执行 hook_left_right , 就可以使用左右箭头来移动屏幕了。

箭头移屏.gif

  1. (defun c:viewleft ()
  2.   (xdrx-vports2vporttablerecords)
  3.   (setq        vi    (xdrx-views-get)
  4.         cen   (getvar "viewctr")
  5.         size  (getvar "viewsize")
  6.         ratio (getvar "screensize")
  7.         w     (* size (apply '/ ratio))
  8.         w1    (* 2 (/ w 3.0))
  9.         cen1  (mapcar '+ cen (list w1 0.0 0.0))
  10.   )
  11.   (xdrx-setpropertyvalue
  12.     vi "centerpoint" cen1 "height" size        "width"        w)
  13.   (xdrx-views-setcurrent vi)
  14. )
  15. (defun c:viewright ()
  16.   (xdrx-vports2vporttablerecords)
  17.   (setq        vi    (xdrx-views-get)
  18.         cen   (getvar "viewctr")
  19.         size  (getvar "viewsize")
  20.         ratio (getvar "screensize")
  21.         w     (* size (apply '/ ratio))
  22.         w1    (* 2 (/ w 3.0))
  23.         cen1  (mapcar '- cen (list w1 0.0 0.0))
  24.   )
  25.   (xdrx-setpropertyvalue
  26.     vi "centerpoint" cen1 "height" size        "width"        w)
  27.   (xdrx-views-setcurrent vi)
  28. )
  29. (defun c:hook-viewleft-right ()
  30.   (defun _hook-3 (hwnd msg wparam lparam time pos)
  31.     (cond
  32.       ((= msg WM_KEYDOWN)
  33.        (cond ((= wparam VK_LEFT)
  34.               (c:viewleft)
  35.               (xdrx-hook-block-messageloop t)
  36.              )
  37.              ((= wparam VK_RIGHT)
  38.               (c:viewright)
  39.               (xdrx-hook-block-messageloop t)
  40.              )
  41.        )
  42.       )
  43.     )
  44.   )
  45.   (xd::hook:register "_hook-3" t "箭头移动屏幕热键")
  46. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8611个

财富等级: 富甲天下

发表于 2018-1-8 16:21:49 | 显示全部楼层
xd::hook:register是不是笔误?应该是xdrx-hook-register吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2018-1-8 16:42:57 | 显示全部楼层

没错, 1、xdrx-hook-register 是底层的,系统通过它定义了一个系统级HOOK,这个对用户是不透明的。
2、xd::hook:register 是LISP层面的,通过它可以注册多个LISP层面的HOOK处理函数。
3、通用函数库内部自动根据xd::hook:register注册的多个HOOK处理函数,有消息时候分发去执行。
以后就用 xd::hook:register就行了,LISP层面它总管了。参数是三个
1、HOOK处理函数
2、T OR NIL,是否立即启用,如果给NIL,以后要通过(xd::hook:enable hook函数名 t) 启用。
3、描述字符串。

另外三个个LISP层面的
xd::hook:enable, 可以根据HOOK函数名,临时开关HOOK
xd::hook:remove   根据HOOK函数名,删除掉。
xd::hook:status     查看指定HOOK函数名的状态,启用,禁用,和未定义。


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2018-1-8 16:48:58 | 显示全部楼层
xd::hook这几个函数没找到源码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2018-1-8 16:56:03 | 显示全部楼层

加载 2018.01.08 通用函数库就有了。暂时没公布。比较危险,钩子。用的时候,遇到问题请发帖。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2018-4-18 07:08:23 来自手机 | 显示全部楼层
直接用command pan来弄……简单……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-25 00:53 , Processed in 0.299695 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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