*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

суббота, 21 февраля 2009 г.

Спрятать кнопку "Пуск" и помигать клавиатурой

Я с удовольствием коллекционирую всякие программные штучки-дрючки в виде миниатюрных исходников.

Приведу парочку из загашника. Ни разу не претендую на авторство, так что ценителей авторского права просьба сообщать о возможных нарушениях незамедлительно.

Убирание кнопки Пуск в 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;
}
Если у вас есть интересные исходнички подобного рода — прикладывайте в комментарии.

Не все же нам в каких-то конструкторах копаться.

4 комментария:

  1. Интересно каким образом узнали имя окна "Shell_TrayWnd" ? просмотром исполняемых файлов и dll Windows? вроде не документирована такая информация. Под Vista не работает не находи кнопку
    FindWindowEx(hWnd, NULL, "BUTTON", NULL), hWnd == NULL.

    ОтветитьУдалить
  2. Интересно бы под Windows 7 проверить...

    Да, "официальной" информации про это нет, хотя на том же msdn'е есть статейки, например http://msdn.microsoft.com/en-us/magazine/cc188951.aspx, где это упоминается.

    Честно, то лично я не копал сам. Я взял этот пример откуда-то, проверил и запомнил как интересную фишку. Мало ли в виндах еще "загадок".

    В любой операционке есть всякие штучки типа этой, что и, собственно, интересно.

    ОтветитьУдалить
  3. > Интересно каким образом узнали имя окна "Shell_TrayWnd"?

    В комплекте VisualStudio испокон веков идёт утилита Spy++. Она показывает иерархию окон в системе, а также различную информацию о них.

    ОтветитьУдалить
  4. В Windows 7 нуна получать Handle "Button" a не BUTTON. Тока что проверил в Microsoft Spy

    -----------------------------------
    http://syscoder.blogspot.com/

    ОтветитьУдалить