線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1756
推到 Plurk!
推到 Facebook!

控應用程式窗口的消息的DLL 有開發過HOOK的請進來幫助我吧

尚未結案
ctjh900801
一般會員


發表:3
回覆:0
積分:0
註冊:2010-12-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-02 23:48:55 IP:118.233.xxx.xxx 訂閱
 小弟寫了一支程式昰用VB.NET 開發的 但要監控到第三方的軟體 來達到自動控制的目的

所以小弟用VC 2010 開發HOOK的 DLL 讓VB.NET 去調用

但HOOK 算是底層的應用程序 開發這個對小弟來說有很大的難度 花了不少的時間 找了很多HOOK的資料

但還是不曉得該怎麼著手不知道怎麼寫 所以來此問一下各位高手了

這是我用SPY 去監控的應用程序的窗口 我要監看的功能函數就是WM_PSD_ENVSTAMPRECT 的lParam 的值
<00031> 00020E46 S WM_PSD_ENVSTAMPRECT wParam:00000001 lParam:00000001 <<<1
<00032> 00020E46 R WM_PSD_ENVSTAMPRECT lResult:00000000
<00033> 00020E46 S WM_PSD_PAGESETUPDLG wParam:00000000 lParam:00000000
<00034> 00020E46 R WM_PSD_PAGESETUPDLG lResult:00000001
<00035> 00020E46 S WM_PSD_ENVSTAMPRECT wParam:00000001 lParam:00000002 <<<2
<00036> 00020E46 R WM_PSD_ENVSTAMPRECT lResult:00000000
<00037> 00020E46 S WM_PSD_PAGESETUPDLG wParam:00000000 lParam:00000000
<00038> 00020E46 R WM_PSD_PAGESETUPDLG lResult:00000002
<00039> 00020E46 S WM_PSD_ENVSTAMPRECT wParam:00000001 lParam:00000003 <<<3 獲取 WM_PSD_ENVSTAMPRECT 的lParam值
<00040> 00020E46 R WM_PSD_ENVSTAMPRECT lResult:00000000
<00041> 00020E46 S WM_PSD_PAGESETUPDLG wParam:00000000 lParam:00000000

我花了很多時間研究了許多跟HOOK有關的C 代碼,但是對小弟來說難度實在太高了。 不好理解

請不要直接給我參考資料 小弟已經搜索了很多的參考資料

從簡單到複雜的HOOK 我都有看過 可是就是不曉得如何著手

我知道的有 要先安裝勾子 然後選擇勾子類型 定義結構 還有共用記憶體也要考慮 還要註銷勾子

安裝勾子用SetWindowEx 勾子類型不曉得用什麼才對 定義結構也不知道要考慮什麼?

希望能直接給我針對我這個project能夠直接給我要寫些什麼代碼進去的幫助

在此謝謝各位了。

以下是小弟我目前寫的代碼 請給予我幫助:
----------------------------------
// hookps.cpp : 定義 DLL 應用程式的匯出函式。
//
#include
#include "stdafx.h"
HWND g_hWnd;
HHOOK hThisHook; //保存鉤子的控制碼
static LRESULT CALLBACK HookedShellProc(int nCode, WPARAM wParam, LPARAM lParam);
//定義共用的資料結構
typedef struct
{
HHOOK hThisHook; //當前使用的 HOOK
//... 此處可增加其他共用的資料
};
LRESULT HookProc (
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
);
HINSTANCE hDll;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hDll = (HINSTANCE) hModule;
return TRUE;
};
int GetWindowTextRemote(HWND hwnd,LPSTR lpString)
{
g_hWnd=hwnd;
hThisHook=SetWindowsHookEx(WH_SHELL,(HOOKPROC)HookProc,hDll,GetWindowThreadProcessId(hwnd,NULL) );
};
#define RELEASEHOOK(hThisHook) // <<<<<<將勾子註銷
{ //<<< 不曉得為什麼一直冒出IntelliSense: 必須宣告
if(hThisHook)
{
UnhookWindowsHookEx(hThisHook);
hThisHook = NULL;
}
};
enum
{
HM_SHELL = 0x0100,
};
----------------------------------------------------------------------------------
我在這邊定義的勾子類刑昰使用WH_SHELL 我不曉得對不對 然後接下來我就完全不曉得該怎麼寫了

#define RELEASEHOOK(hThisHook) // <<<<<<將勾子註銷
{ //<<<
上面這裡 不曉得為什麼一直冒出IntelliSense: 必須宣告 的錯誤訊息

這是其中一個問題。

還有我目前還需要在代碼中加入什麼 或是有什麼錯誤 或是哪邊是多加的代碼

沒用處 或是這個勾子類型用錯 請大家針對我這幾個問題給予我協助 謝謝各位了。


編輯記錄
ctjh900801 重新編輯於 2011-10-02 09:57:21, 註解 無‧
ctjh900801 重新編輯於 2011-10-02 09:58:22, 註解 無‧
ctjh900801 重新編輯於 2011-10-02 09:58:49, 註解 無‧
ctjh900801 重新編輯於 2011-10-02 09:58:50, 註解 無‧
系統時間:2017-10-22 21:29:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!