請教用什么型別的鉤子攔截WM_CUT,WM_COPY
uj5u.com熱心網友回復:
試試 WH_CALLWNDPROCuj5u.com熱心網友回復:
試過了 wparam基本上都是0
跟wm_copy和cut差距挺大
uj5u.com熱心網友回復:
SPY++ 測驗下,看看是否能捕捉到uj5u.com熱心網友回復:
問題是 我用全域鉤子看到wparam的值很單一,換了很多種掛鉤都是,wm_都是根據wparam來判斷的吧
uj5u.com熱心網友回復:
static LRESULT CALLBACK InternalKeyboardHookCallback(int code, WPARAM wparam, LPARAM lparam)
{
char chInput[512];
sprintf(chInput, "int code=%d, WPARAM wparam=%d, LPARAM lparam=%d;\n", code, wparam, lparam);
OutputDebugString(chInput);
uj5u.com熱心網友回復:
祥看 CallWndProc 的說明,wParam [in]
Type: WPARAM
Specifies whether the message was sent by the current thread. If the message was sent by the current thread, it is nonzero; otherwise, it is zero.
lParam [in]
Type: LPARAM
A pointer to a CWPSTRUCT structure that contains details about the message.
uj5u.com熱心網友回復:
原來這樣 但是用callproc訊息還是拿不到wm_copy之類 COMMAND也拿不到
uj5u.com熱心網友回復:
WM_COPYAn application sends the WM_COPY message to an edit control or combo box to copy the current selection to the clipboard in CF_TEXT format.
WM_COPY
wParam = 0; // not used; must be zero
lParam = 0; // not used; must be zero
uj5u.com熱心網友回復:
我是用普通的textbox控制元件啊 wpf的,另外我如果掛了全域鉤,為什么本程式外的記事本復制,沒有截到wm_copy,用的是winproc
uj5u.com熱心網友回復:
“為什么本程式外的記事本” 不是 Edit 控制元件 ?uj5u.com熱心網友回復:
------------------------------------
我的理解是全域鉤應該是可以截取記事本之類的wm_copy訊息的
記事本不是Edit的嗎?
------------------------------------
那基本的textbox控制元件算是Edit了吧 一樣是沒截取到 只是截取到剪切板有改動的資訊
是不是wm_copy在剪切板結構里面提取?
uj5u.com熱心網友回復:
那么你向 textbox 發個 WM_COPY 看看 ?如char txt[40];
pWndEdit1000->SendMessage(WM_COPY,0,0);// COPY 資料到剪貼板
GetCBtext(txt);//剪貼板上的資料賦值給 txt[40],取出 輸入框值
uj5u.com熱心網友回復:
Debug.WriteLine(string.Format("---------send win32 copy----------"));
IntPtr hwnd = ((HwndSource)PresentationSource.FromVisual(txt_n1)).Handle;
SendMessage(hwnd, WM_COPY,0,0);
我往該控制元件發送WM_COPY,監控的到,這是為什么呢
uj5u.com熱心網友回復:
如果只是剪切板訊息能捕捉,我無法區分是copy還是cut,因為這兩者都引起剪切板訊息傳遞
uj5u.com熱心網友回復:
“An application sends the WM_COPY message”就是要 有 發msg 程式 !
沒人 發 ,怎么 回應 ?
uj5u.com熱心網友回復:
通常在一個行程中,不會發 WM_COPY ,因為 不必 通過剪貼板uj5u.com熱心網友回復:
那我如何區分操作是復制還是剪切?這個問題該不會很難吧
uj5u.com熱心網友回復:
是不是 應該 回應:Ctrl C 是復制
Ctrl V 是paste
Ctrl X 是cut
uj5u.com熱心網友回復:
不通過訊息怎么回應這些訊息?
uj5u.com熱心網友回復:
你hook 后,通過Ctrl C 是復制
Ctrl V 是paste
Ctrl X 是cut
來操作 edit
看 有沒有 訊息。
uj5u.com熱心網友回復:
我是滑鼠右鍵選單操作剪切 復制動作
我要區分滑鼠右鍵市按下的復制 剪切
hook鍵盤按鈕我有辦法區分了,就是滑鼠右鍵這里卡著了
uj5u.com熱心網友回復:
被hook程式 “是滑鼠右鍵選單操作剪切 復制動作” ?uj5u.com熱心網友回復:
不是“hook鍵盤按鈕我有辦法區分了”而是 CallWndProc 里 lParam
CWPSTRUCT *pcwp=( CWPSTRUCT *) lParam ;
switch(pcwp->message
{
case WM_COPY: break;
case WM_CUT;break;
}
The CWPSTRUCT structure defines the message parameters passed to a WH_CALLWNDPROC hook procedure, CallWndProc.
typedef struct tagCWPSTRUCT { // cwps
LPARAM lParam;
WPARAM wParam;
UINT message;
HWND hwnd;
} CWPSTRUCT;
uj5u.com熱心網友回復:
我目前也是這樣做的
wm_copy wm_cut 監聽不到
uj5u.com熱心網友回復:
鍵盤按鍵我是用了其他方法來處理的 不是靠message
但是那種方法,辨別不了滑鼠右鍵的事件,而全域winproc鉤子卻又沒截取到wm_cut
----------------------------------
我這個程式是wpf的
vc底下的editbox是可以截取到wm_cut的,我只是困惑有沒有全域鉤可以截取到不是VC的控制元件 wm_cut
uj5u.com熱心網友回復:
當前能 得到 什么 訊息 ?uj5u.com熱心網友回復:
當前能 得到 什么 訊息 ?
以下是出現的訊息 我順便把對應的訊息都列出來了
#define WM_NCHITTEST 0x0084
#define WM_DESTROYCLIPBOARD 0x0307
#define WM_DRAWCLIPBOARD 0x0308
#define WM_RENDERFORMAT 0x0305
#define WM_SETCURSOR 0x0020
#define WM_WINDOWPOSCHANGING 0x0046
#define WM_WINDOWPOSCHANGED 0x0047
#define WM_DESTROY 0x0002
#define WM_NCDESTROY 0x0082
#define WM_MENUCHAR 0x0120
#define WM_GETTEXT 0x000D
#define WM_ACTIVATE 0x0006
#define WM_ACTIVATEAPP 0x001C
uj5u.com熱心網友回復:
這些好像是主視窗的 訊息,沒有子視窗 edit 的 訊息
你那個hook 要hook edit 的 視窗 試試。
uj5u.com熱心網友回復:
這些好像是主視窗的 訊息,
沒有子視窗 edit 的 訊息
你那個hook 要hook edit 的 視窗 試試。
但是我是全域鉤子 winproc
還要掛靠視窗嗎
uj5u.com熱心網友回復:
"還要掛靠視窗嗎" 能試試嗎 ?uj5u.com熱心網友回復:
SPY++ 監視Edit 訊息右鍵剪切部分訊息
<00514> 000506BC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:433 yPos:467
<00515> 000506BC S WM_ENTERIDLE fuSource:MSGF_MENU hwnd:00040926
<00516> 000506BC R WM_ENTERIDLE
<00517> 000506BC P message:0x0118 [Unknown] wParam:0000FFFF lParam:DE8C0BB1
<00518> 000506BC P WM_LBUTTONUP fwKeys:0000 xPos:433 yPos:467
<00519> 000506BC S WM_CAPTURECHANGED hwndNewCapture:00000000
<00520> 000506BC R WM_CAPTURECHANGED
<00521> 000506BC S WM_MENUSELECT uItem:0 fuFlags:FFFF (menu was closed) hmenu:00000000
<00522> 000506BC R WM_MENUSELECT
<00523> 000506BC S WM_CUT
<00524> 000506BC S WM_COPY
<00525> 000506BC R WM_COPY
<00526> 000506BC R WM_CUT
<00527> 000506BC R WM_CONTEXTMENU
右鍵粘貼部分訊息
<00771> 000506BC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:438 yPos:503
<00772> 000506BC S WM_ENTERIDLE fuSource:MSGF_MENU hwnd:00050926
<00773> 000506BC R WM_ENTERIDLE
<00774> 000506BC P message:0x0118 [Unknown] wParam:0000FFFF lParam:DE8C0BB1
<00775> 000506BC P WM_LBUTTONUP fwKeys:0000 xPos:438 yPos:503
<00776> 000506BC S WM_CAPTURECHANGED hwndNewCapture:00000000
<00777> 000506BC R WM_CAPTURECHANGED
<00778> 000506BC S WM_MENUSELECT uItem:0 fuFlags:FFFF (menu was closed) hmenu:00000000
<00779> 000506BC R WM_MENUSELECT
<00780> 000506BC S WM_PASTE
<00781> 000506BC R WM_PASTE
<00782> 000506BC R WM_CONTEXTMENU
//右鍵拷貝部分訊息
<01433> 000506BC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:416 yPos:489
<01434> 000506BC S WM_ENTERIDLE fuSource:MSGF_MENU hwnd:00070926
<01435> 000506BC R WM_ENTERIDLE
<01436> 000506BC P WM_LBUTTONUP fwKeys:0000 xPos:416 yPos:489
<01437> 000506BC S WM_CAPTURECHANGED hwndNewCapture:00000000
<01438> 000506BC R WM_CAPTURECHANGED
<01439> 000506BC S WM_MENUSELECT uItem:0 fuFlags:FFFF (menu was closed) hmenu:00000000
<01440> 000506BC R WM_MENUSELECT
<01441> 000506BC S WM_COPY
<01442> 000506BC S WM_DESTROYCLIPBOARD
<01443> 000506BC R WM_DESTROYCLIPBOARD
<01444> 000506BC R WM_COPY
<01445> 000506BC R WM_CONTEXTMENU
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/92575.html
標籤:基礎類
上一篇:AUTOCAD二次開發
