• R/O
  • HTTP
  • SSH
  • HTTPS

winautomata: Commit

cygwinからウィンドウズを制御するプログラム群。とりあえず、マウスの制御プログラムのみ開発しました。これからも発展していきます。


Commit MetaInfo

Revision4621c2ae96907d7132a6c786a1676c17db2c7a17 (tree)
Time2012-12-14 21:07:11
Authorab25cq <ab25cq@gmai...>
Commiterab25cq

Log Message

drop

Change Summary

Incremental Difference

--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
1-all: enum_windows click wheel cursor_pos window_from_point mousehook mousehook_lib.dll
1+all: enum_windows click wheel cursor_pos window_from_point mousehook mousehook_lib.dll drop
22
33 install: all
44 mkdir -p /usr/local/bin
@@ -11,7 +11,7 @@ install: all
1111 install -m 755 mousehook_lib.dll /usr/local/bin
1212
1313 clean:
14- rm -rf enum_windows click wheel cursor_pos window_from_point mousehook mousehook_lib.dll mousehook_lib.o
14+ rm -rf enum_windows click wheel cursor_pos window_from_point mousehook mousehook_lib.dll mousehook_lib.o drop
1515
1616 enum_windows: enum_windows.c
1717
@@ -29,3 +29,6 @@ mousehook: mousehook.c mousehook_lib.dll
2929 mousehook_lib.dll: mousehook_lib.c
3030 gcc -c mousehook_lib.c
3131 gcc -shared -o mousehook_lib.dll mousehook_lib.o -Wl,--kill-at
32+
33+drop: drop.c
34+ gcc -o drop drop.c -lgdi32
--- a/README
+++ b/README
@@ -18,4 +18,5 @@
1818 wheel: 引数に数字を指定して、その量だけウィールを動かします。> 0で上方向、 < 0で下方向にスクロール。
1919 cursor_pos: カーソルの位置を返します。引数を指定するとカーソルを移動します。 < 0で現在位置のまま。-1 10だとy方向のみ10に移動します。
2020 window_from_point: カーソルの下にあるウィンドウのクラス名を表示します。
21- mousehook: STARTボタンを押すとフック開始。ENDでフック終了。現在地のマウスの座標を表示します。クリック、右クリックを行った場所も表示します。
21+ mousehook: STARTボタンを押すとフック開始。ENDでフック終了。現在位置のマウスの座標を表示します。クリック、右クリックを行った場所も表示します。
22+ get_dnd: ファイルのドラッグアンドドロップを受け付けます。ウィンドウを閉じると受け取ったファイルの一覧を出力します。
--- /dev/null
+++ b/drop.c
@@ -0,0 +1,219 @@
1+#include <windows.h>
2+#include <windowsx.h>
3+#include <stdio.h>
4+#include <stdlib.h>
5+
6+static char** lpFileNames;
7+static int iFileNameNumber = 0;
8+static int iFileNameMallocSize = 128;
9+
10+void init_file_name()
11+{
12+ lpFileNames = malloc(sizeof(char*)*iFileNameMallocSize);
13+ iFileNameNumber = 0;
14+}
15+
16+void final_file_name()
17+{
18+ int i;
19+ for(i=0; i<iFileNameNumber; i++) {
20+ free(lpFileNames[i]);
21+ }
22+ free(lpFileNames);
23+}
24+
25+void add_file_name(char* fname)
26+{
27+ if(iFileNameNumber >= iFileNameMallocSize) {
28+ iFileNameMallocSize *= 2;
29+ lpFileNames = realloc(lpFileNames, sizeof(char*)*iFileNameMallocSize);
30+ }
31+
32+ lpFileNames[iFileNameNumber++] = strdup(fname);
33+}
34+
35+void erase_file_name(int index)
36+{
37+ free(lpFileNames[index]);
38+ iFileNameNumber--;
39+
40+ int i;
41+ for(i=index; i<iFileNameNumber; i++) {
42+ lpFileNames[i] = lpFileNames[i+1];
43+ }
44+
45+puts("FILES");
46+for(i=0; i<iFileNameNumber; i++) {
47+puts(lpFileNames[i]);
48+}
49+
50+ //memcpy(lpFileNames + index, lpFileNames + index + 1, iFileNameNumber - index -1);
51+
52+}
53+
54+void clear_file_names()
55+{
56+ int i;
57+ for(i=0; i<iFileNameNumber; i++) {
58+ free(lpFileNames[i]);
59+ }
60+
61+ iFileNameNumber = 0;
62+}
63+
64+void output_file_names()
65+{
66+ int i;
67+ for(i=0; i<iFileNameNumber; i++) {
68+ printf("%s\n", lpFileNames[i]);
69+ }
70+}
71+
72+#define ID_LISTBOX 1
73+#define ID_BUTTON_OK 2
74+#define ID_BUTTON_DEL 3
75+#define ID_BUTTON_RESET 4
76+
77+LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
78+{
79+ HDC hdc;
80+ PAINTSTRUCT ps;
81+ static HWND hList;
82+ UINT uFileNo;
83+ char szFileName[256];
84+ HDROP hDrop;
85+
86+ switch(msg) {
87+ case WM_CREATE: {
88+ RECT rect;
89+ GetClientRect(hWnd, &rect);
90+ hList = CreateWindow(
91+ TEXT("LISTBOX"), NULL,
92+ WS_CHILD | WS_VISIBLE | WS_BORDER,
93+ 40, 0, rect.right, rect.bottom-40, hWnd, (HMENU)ID_LISTBOX,
94+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
95+ CreateWindow(
96+ TEXT("BUTTON"), TEXT("OK"),
97+ WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
98+ 0, 0, 100, 30, hWnd, (HMENU)ID_BUTTON_OK,
99+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
100+ CreateWindow(
101+ TEXT("BUTTON"), TEXT("削除"),
102+ WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
103+ 120, 0, 100, 30, hWnd, (HMENU)ID_BUTTON_DEL,
104+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
105+ CreateWindow(
106+ TEXT("BUTTON"), TEXT("リセット"),
107+ WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
108+ 240, 0, 100, 30, hWnd, (HMENU)ID_BUTTON_RESET,
109+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
110+ DragAcceptFiles(hWnd, TRUE);
111+ }
112+ break;
113+
114+ case WM_DESTROY:
115+ PostQuitMessage(0);
116+ return 1;
117+
118+ case WM_COMMAND: {
119+ switch(LOWORD(wParam)) {
120+ case ID_BUTTON_OK: {
121+ SendMessage(hWnd, WM_CLOSE, 0, 0);
122+ }
123+ break;
124+
125+ case ID_BUTTON_DEL: {
126+ int selectedItem = SendMessage((HWND)hList, LB_GETCURSEL, 0, 0);
127+ SendMessage(hList, LB_DELETESTRING, selectedItem, 0);
128+ erase_file_name(selectedItem);
129+ }
130+ break;
131+
132+ case ID_BUTTON_RESET:
133+ SendMessage(hList, LB_RESETCONTENT, 0, 0);
134+ clear_file_names();
135+ break;
136+ }
137+ }
138+ break;
139+
140+ case WM_PAINT: {
141+ RECT rect;
142+ GetClientRect(hWnd, &rect);
143+ //AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, FALSE, 0);
144+ SetWindowPos(hList, NULL, 0, 40, rect.right-rect.left
145+ , rect.bottom-rect.top-40, 0);
146+ }
147+ break;
148+
149+ case WM_DROPFILES: {
150+ hDrop = (HDROP)wParam;
151+ uFileNo = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
152+ int i;
153+ for(i = 0; i<(int)uFileNo; i++) {
154+ DragQueryFile(hDrop, i, szFileName, sizeof(szFileName));
155+ SendMessage((HWND)hList, LB_ADDSTRING, 0, (long)szFileName);
156+ add_file_name(szFileName);
157+/*
158+ if(ShellExecute(hWnd, NULL, szFileName, NULL, NULL, SW_SHOWNORMAL) <= (HINSTANCE)32)
159+ {
160+ MessageBox(hWnd, "ファイルを開けませんでした", "失敗", MB_OK);
161+ }
162+*/
163+ }
164+ DragFinish(hDrop);
165+ }
166+ break;
167+
168+ }
169+ return DefWindowProc(hWnd, msg, wParam, lParam);
170+}
171+
172+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
173+ PSTR lpCmdLine, int nCmdShow)
174+{
175+ HWND hWnd;
176+ MSG msg;
177+ WNDCLASS winc;
178+
179+ init_file_name();
180+
181+ winc.style = CS_HREDRAW | CS_VREDRAW;
182+ winc.lpfnWndProc = WndProc;
183+ winc.cbClsExtra = winc.cbWndExtra = 0;
184+ winc.hInstance = hInstance;
185+ winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
186+ winc.hCursor = LoadCursor(NULL, IDC_ARROW);
187+ winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
188+ winc.lpszMenuName = NULL;
189+ winc.lpszClassName = TEXT("mousehook");
190+
191+ if(!RegisterClass(&winc)) {
192+ fprintf(stderr, "RegisterClass\n");
193+ final_file_name();
194+ return 1;
195+ }
196+
197+ hWnd = CreateWindow(
198+ TEXT("mousehook"), TEXT("Kitty on your lap"),
199+ WS_OVERLAPPEDWINDOW | WS_VISIBLE,
200+ CW_USEDEFAULT, CW_USEDEFAULT,
201+ 300, 300,
202+ NULL, NULL, hInstance, NULL);
203+
204+ if(hWnd == NULL) {
205+ fprintf(stderr, "CreateWindow\n");
206+ final_file_name();
207+ return 1;
208+ }
209+
210+ while(GetMessage(&msg, NULL, 0, 0)) {
211+ TranslateMessage(&msg);
212+ DispatchMessage(&msg);
213+ }
214+
215+ output_file_names();
216+
217+ final_file_name();
218+ return msg.wParam;
219+}
Show on old repository browser