У меня есть быстрый вопрос. Я создал стандартное окно с API-интерфейсом окна из MSDN, создав сайт окна. Я хочу, чтобы программа изменила заголовок окна, в котором находится курсор мыши, когда я нажимаю клавишу на клавиатуре. Для этого я установил крючок для мыши низкого уровня, например:
LRESULT CALLBACK LowLevelMouseProc(__in int nCode, __in WPARAM wParam, __in LPARAM lParam) {
MSLLHOOKSTRUCT* p = (MSLLHOOKSTRUCT*)lParam;
HWND hiWnd = WindowFromPoint(p->pt); //Get a handle to the top-most window
ScreenToClient(hiWnd, &p->pt); //Converts the cursor position from screen to the specified window
char buf[33];
switch (wParam) {
case WM_MOUSEMOVE:
snprintf(buf, sizeof(buf) - 1, "X:%ld, Y:%ld", p->pt.x, p->pt.y); //Put the cursor coordinates into a char buffer
SendMessage(hiWnd, WM_SETTEXT, 0, (LPARAM)buf); //Send a message to the other window to change the title
break;
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
При вызове хука мыши только моя программа меняет текст. Кроме того, текст представляет собой набор китайских иероглифов, причем не один или два, а такой набор:
藡覶 跾 瑍痸碚 齫儽戃 羭聧蔩, 圪妀 跾 鶀嚵巆 堔埧娾 爂犤繵 摿斠榱 軥軱逴 潫 徖梜, 薍薝
Должен ли я возиться с окном переднего плана и вместо этого получить фоновое окно? Или окно, в котором находится текущая позиция мыши? я бы предположил, что
ScreenToClient(hiWnd, &p->pt)
Спасибо за помощь, ребята!
buf
, так что половина теории подтверждается. Другая половина определяет, используете ли вы Unicode-версиюSendMessage
. - person Raymond Chen   schedule 21.08.2015