--- /dev/null
+#include <windows.h>
+#include <windowsx.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static char** lpFileNames;
+static int iFileNameNumber = 0;
+static int iFileNameMallocSize = 128;
+
+void init_file_name()
+{
+ lpFileNames = malloc(sizeof(char*)*iFileNameMallocSize);
+ iFileNameNumber = 0;
+}
+
+void final_file_name()
+{
+ int i;
+ for(i=0; i<iFileNameNumber; i++) {
+ free(lpFileNames[i]);
+ }
+ free(lpFileNames);
+}
+
+void add_file_name(char* fname)
+{
+ if(iFileNameNumber >= iFileNameMallocSize) {
+ iFileNameMallocSize *= 2;
+ lpFileNames = realloc(lpFileNames, sizeof(char*)*iFileNameMallocSize);
+ }
+
+ lpFileNames[iFileNameNumber++] = strdup(fname);
+}
+
+void erase_file_name(int index)
+{
+ free(lpFileNames[index]);
+ iFileNameNumber--;
+
+ int i;
+ for(i=index; i<iFileNameNumber; i++) {
+ lpFileNames[i] = lpFileNames[i+1];
+ }
+
+puts("FILES");
+for(i=0; i<iFileNameNumber; i++) {
+puts(lpFileNames[i]);
+}
+
+ //memcpy(lpFileNames + index, lpFileNames + index + 1, iFileNameNumber - index -1);
+
+}
+
+void clear_file_names()
+{
+ int i;
+ for(i=0; i<iFileNameNumber; i++) {
+ free(lpFileNames[i]);
+ }
+
+ iFileNameNumber = 0;
+}
+
+void output_file_names()
+{
+ int i;
+ for(i=0; i<iFileNameNumber; i++) {
+ printf("%s\n", lpFileNames[i]);
+ }
+}
+
+#define ID_LISTBOX 1
+#define ID_BUTTON_OK 2
+#define ID_BUTTON_DEL 3
+#define ID_BUTTON_RESET 4
+
+LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ HDC hdc;
+ PAINTSTRUCT ps;
+ static HWND hList;
+ UINT uFileNo;
+ char szFileName[256];
+ HDROP hDrop;
+
+ switch(msg) {
+ case WM_CREATE: {
+ RECT rect;
+ GetClientRect(hWnd, &rect);
+ hList = CreateWindow(
+ TEXT("LISTBOX"), NULL,
+ WS_CHILD | WS_VISIBLE | WS_BORDER,
+ 40, 0, rect.right, rect.bottom-40, hWnd, (HMENU)ID_LISTBOX,
+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
+ CreateWindow(
+ TEXT("BUTTON"), TEXT("OK"),
+ WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
+ 0, 0, 100, 30, hWnd, (HMENU)ID_BUTTON_OK,
+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
+ CreateWindow(
+ TEXT("BUTTON"), TEXT("\8dí\8f\9c"),
+ WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
+ 120, 0, 100, 30, hWnd, (HMENU)ID_BUTTON_DEL,
+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
+ CreateWindow(
+ TEXT("BUTTON"), TEXT("\83\8a\83Z\83b\83g"),
+ WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
+ 240, 0, 100, 30, hWnd, (HMENU)ID_BUTTON_RESET,
+ ((LPCREATESTRUCT)(lParam))->hInstance, NULL);
+ DragAcceptFiles(hWnd, TRUE);
+ }
+ break;
+
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ return 1;
+
+ case WM_COMMAND: {
+ switch(LOWORD(wParam)) {
+ case ID_BUTTON_OK: {
+ SendMessage(hWnd, WM_CLOSE, 0, 0);
+ }
+ break;
+
+ case ID_BUTTON_DEL: {
+ int selectedItem = SendMessage((HWND)hList, LB_GETCURSEL, 0, 0);
+ SendMessage(hList, LB_DELETESTRING, selectedItem, 0);
+ erase_file_name(selectedItem);
+ }
+ break;
+
+ case ID_BUTTON_RESET:
+ SendMessage(hList, LB_RESETCONTENT, 0, 0);
+ clear_file_names();
+ break;
+ }
+ }
+ break;
+
+ case WM_PAINT: {
+ RECT rect;
+ GetClientRect(hWnd, &rect);
+ //AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, FALSE, 0);
+ SetWindowPos(hList, NULL, 0, 40, rect.right-rect.left
+ , rect.bottom-rect.top-40, 0);
+ }
+ break;
+
+ case WM_DROPFILES: {
+ hDrop = (HDROP)wParam;
+ uFileNo = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
+ int i;
+ for(i = 0; i<(int)uFileNo; i++) {
+ DragQueryFile(hDrop, i, szFileName, sizeof(szFileName));
+ SendMessage((HWND)hList, LB_ADDSTRING, 0, (long)szFileName);
+ add_file_name(szFileName);
+/*
+ if(ShellExecute(hWnd, NULL, szFileName, NULL, NULL, SW_SHOWNORMAL) <= (HINSTANCE)32)
+ {
+ MessageBox(hWnd, "\83t\83@\83C\83\8b\82ð\8aJ\82¯\82Ü\82¹\82ñ\82Å\82µ\82½", "\8e¸\94s", MB_OK);
+ }
+*/
+ }
+ DragFinish(hDrop);
+ }
+ break;
+
+ }
+ return DefWindowProc(hWnd, msg, wParam, lParam);
+}
+
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
+ PSTR lpCmdLine, int nCmdShow)
+{
+ HWND hWnd;
+ MSG msg;
+ WNDCLASS winc;
+
+ init_file_name();
+
+ winc.style = CS_HREDRAW | CS_VREDRAW;
+ winc.lpfnWndProc = WndProc;
+ winc.cbClsExtra = winc.cbWndExtra = 0;
+ winc.hInstance = hInstance;
+ winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+ winc.hCursor = LoadCursor(NULL, IDC_ARROW);
+ winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
+ winc.lpszMenuName = NULL;
+ winc.lpszClassName = TEXT("mousehook");
+
+ if(!RegisterClass(&winc)) {
+ fprintf(stderr, "RegisterClass\n");
+ final_file_name();
+ return 1;
+ }
+
+ hWnd = CreateWindow(
+ TEXT("mousehook"), TEXT("Kitty on your lap"),
+ WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ 300, 300,
+ NULL, NULL, hInstance, NULL);
+
+ if(hWnd == NULL) {
+ fprintf(stderr, "CreateWindow\n");
+ final_file_name();
+ return 1;
+ }
+
+ while(GetMessage(&msg, NULL, 0, 0)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ output_file_names();
+
+ final_file_name();
+ return msg.wParam;
+}