Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: Hàm API Thay đổi Class name cho 1 cửa sổ ???

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Wink Hàm API Thay đổi Class name cho 1 cửa sổ ???

    Bạn nào có thể cho mình biết hàm API nào để thay đổi class name của 1 cửa sổ không ???

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    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.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    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
    None!

  4. #4
    Ngày gia nhập
    12 2008
    Bài viết
    198

    thế nếu ta Hook Hàm Createwindow thì có thể thay đổi được không ???

  5. #5
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    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 gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định Hàm API Thay đổi Class name cho 1 cửa sổ ???

    @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ổ.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    @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

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi icttrack Xem bài viết
    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ơ.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Code:
    #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 đó )
    Attached Files Attached Files

  10. #10
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    ClassName được đăng ký từ hàm RegisterClassEx rồi. Hàm CreateWindow chỉ lấy class name đã có để tạo cửa sổ nên hook hàm CreateWindow cũng không có tác dụng đâu.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

Các đề tài tương tự

  1. Mã nguồn C Lỗi Lỗi see reference to class template instantiation 'std::list<_Ty>' being khi sử dụng Iterator cho class tự xây dựng
    Gửi bởi Mr_Chan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 10-07-2013, 01:58 AM
  2. thay đổi giá trị biến const trong class có được không?
    Gửi bởi gs_nguyenhuong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 17-10-2012, 01:22 PM
  3. Lỗi: error C2440: 'initializing' : cannot convert from 'class xxx *' to 'class xxx *' sửa như thế nào?
    Gửi bởi Nupakachy trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 16-06-2011, 08:54 PM
  4. Làm sao để thay đổi namespace trong class và form project khác?
    Gửi bởi thaibeo17 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-03-2011, 12:31 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn