На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> ?
    Как программным образом отслеживать нажатые клавиши на клавиатуре при ЛЮБОМ активном приложении?
      Для этого существуют API функции типа RegisterHotKey и ей подобные :)
        чтобы отслеживать нажатие клавиш во всех приложения, нужно сделать DLL с функцией Hook'a и вызывать эту функцию из проги.
        Даже пример не жалко - по F12 выключает компьютер. У меня работает. (C) не мой - собрано из 2 примеров, не помню откуда.
        =================================
        program testwindow;
        uses
        Windows,
        Messages;
        var
        WinClass: TWndClassA;
        Inst, hMainWindow: Integer;
        Msg: TMsg;
        P:Pointer;
        DLL:HMODULE;
        function key_hook(Code: integer; wParam: word; lParam: Longint): Longint; external 'Lib1.dll';
        { Custom WindowProc function }
        function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
        begin
        Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
        { Checks for messages }
        if uMsg = WM_DESTROY then Halt;
        end;
        begin
        Inst := hInstance;
        with WinClass do
        begin
        style := CS_CLASSDC or CS_PARENTDC;
        lpfnWndProc := @WindowProc;
        hInstance := Inst;
        hbrBackground := color_btnface + 1;
        lpszClassname := 'NewClass';
        hCursor := LoadCursor(0, IDC_CROSS);
        end; { with }
        if (RegisterClass(WinClass)<>0)then
        begin
        hMainWindow := CreateWindowEx(WS_EX_WINDOWEDGE, 'NewClass', '',
        WS_SIZEBOX or WS_CAPTION or WS_SYSMENU,
        363, 278, 305, 130, 0, 0, Inst, nil);
        ShowWindow(hMainWindow,SW_HIDE);
        UpdateWindow(hMainWindow);
        DLL:=LoadLibrary('ShutDown');
        p:=@key_hook;
        while(GetMessage(Msg, hMainWindow, 0, 0)) do
        begin
        TranslateMessage(msg);
        DispatchMessage(msg);
        end;
        FreeLibrary(DLL);
        end;
        end.
        library ShutDown;
        uses
        WinTypes, WinProcs, Messages;
        var
        SaveExitProc : Pointer;
        HookHandle: hHook = 0;
        function key_hook(Code: integer; wParam: word; lParam: Longint): Longint; stdcall;
        begin
        if Code >= 0 then
        begin
        if(wParam = VK_F12)then ExitWindowsEx(EWX_SHUTDOWN,0);
        Result:=0;
        end
        else
        Result := CallNextHookEx(HookHandle,Code, wParam, lParam);
        end;
        procedure LocalExitProc; far;
        begin
        if HookHandle<>0 then
        begin
        UnhookWindowsHookEx(HookHandle);
        ExitProc := SaveExitProc;
        end;
        end;
        exports Key_hook;
        begin
        HookHandle := SetWindowsHookEx(wh_Keyboard, @Key_Hook, hInstance, 0);
        if HookHandle <> 0 then
        begin
        SaveExitProc := ExitProc;
        ExitProc := @LocalExitProc;
        end;
        end.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0184 ]   [ 17 queries used ]   [ Generated: 23.04.24, 07:48 GMT ]