C 滑鼠穿透功能

2021-09-03 09:17:46 字數 3136 閱讀 3778

(以下內容是從網上查詢的)

一、滑鼠穿透功能用到的函式。

1、getwindowlong

該函式獲得有關指定視窗的資訊,函式也獲得在額外視窗記憶體中指定偏移位位址的32位度整型值。

hwnd:視窗控制代碼及間接給出的視窗所屬的視窗類。   

nlndex:指定要獲得值的大於等於0的值的偏移量。有效值的範圍從0到額外視窗記憶體空間的位元組數一4例如,若指定了12位或多於12位的額外類儲存空間,則應設為第三個32位整數的索引位8。要獲得任意其他值,指定下列值之一:   

gwl_exstyle;獲得擴充套件視窗風格。   

gwl_style:獲得視窗風格。   

gwl_wndproc:獲得視窗過程的位址,或代表視窗過程的位址的控制代碼。必須使用callwindowproc函式呼叫視窗過程。   

gwl_hinstance:獲得應用事例的控制代碼。   

gwl_hwndpaaent:如果父視窗存在,獲得父視窗控制代碼。   

gwl_id:獲得視窗標識。   

gwl_userdata:獲得與視窗有關的32位值。每乙個視窗均有乙個由建立該視窗的應用程式使用的32位值。   在hwnd引數標識了乙個對話方塊時也可用下列值:   

dwl_dlgproc:獲得對話方塊過程的位址,或乙個代表對話方塊過程的位址的控制代碼。必須使用函式callwindowproc來呼叫對話方塊過程。   

dwl_msgresult:獲得在對話方塊過程中乙個訊息處理的返回值。   

dwl_user:獲得應用程式私有的額外資訊,例如乙個控制代碼或指標。   返回值:如果函式成功,返回值是所需的32位值;如果函式失敗,返回值是0。若想獲得更多錯誤資訊請呼叫 getlasterror函式。

2、setlayeredwindowattributes  

hwnd是透明窗體的控制代碼,   

crkey為掩碼的顏色,可以用rgb(r,g,b)來指定。   

balpha是不透明度,取值範圍是(0,255),其中0代表全透明,255代表不透明。   

dwflags是透明方式,可以取兩個值:   當取值為lwa_alpha時,crkey引數無效,balpha引數有效;   當取值為lwa_colorkey時,窗體中的所有顏色為crkey的地方將變為透明,balpha引數無效。   

lwa_alpha = 0x2   

lwa_colorkey=0x1   

也可以取兩個值的組合:lwa_alpha or lwa_colorkey。這樣crkey的地方將變為全透明,而其它地方根據balpha引數確定透明度。

3、setwindowlong

函式也將指定的乙個32位值設定在視窗的額外儲存空間的指定偏移位置。

hwnd:視窗控制代碼及間接給出的視窗所屬的類。   

nlndex:指定將設定的大於等於0的偏移值。有效值的範圍從0到額外類的儲存空間的位元組數減4:例如若指定了12位或多於12位的額外類儲存空間,則應設為第三個32位整數的索引位8。要設定其他任何值,可以指定下面值之一:   

gwl_exstyle:設定乙個新的擴充套件風格。   

gwl_style:設定乙個新的視窗風格。   

gwl_wndproc:為視窗過程設定乙個新的位址。   

gwl_id:設定乙個新的視窗識別符號。   

gwl_hinstance:設定乙個新的應用程式例項控制代碼。   

gwl_userdata:設定與視窗有關的32位值。每個視窗均有乙個由建立該視窗的應用程式使用的32位值。   當hwnd引數標識了乙個對話方塊時,也可使用下列值:   

dwl_dlgproc:設定對話方塊過程的新位址。   

dwl_msgresult:設定在對話方塊過程中處理的訊息的返回值。   

dwl_user:設定的應用程式私有的新的額外資訊,例如乙個控制代碼或指標。   

dwnewlong:指定的替換值。   

返回值:如果函式成功,返回值是指定的32位整數的原來的值。如果函式失敗,返回值為0。若想獲得更多錯誤資訊,請呼叫getlasterror函式。

二、**

private const uint ws_ex_layered = 0x80000;            private const int ws_ex_transparent = 0x20;            private const int gwl_style = (-16);            private const int gwl_exstyle = (-20);            private const int lwa_alpha = 0x2;            [dllimport("user32", entrypoint = "setwindowlong")]            private static extern uint setwindowlong(            intptr hwnd,            int nindex,            uint dwnewlong            );          [dllimport("user32", entrypoint = "getwindowlong")]            private static extern uint getwindowlong(            intptr hwnd,            int nindex            );          [dllimport("user32", entrypoint = "setlayeredwindowattributes")]          //balpha是不透明度,取值範圍是(0,255),其中0代表全透明,255代表不透明。           private static extern int setlayeredwindowattributes(            intptr hwnd,            int crkey,            int balpha,            int dwflags          );            /// /// 使視窗有滑鼠穿透功能          ///           public void canpenetrate()                          public form1()                      private void form1_load(object sender, eventargs e)

實現「滑鼠穿透窗體」功能

1 delphi實現 varws dword begin ws getwindowlong form1.handle,gwl exstyle ws ws or ws ex transparent ws ws or 80000 setwindowlong form1.handle,gwl exstyl...

滑鼠穿透 flex實現

問 乙個面板上有許多的可是物件,有些物件的部分是透明的,當各種物件疊加時,需忽略透明的部分而直接選中下面的物件。如何使用flex的api來實現滑鼠穿透。答 使用hittestpoint x number,y number,shapeflag boolean boolean 計算顯示物件,以確定它是否...

c 實現Picturebox的滑鼠拖拽功能

要求及背景 工作需要,要在乙個form裡面實現乙個實時預覽的picturebox影象,由於picturebox可能會遮擋到其後面的畫面,所以要求picturebox可以由使用者自行拖拽,類似於懸浮框。原理說明 在網上兜了幾圈之後,決定用三段 實現。首先要註冊滑鼠的三個事件 移動 滑鼠左鍵按下 滑鼠左...