Я пытаюсь написать программу Haskell, которая имитирует нажатия клавиш на Windows. Я попытался вызвать keybd_event и SendInput, но ни один не скомпилирован. Однако я могу запустить программу с помощью интерпретатора. Когда я пытаюсь построить программу, если она содержит привязку к SendInput в winable.h, я получаю ошибку:Моделирование нажатий клавиш с помощью Haskell на Windows
cabal install
...
[1 of 2] Compiling WindowsKeys (dist\build\WindowsKeys\WindowsKeys-tmp\WindowsKeys.hs, dist\build\WindowsKeys\WindowsKeys-tmp\WindowsKeys.o)
[2 of 2] Compiling Main (src\Main.hs, dist\build\WindowsKeys\WindowsKeys-tmp\Main.o)
Linking dist\build\WindowsKeys\WindowsKeys.exe ...
dist\build\WindowsKeys\WindowsKeys-tmp\WindowsKeys.o:fake:(.text+0x35d): undefined reference to `SendInput'
collect2: ld returned 1 exit status
cabal: Error: some packages failed to install:
WindowsKeys-0.1.0.0 failed during the building phase. The exception was:
ExitFailure 1
многословная ошибки в http://pastebin.com/trg21N0x, но это, кажется, не содержит какие-либо больше ключей. Я получаю аналогичную ошибку, когда пытаюсь использовать keybd_event
. СГГ файл я написал включает в себя следующие заголовки:
#include "windows.h"
#include "winuser.h"
#include "winable.h"
Вот С обязательным:
foreign import ccall unsafe "winable.h SendInput"
c_SendInput :: UINT
-> Ptr Input
-> CInt
-> IO UINT
Я предположил, что я не мог назвать SendInput
на winuser.h из-за #if:
#if (_WIN32_WINNT >= 0x0403)
WINUSERAPI UINT WINAPI SendInput(UINT,LPINPUT,int);
Когда я добавляю привязку для _WIN32_WINNT
, значение равно 0x400.
У меня есть версия 2012.4.0.0 платформы Haskell. Он поставляется с папкой заголовков, содержащей те, которые я включил. Я не мог найти никаких других заголовков с одинаковыми именами на моем компьютере. Я использую Windows 7 Professional, версия 6.1.
Спасибо!
Вот WindowsKeys.cabal:
-- Initial WindowsKeys.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: WindowsKeys
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.8
extra-source-files: windows.h, winuser.h, winable.h
executable WindowsKeys
main-is: Main.hs
other-modules: WindowsKeys
build-depends: base ==4.5.*, Win32 ==2.2.*
hs-source-dirs: src
build-tools: hsc2hs
extra-libraries: user32
include-dirs: src
сборка прошла успешно, когда я закомментируйте привязки к функциям клавиатуры.
Вы пытаетесь связать какую-нибудь библиотеку? Если да, то какая библиотека, и как вы рассказываете GHC, где ее найти? Что в '* .cabal'? –
Я пытаюсь связать с библиотекой user32 в Windows. Я обновил свой вопрос в файле .cabal. – user2917747