Anonymní profil Michal – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Michal – Programujte.comAnonymní profil Michal – Programujte.com

 

Příspěvky odeslané z IP adresy 188.175.163.–

Michal
.NET › Odchytavani WM_PAINT z cizih…
17. 9. 2013   #181464

Dekuji za uznani ;-)...

Michal
.NET › Odchytavani WM_PAINT z cizih…
13. 9. 2013   #181340

Vytvoril jsme si knihovnu, kdyz hooknu sve okno nebo vsechny procesy tak to funguje, avsak kdyz se snazim hookovat konkterni proces(vlakno) nechodi mi zpravy HOOK_CALLWNDPROC do meho programu.

Jeste uvedu, ze hookuji pouze 32-bit procesy jelikoz mam 32-bit knihovnu, takze tam problem neni.

DLL Knihovna:

HINSTANCE DllInstance = NULL;
HHOOK HookCallWndProc = NULL;
HWND HandleofApp = NULL;

static LRESULT CALLBACK CallWndProcHookCallback(int code, WPARAM wparam, LPARAM lparam);

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:

			if (DllInstance == NULL)
				DllInstance = hModule;

			break;
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
	}
	return TRUE;
}

static LRESULT CALLBACK CallWndProcHookCallback(int code, WPARAM wparam, LPARAM lparam)
{
	if (code >= 0)
	{
		UINT msg =  RegisterWindowMessage(L"HOOK_CALLWNDPROC");	
		SendNotifyMessage(HandleofApp, msg, wparam, lparam);
	}

	return CallNextHookEx(HookCallWndProc, code, wparam, lparam);
}

bool WINAPI InstallCallWndProcHook(HWND handleofTarget, HWND handleofApp)
{
	HandleofApp = handleofApp;

	UINT msg = RegisterWindowMessage(L"HOOK_INSTALL");
	SendNotifyMessage(HandleofApp, msg, 0, 0);	
	
	HookCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProcHookCallback, DllInstance, GetWindowThreadProcessId(handleofTarget, NULL));

	if(HookCallWndProc == NULL)
	{
		return false;
	}else{
		return true;
	}
}

void UninstallCallWndProcHook()
{
	if (HookCallWndProc!= NULL)
		UnhookWindowsHookEx(HookCallWndProc);

	HookCallWndProc = NULL;
}

Program:

 

  [DllImport("Hook.dll")]
		private static extern bool InstallCallWndProcHook(IntPtr handleofTarget, IntPtr handleofApp);

        [DllImport("user32.dll")]
        private static extern int RegisterWindowMessage(string lpString);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        private int _MsgID_CallWndProc;
        private int _MsgID_CallWndProc_Install;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _MsgID_CallWndProc_Install = RegisterWindowMessage("HOOK_INSTALL");
            _MsgID_CallWndProc = RegisterWindowMessage("HOOK_CALLWNDPROC");
    
            IntPtr h = FindWindow(null, "Muj_Form12345");
            InstallCallWndProcHook(h, this.Handle);
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == _MsgID_CallWndProc_Install)
            {
            }
            else if (m.Msg == _MsgID_CallWndProc)
            {

            }
            
            base.WndProc(ref m);
        }
Michal
.NET › Odchytavani WM_PAINT z cizih…
12. 9. 2013   #181328

Dobry vecer,

chtel bych vytvorit aplikaci, ktera by dokazala reagovat, kdyz se cizi aplikace (napr. chorme... atd) prekresli resp. dojde v zmene v oknu. Potrebuju si ujasnit par veci. Pouzit nejaky globalni hook? ci subclassing? a jak? Co je nejlepsi?

Asi budu muset napsat nejakou DLL knihovnu v C++, ktera se pak vlozi do ciziho procesu...

Potreboval bych nakopnout, jakou cestou se mam vydat :-).

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý