番外:快速搜索脚本之win32版
几天前用python写了个快捷键打开搜索引擎的工具,但是后来又想搞得更像模像样一点,于是就着手用win32重新写了一遍,也加了一些新东西进去。win32开发是刚刚上手,一遍对着MSDN的例程一边一点点把功能堆上去的,但其实实际感受起来会发现api很多,用起来也很友好,比较烦人的也就是几种数据类型的转换。
思路还是和之前的差不多,从最最核心的获取剪切板和打开浏览器开始,有
1 | BOOL GetTextFromClipboard() |
然后我希望这个程序运行时只在托盘显示图标,首先初始化托盘并设置菜单,使用函数Shell_NotifyIcon来实现:
1 | void InitTray(HINSTANCE hInstance, HWND hWnd) |
接着创建主窗体,WS_EX_TOOLWINDOW这一项可以使任务栏上不会出现图标:
1 | HWND hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL); |
创建主窗口时,使用**ShowWindow(hWnd, SW_HIDE);**这一条语句来令窗口不显示
于是UI部分大致就完成了
最后再编写系统消息处理部分,不知道为什么,自定义的热键组合在dispatch后没办法被WinProc捕获,于是只能在dispatch之前对按键消息进行处理。like:
1 | MSG msg; |
最后WinProc里我们来做UI上的交互,也就是菜单功能的实现,包括切换搜索引擎以及程序的退出:
1 | LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { |
其实思路清晰之后一遍做下来并没有想象中的那么痛苦,特别是这种一个个功能迭代的过程是乐在其中的。win32编程无非是搞清楚系统消息和窗体的关系,要不是到后面顶不住身体突发不适可能会把更多功能怼进去,但是目前至少以及达到了我最初设想的样子了,也就不想再做下去了,UI这方面不用QT或者MFC做还是比较难搞的。
嘛,告一段落吧。