我已经成功地安装一个WH_GETMESSAGE带有钩SetWindowsHookEx,我可以看到的WM_POINTERDOWN,WM_POINTERUP等应用程序接收消息.(它是在Windows 8.1上运行的32位桌面应用程序.)
现在,我不仅希望看到这些消息,而且还想删除其中一些消息.
GetMsgProc的文档说:
GetMsgProc挂钩过程可以检查或修改消息.在钩子过程将控制权返回给系统之后,GetMessage或PeekMessage函数将消息以及任何修改返回给最初调用它的应用程序.
有了WM_KEYUP消息,这似乎工作正常.我可以将消息设置为WM_NULL挂钩,并且键事件将消失.
WM_POINTER...但是,对于消息,这似乎不起作用.应用程序仍然接收消息(在调试器中验证).
也许有其他方法来过滤/删除此类消息?
编辑:它必须使用未修改的第三方应用程序(因此使用钩子).
更新:我设法通过积极调用PeekMessage钩子来阻止点击事件(从长远来看可能不是一个好主意).但是,我仍然无法阻止通过触摸滚动.
我是F#初学者.我运行了这段代码:
let printMsg() =
let msg = "Important"
printfn "%s" msg
let innerMsgChange() =
let msg = "Very Important"
printfn "%s" msg
printfn "%s" msg
innerMsgChange()
printfn "%s" msg
printMsg()
Run Code Online (Sandbox Code Playgroud)
我期望文本输出将按以下顺序排列:
重要,非常重要,重要,重要
或这个
重要,非常重要,非常重要,重要
但我得到了这个
重要,重要,非常重要,重要
似乎这些函数不符合代码执行顺序.为什么,我错过了什么?
在我的追求,以了解更多F#,我试图执行一个"蓄电池发电机"由保罗·格雷厄姆描述这里.到目前为止,我最好的解决方案是完全动态输入:
open System
let acc (init:obj) : obj->obj=
let state = ref init
fun (x:obj) ->
if (!state).GetType() = typeof<Int32>
&& x.GetType() = typeof<Int32> then
state := (Convert.ToInt32(!state) + Convert.ToInt32(x)) :> obj
else
state := (Convert.ToDouble(!state) + Convert.ToDouble(x)) :> obj
!state
do
let x : obj -> obj = acc 1 // the type annotation is necessary here
(x 5) |> ignore
printfn "%A" (x 2) // prints "8"
printfn "%A" (x 2.3) // prints "10.3"
Run Code Online (Sandbox Code Playgroud)
我有三个问题:
我正在尝试制作一个非常简单的应用程序,它会根据一天中的时间来迎接.我的代码是:
open System
let read() = Console.Read()
let readLine() = Console.ReadLine()
let clockMsg min max todo =
if (DateTime.Now.Hour > min) && (DateTime.Now.Hour < max) then todo
let name = readLine()
clockMsg 0 8 <| printfn "Go to bed, %s!" name
clockMsg 8 12 <| printfn "Good morning, %s!" name
clockMsg 12 18 <| printfn "Good afternoon, %s!" name
read() |> ignore
Run Code Online (Sandbox Code Playgroud)
现在是我的问题,如何只有一个函数调用有效,但三个都无论如何,打印他们的消息?
是否可以将受约束的成员作为第一类函数(给定对象)进行访问?如果是这样,使用的语法是什么?
// Example: property getter as a first-class function
type Test() =
member x.Value = "42"
let t = Test()
let getter = t.get_Value // works as expected
// now generically:
let inline getGetter< ^a when ^a : (member get_Value : unit -> string)> item =
// call getter
let value = (^a : (member get_Value : unit -> string) item)
// try to get getter as first-class function
let getter = item.get_Value // doesn't compile: "Lookup on object of …Run Code Online (Sandbox Code Playgroud)