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

    Cách tìm id của thread trong VC++?

    mình có đoạn code như này:
    Mã:
    #include <windows.h>
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
    {
    	DWORD threadIdNotepad;
    	HANDLE hwnd2;
    	hwnd2 = FindWindowA("Notepad", "Untitled - Notepad");
    	if (hwnd2 == NULL)
    	{
    		MessageBoxA(0, "khong tim thay notepad", "hook", 0);
    		
    	}
    	else
    	{
    		threadIdNotepad = GetThreadId(hwnd2);
    		if (threadIdNotepad == NULL)
    		{
    			MessageBoxA(0, "khong lay dc id", "hook", 0);
    
    		}
    	}
    		return 0;
    }
    - mình chạy và bị báo lỗi không lấy được id. bạn nào biết sai ở đâu thì chỉ mình với
    - code đó mình dùng để tìm giá trị cho tham số cuối của hàm SetWindowsHookEx(). cho mình hỏi là notepad khi chạy là một tiến trình hay tiểu trình vì mình thấy có
    hàm GetProcessId() nữa mà tham số cuối của hàm SetWindowsHookEx() là threadid vậy thì chỉ hook dc một thread chứ không hook dc một process à (hook cục bộ)

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trong MSDN

    GetThreadId function
    Retrieves the thread identifier of the specified thread.
    Syntax

    C++

    DWORD WINAPI GetThreadId(
    _In_ HANDLE Thread
    );

    Parameters

    Thread [in]
    A handle to the thread. The handle must have the THREAD_QUERY_INFORMATION or THREAD_QUERY_LIMITED_INFORMATION access right. For more information about access rights, see Thread Security and Access Rights.
    Windows Server 2003: The handle must have the THREAD_QUERY_INFORMATION access right.
    Return value

    If the function fails, the return value is zero. To get extended error information, call GetLastError.
    Sai ở đây là bạn sử dụng hàm với đối số là thẻ cửa sổ (HWND) chứ không phải thẻ tiểu trình (HANDLE) nên hàm bị sai và giá trị trả về là zero (NULL) nên bạn nhận thông báo ở trên.

    notepad khi chạy là một tiến trình, còn các kỹ thuật hook mình chưa đụng tới nhiều nên chưa trả lời bạn.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    - mình hiểu ý bạn và mình đã thử lại nhựng không được bạn ơi. cụ thể là mình đã tìm HWND bằng FinWindows sau đó lấy bỏ vào GetWindowThreadProcessId lấy được pid bỏ vào
    OpenProcess lấy được HANDLE mình đã thử HANDLE đó bằng cách kill notepad và thành công nhưng khi bỏ HANDLE đó vào GetThreadID thì nó vẫn trả về null

 

 

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
  •