找回密码
 加入

AUTOIT CN

搜索
查看: 141|回复: 3

[AU3基础] WM_NOTIFY里面的Send导致键盘上的大写键失效 求解[已解决]

[复制链接]
发表于 2018-3-13 21:23:55 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2018-3-13 21:57 编辑

一个 LISTVIEW控件 与一个 INPUT控件,焦点切换时  会触发 WM_NOTIFY里面的 $NM_SETFOCUS与 $NM_KILLFOCUS

在  $NM_SETFOCUS与 $NM_KILLFOCUS 里面 分别放入 Send("{CTRLDOWN}")与Send("{CTRLUP}") 运作上本来没啥问题,但是最近发现会导致 键盘原本的大写灯号熄灭  变成小写

测试 方法 请 将 键盘大写灯号打开  然后 执行程序  切换焦点

你就会发现 灯号熄灭 但是 从程序代码来看 应该不会导致这样的结果才对

求解  但是 要求 Send("{CTRLDOWN}")与Send("{CTRLUP}") 程序代码位置不能更动 只能放在   $NM_SETFOCUS与 $NM_KILLFOCUS 里面

不知道 是否有高手 愿意协助解决!!

程式碼 如下:

  1. #include <GUIConstantsEx.au3>
  2. #include <ListViewConstants.au3>
  3. #include <WindowsConstants.au3>
  4. #Include <GuiListView.au3>
  5. $Debug_LV = False ;<<<<<<<<<+++
  6. Global $ListView, $B_DESCENDING
  7. _Example1()
  8. Func _Example1()
  9. Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE);<<<<<<<<<+++
  10. Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER);<<<<<<<<<+++
  11. GUICreate('升?或降序', 633, 454, 192, 114)
  12. $ListView = GUICtrlCreateListView("", 10,10, 430, 300)
  13. GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES);<<<<<<<<<+++
  14. GUICtrlSendMsg($ListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT);<<<<<<<<<+++
  15. _GUICtrlListView_AddColumn($ListView, "A", 100)
  16. _GUICtrlListView_AddColumn($ListView, "B", 100)
  17. _GUICtrlListView_AddColumn($ListView, "C", 100)
  18. _GUICtrlListView_AddColumn($ListView, "D", 100)
  19. _GUICtrlListView_JustifyColumn($ListView, 0, 2)
  20. _GUICtrlListView_JustifyColumn($ListView, 1, 2)
  21. _GUICtrlListView_JustifyColumn($ListView, 2, 2)
  22. _GUICtrlListView_JustifyColumn($ListView, 3, 2)
  23. GUICtrlCreateListViewItem("1|5|e|", $ListView)
  24. GUICtrlCreateListViewItem("2|3|ee|", $ListView)
  25. GUICtrlCreateListViewItem("3|8|eg|", $ListView)
  26. GUICtrlCreateListViewItem("4|7|eg|", $ListView)
  27. GUICtrlCreateListViewItem("5|6|ej|", $ListView)
  28. GUICtrlCreateListViewItem("6|5|ek|", $ListView)
  29. GUICtrlCreateListViewItem("7|2|le|", $ListView)
  30. GUICtrlCreateListViewItem("8|1|je|", $ListView)
  31.   GUICtrlCreateInput("", 10, 320, 300, 20)

  32. GUISetState()
  33. GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY");<<<<<<<<<+++
  34. Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($ListView)];<<<<<<<<<+++

  35.    Do;<<<<<<<<<+++
  36. Until GUIGetMsg() = $GUI_EVENT_CLOSE
  37. GUIDelete()
  38. EndFunc

  39. Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam);<<<<<<<<<+++
  40. #forceref $hWnd, $iMsg, $iwParam
  41. Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
  42. $hWndListView = $ListView
  43. If Not IsHWnd($ListView) Then $hWndListView = GUICtrlGetHandle($ListView)

  44. $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
  45. $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
  46. $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
  47. $iCode = DllStructGetData($tNMHDR, "Code")
  48. Switch $hWndFrom
  49.    Case $hWndListView
  50.     Switch $iCode
  51.      Case $LVN_COLUMNCLICK ; A column was clicked
  52.       $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)

  53.   
  54.      Case $NM_SETFOCUS ; The control has received the input focus
  55.                 ConsoleWrite("按下"&@CRLF)
  56.                 Send("{CTRLDOWN}") ;保持 A 鍵按下
  57.       ; No return value
  58.           
  59.      Case $NM_KILLFOCUS ; The control has lost the input focus
  60.                 ConsoleWrite("放開"&@CRLF)
  61.                 Send("{CTRLUP}") ;釋放 A 鍵
  62.       ; No return value
  63.           
  64.     EndSwitch
  65. EndSwitch
  66. Return $GUI_RUNDEFMSG
  67. EndFunc   ;==>WM_NOTIFY
复制代码
发表于 2018-3-13 21:50:27 | 显示全部楼层
  1. Opt('SendCapslockMode',0)
复制代码
 楼主| 发表于 2018-3-13 21:53:02 | 显示全部楼层
回复 2# haijie1223

這樣就解決了嗎?? 放在 一開始嗎??
 楼主| 发表于 2018-3-13 21:55:56 | 显示全部楼层
回复 2# haijie1223

果然是高手~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备15028933号-3 )谷歌 百度

GMT+8, 2018-6-21 09:06 , Processed in 0.093750 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表