书接前文。
我决定还是用按键精灵 like 的方式处理一个第三方 win32 程序的自动提交了。
所以我开启了一个新的 vb.net 工程。
一个 form。
一个方形的 form。
拉了一个方形的按钮。
双击这个按钮。
睿智的编辑器自动给我生成了 button on click handler。
到现在,一切还很美好。
然后呢。
我需要一个 api。
一个 user32 的 api。
一个用的不能再熟悉的 FindWindowEx 的函数。
定义是什么鬼来着?
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
甩进去
找到一个 dialog,美滋滋
继续找 dialog 里面的 Edit
Dim idEdit& = FindWindowEx(dialogHwnd, 0&, "Edit", vbNullStr)
执行
进程卡死
杀掉 vs.net ,如故。
反复实验几次,总算偶然一次出了一个报错提示:
blah blah 托管类型不一致 blah blah
哦哦,api 声明错了吧,hhhh
dotNet 版本的是这么写:
Private Declare Function FindWindowEx Lib "user32" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
这特么的都是魔法么?
msdn 上去哪找这么多魔法的定义?
好,继续,我们输入文本。
输入文本?需要一个消息,需要 send 一个WM_SETTEXT
给对应的 hwnd
可是
WM_SETTEXT
又等于啥?
好,放狗找:
private CONST WM_SETTEXT= &HC
奈斯
然后操作 ListBox 嗯,这东西用的人少,demo 代码也比较少,我们找下文档
都在这呢哈,真香。 可是,每一个常量的值都是啥? 文档里面说得好好的,去 winuser.h 看吧 放狗找了下: winuser.h
/*
* Listbox messages
*/
#define LB_ADDSTRING 0x0180
#define LB_INSERTSTRING 0x0181
#define LB_DELETESTRING 0x0182
#define LB_SELITEMRANGEEX 0x0183
#define LB_RESETCONTENT 0x0184
#define LB_SETSEL 0x0185
#define LB_SETCURSEL 0x0186
#define LB_GETSEL 0x0187
意思是,让我把这些消息常量都转成 vb 的语法贴进去吗?
还有一些不那么反人类的用法吗??
所以……实现这点需求的正确的 vb.net 的用法是啥?
1
Rheinmetal 2018-07-12 14:01:29 +08:00
ahk 不能实现?
非要用 bv win32 用 c |
2
yangguoshuai OP |
3
Rheinmetal 2018-07-13 08:56:19 +08:00
|
4
Rheinmetal 2018-07-13 08:59:08 +08:00 1
|
5
yangguoshuai OP @Rheinmetal 感谢。。伸手党再多问一句,ahk 支持生成独立的支持参数外部调用的程序吗。。。
|
6
Rheinmetal 2018-07-13 13:38:35 +08:00
可以编译成 exe
|