Nếu tôi có ứng dụng bảng điều khiển có tay cầm để thiết lập như vậy;C++: Cách đặt wndProc mới cho ứng dụng bảng điều khiển?
HWND hWnd = GetConsoleWindow();
Sau đó, làm cách nào để thiết lập wndProc mới cho cửa sổ?
tôi đã cố gắng sử dụng
SetWindowLong(hWnd, GWL_WNDPROC, (LONG)conProc);
Với conProc được định nghĩa là
LRESULT CALLBACK conProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_NCHITTEST:
return HTCAPTION;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
Nhưng nó không hoạt động và nói "Error code: 5 - Truy cập bị từ chối" trên GetLastError()
Tôi hiểu rằng nó khá khó khăn để sửa đổi các ứng dụng giao diện điều khiển như thế này, vì nó là một ứng dụng csrss.exe và tất cả, nhưng tôi vẫn muốn thử .. Cảm ơn.
Tùy thuộc vào những gì đó là * cho *, bạn có thể tìm ra [dự án điều khiển] (http: // sourceforge .net/projects/console /) hữu ích. –
Thật thú vị vì tôi định nói rằng bạn có thể lấy 'WNDCLASSEX' được liên kết với nó và làm cho cửa sổ của riêng bạn dựa trên cái đó, nhưng hóa ra việc lấy' WNDCLASSEX' hơi khó. 'GetClassInfoEx' cần một trình xử lý mô-đun và việc xử lý đó gây phiền toái. Ngay cả 'CreateToolhelp32Snapshot' rõ ràng nói rằng bạn không thể sử dụng nó với csrss.exe. – chris