CAD Keyboard事件處理

2022-04-22 15:09:07 字數 3493 閱讀 8546

在之前的部落格隨筆中提到過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事件屬性定義的...