Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 17
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình nghĩ là ko có, bởi vì cửa sổ đã đăng ký classname ngay từ lúc tạo ra rồi, do đó ko thể thay đổi classname sau khi tạo.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi meoconlongvang
    Mình nghĩ là ko có, bởi vì cửa sổ đã đăng ký classname ngay từ lúc tạo ra rồi, do đó ko thể thay đổi classname sau khi tạo.
    không có thật, nhưng search ra chỉ thấy có thể thay đổi loại dialog-based.
    Nhưng mà theo kiểu capture class name của nó ban đầu sau đó đóng nó lại. Rồi create một instance mới với modified class name.
    cũng lòng vòng [IMG]images/smilies/alert.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thế nếu ta Hook Hàm Createwindow thì có thể thay đổi được không ???

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    chính xác ở đây có phải bạn định nói đến việc thay thế instance, thủ tục cho window, hay thay đổi một số thuộc tính của class (như biểu tượng, con trỏ, nền,bitmap)? Nếu đúng là thế thì bạn có thể dùng SetClassLong hoặc SetWindowLong.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    #include "StdAfx.h"
    
    #pragma data_seg(".shared")
    #pragma comment(lib,"User32.lib") 
    #pragma comment(lib,"Advapi32.lib")
    
    DWORD ProtectingPid = 0;
    
    #pragma data_seg()
    
    HMODULE MyModuleHandle;
    HHOOK hhk = NULL;
    DWORD MyPid = 0;
    unsigned char Store[10];
    
    
    long _stdcall SelfInject();
    long _stdcall SelfEject();
    
    LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam);
    HWND _stdcall CreateWindowExW2(          DWORD dwExStyle,
        LPCWSTR lpClassName,
        LPCWSTR lpWindowName,
        DWORD dwStyle,
        int x,
        int y,
        int nWidth,
        int nHeight,
        HWND hWndParent,
        HMENU hMenu,
        HINSTANCE hInstance,
        LPVOID lpParam
    	);
    
    
    void HookAPI();
    void UnHookAPI();
    
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  reason,
                           LPVOID lpReserved
    					 )
    {
    	if (reason == DLL_PROCESS_ATTACH)
    	{
    		HookAPI();
    		MyModuleHandle = (HMODULE)hModule;
    		MyPid = GetCurrentProcessId();
    	}
    	else if (reason == DLL_PROCESS_DETACH)
    	{
    		UnHookAPI();
    	}
    	return TRUE;
    }
    
    long _stdcall SelfInject()
    {
    	ProtectingPid = MyPid;
    	hhk = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,MyModuleHandle,0);
    	return (hhk != NULL);
    }
    
    long _stdcall SelfEject()
    {
    	return UnhookWindowsHookEx(hhk);
    }
    
    LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    	return CallNextHookEx(hhk,nCode,wParam,lParam);
    }
    
    void HookAPI()
    {
    	DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE;
    	HMODULE hmod = GetModuleHandle("user32.dll");
    	long pa = (long)GetProcAddress(hmod,"CreateWindowExW");
    	long pa2 = (long)CreateWindowExW2;
    	long dAddr = pa2 - pa - 5;
    	unsigned char *p = (unsigned char *)pa;
    	unsigned char *p2 = (unsigned char *)(&dAddr);
    
    	VirtualProtect((void *)pa,5,NewProtect,&OldProtect);
    
    	for (int i=0;i<5;i++)
    		Store[i] = p[i];
    
    	p[0] = (unsigned char)0xE9;
    	for (i=0;i<4;i++)
    		p[i + 1] = p2[i];
    
    	VirtualProtect((void *)pa,5,OldProtect,&NewProtect);
    }
    
    void UnHookAPI()
    {
    	DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE;
    	HMODULE hmod = GetModuleHandle("user32.dll");
    	long pa = (long)GetProcAddress(hmod,"CreateWindowExW");
    	unsigned char *p = (unsigned char *)pa;
    
    	VirtualProtect((void *)pa,5,NewProtect,&OldProtect);
    
    	for (int i=0;i<5;i++)
    		p[i] = Store[i];
    
    	VirtualProtect((void *)pa,5,OldProtect,&NewProtect);
    }
    
    HWND _stdcall CreateWindowExW2(          DWORD dwExStyle,
        LPCWSTR lpClassName,
        LPCWSTR lpWindowName,
        DWORD dwStyle,
        int x,
        int y,
        int nWidth,
        int nHeight,
        HWND hWndParent,
        HMENU hMenu,
        HINSTANCE hInstance,
        LPVOID lpParam
    	)
    {
    	MessageBoxW(0,lpClassName,L"ksf",0);
    	//MessageBoxW(0,lpClassName,lpWindowName,0);
    	if (lstrcmpW(lpClassName,(LPCWSTR)"CabinetWClass")==0) //cua so thu muc
    	{
    		lpClassName = (LPCWSTR)"1234567891111";//thay doi class
    		lpWindowName = (LPCWSTR)"Title";
    	}
    	UnHookAPI();
    	HWND ans =  CreateWindowExW(dwExStyle,
    		lpClassName,
    		lpWindowName,
    		dwStyle,
    		x,
    		y,
    		nWidth,
    		nHeight,
    		hWndParent,
    		hMenu,
    		hInstance,
    		lpParam
    	);
    	HookAPI();
    	return ans;
    }
    đây là Hàm Hook CreateWindowExW

    nhưng không hiểu tại sao mình không thay đổi được class và Title của Folder nhỉ ( mình Hook để mỗi lần vào thư mục là sẽ thay đổi Title và class của thư mục đó )

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @Cpro : Rất phí công và mất thì giờ. Bạn phải hook một dây các hàm RegisterClassEx, CreateWindowEx, UnRegisterClassEx. Đôi khi sẽ làm cho chương trình bị crash.

    @icttrack : SetWindowLong không đổi được classname của cửa sổ.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi meoconlongvang
    @Cpro : Rất phí công và mất thì giờ. Bạn phải hook một dây các hàm RegisterClassEx, CreateWindowEx, UnRegisterClassEx. Đôi khi sẽ làm cho chương trình bị crash.

    @icttrack : SetWindowLong không đổi được classname của cửa sổ.
    Mình đâu có nói là đổi class name, những hàm kia thay đổi thuộc tính của class, mà cần gì phải đổi class khi đã thay đổi được hầu hết thuộc tính của nói

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi icttrack
    Mình đâu có nói là đổi class name, những hàm kia thay đổi thuộc tính của class, mà cần gì phải đổi class khi đã thay đổi được hầu hết thuộc tính của nói
    THì biết là thế, nhưng ý chủ xị là muốn thay đổi cả class name cơ.

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    RegisterClassEx
    vậy mình Hook hàm này có được không nhỉ

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •