在之前的部落格隨筆中提到過cad中滑鼠的懸浮功能,後來就一直在想可不可以在cad中觸發key事件,之後在kean的一篇博文中提到過關於捕捉鍵盤事件,可惜不太實用,比如想通過鍵盤的上下鍵來移動乙個實體。效果就像下面這樣
後來就想用鉤子實現吧,然後在網上找keyhook之類的資訊,現成的**真是太多了,現在貼出這部分網上找到的**
**1public
class
keyboardhook222
23[dllimport(
"user32.dll
", charset
=charset.auto, callingconvention
=callingconvention.stdcall)]
24public
static
extern
intsetwindowshookex(
intidhook, hookproc lpfn, intptr hinstance,
intthreadid);
2526
[dllimport(
"user32.dll
", charset
=charset.auto, callingconvention
=callingconvention.stdcall)]
27public
static
extern
bool
unhookwindowshookex(
intidhook);
2829
[dllimport(
"user32.dll
", charset
=charset.auto, callingconvention
=callingconvention.stdcall)]
30public
static
extern
intcallnexthookex(
intidhook,
intncode, int32 wparam, intptr lparam);
3132
public
void
start()
3344}45
}4647public
void
stop()
4856if(
!retkeyboard)
throw
newexception(
"解除安裝鉤子失敗!");
57}5859
[dllimport(
"user32")]
60public
static
extern
inttoascii(
intuvirtkey,
61int
uscancode,
62byte
lpbkeystate,
63byte
lpwtranskey,
64int
fustate);
6566
[dllimport(
"user32")]
67public
static
extern
intgetkeyboardstate(
byte
pbkeystate);
6869
private
const
intwm_keydown
=0x100;70
private
const
intwm_keyup
=0x101;71
private
const
intwm_syskeydown
=0x104;72
private
const
intwm_syskeyup
=0x105;73
74private
intkeyboardhookproc(
intncode, int32 wparam, intptr lparam)
7587}88
89return
callnexthookex(hkeyboardhook, ncode, wparam, lparam);90}
9192
~keyboardhook()
9396
} 編譯成dll,然後將其載入到你的cad專案中,在cad中要實現的**很容易。
**1private
keyboardhook k_hook;
2document doc =3
database db =4
editor ed =5
objectid entid
=objectid.null;67
[commandmethod(
"moveent
", commandflags.usepickset)]
8public
void
moveent()924
catch
(system.exception ex)
2529
30transaction tr
=db.transactionmanager.starttransaction();
31using
(tr)
3239}40
41private
void
hook_keydown(
object
sender, keyeventargs e)
4261
if(e.keycode
==keys.up)
//向上移
6266
else
if(e.keycode
==keys.down)
6771
else
if(e.keycode
==keys.left)
7276
else
if(e.keycode
==keys.right)
7781
else
if(e.keycode
==keys.escape)
8286
else
8790
91//
提交92
tr.commit();
93ed.updatescreen();94}
95}96}
97catch
(autodesk.autocad.runtime.exception ex)
98101
}102
103~
keymoveen()
104執行以後便是上面的貼圖展現出來的效果。(看了上面的效果,感覺是不是可以實現乙個cad版本的俄羅斯方塊遊戲
)
python事件處理 Python事件處理程式
我正在嘗試實現乙個排序的事件處理程式。我嘗試使用popen使用外部程序收集示例網路捕獲,並編寫乙個xml檔案。我解析xml檔案來收集我需要的資訊。但是我不想終止這個過程,直到資料報的數量達到一定限度。def getpacketcount xmlfile,count,pid while 1 try p...
事件處理 on 繫結事件
on 方法在匹配元素上繫結乙個或者多個事件處理函式 element.on events,selector fn 發生多個事件的話 div on click function mouseout function 發生事件發生同樣的操作的話 div on mouseover mouseout funct...
React事件處理和原生JS事件處理
事件觸發呼叫有三種方式 1.on event 事件屬性,手動觸發 on event 事件是window物件上的方法。2.on event 事件屬性,通過htmlelement.click 模擬觸發 3.addeventlistener監聽事件,手動觸發 this指向 如果onevent事件屬性定義的...