Приведу парочку из загашника. Ни разу не претендую на авторство, так что ценителей авторского права просьба сообщать о возможных нарушениях незамедлительно.
Убирание кнопки Пуск в Windows
Данная программа убирает кнопку Пуск (Start) на 5 секунд, а потом возвращает ее назад. Проверял на Windows 2000 и XP. Если программу прервать в отведенные 5 секунд, кнопку Пуск придется восстанавливать повторным запуском программы.
#include <windows.h>
int main(void) {
// Ищем кнопку.
HWND hWnd;
hWnd = FindWindow("Shell_TrayWnd", NULL);
hWnd = FindWindowEx(hWnd, NULL, "BUTTON", NULL);
// Прячем её.
ShowWindow(hWnd, SW_HIDE);
// Ждём.
Sleep(5000);
// Показываем обратно.
ShowWindow(hWnd, SW_SHOW);
return 0;
}
Мигание индикаторами на клавиатуре Данная программа устраивает бегущий огонек по индикаторам NUM LOCK, CAPS LOCK и SCROLL LOCK на более менее обычных клавиатурах.
#include <windows.h>
void kbdLight(WORD code) {
INPUT input;
input.type = INPUT_KEYBOARD;
input.ki.wVk = code;
input.ki.wScan = 0;
input.ki.dwFlags = 0;
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
SendInput(1, &input, sizeof(input));
input.type = INPUT_KEYBOARD;
input.ki.wVk = code;
input.ki.wScan = 0;
input.ki.dwFlags = KEYEVENTF_KEYUP;
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
SendInput(1, &input, sizeof(input));
}
int main(void) {
while (true) {
kbdLight(VK_NUMLOCK);
Sleep(100);
kbdLight(VK_CAPITAL);
Sleep(100);
kbdLight(VK_SCROLL);
Sleep(100);
}
return 0;
}
Если у вас есть интересные исходнички подобного рода — прикладывайте в комментарии. Не все же нам в каких-то конструкторах копаться.
Интересно каким образом узнали имя окна "Shell_TrayWnd" ? просмотром исполняемых файлов и dll Windows? вроде не документирована такая информация. Под Vista не работает не находи кнопку
ОтветитьУдалитьFindWindowEx(hWnd, NULL, "BUTTON", NULL), hWnd == NULL.
Интересно бы под Windows 7 проверить...
ОтветитьУдалитьДа, "официальной" информации про это нет, хотя на том же msdn'е есть статейки, например http://msdn.microsoft.com/en-us/magazine/cc188951.aspx, где это упоминается.
Честно, то лично я не копал сам. Я взял этот пример откуда-то, проверил и запомнил как интересную фишку. Мало ли в виндах еще "загадок".
В любой операционке есть всякие штучки типа этой, что и, собственно, интересно.
> Интересно каким образом узнали имя окна "Shell_TrayWnd"?
ОтветитьУдалитьВ комплекте VisualStudio испокон веков идёт утилита Spy++. Она показывает иерархию окон в системе, а также различную информацию о них.
В Windows 7 нуна получать Handle "Button" a не BUTTON. Тока что проверил в Microsoft Spy
ОтветитьУдалить-----------------------------------
http://syscoder.blogspot.com/