• ベストアンサー

WIN上で動くマウスユーティリティを作るための用意

ウィンドウズ上でマウスを右に動かせば左に動き、左に動かせば右に動く。上に動かせば下に動き、下に動かせば上に動くというユーティリティを作りたいのですが、どこから勉強すれば良いのでしょう。 とりあえず私のレベルはCの初歩的教本の内容なら一応目を通しているというレベルです。つまり型の宣言やforループなどの論理文、ポインタや参照などは理解しています。ウィンドウズに登録できるユーティリティとは何かはまるで知りませんし、マウスを操作するプログラムを組んだこともありません。 言語はCを想定しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Quant
  • ベストアンサー率18% (23/122)
回答No.1

下のMSDNのサイトを見てサンプルを改造しながら作っていくのが早いかもしれません。 C++ による Windows プログラミングの学習 http://msdn.microsoft.com/ja-jp/library/ff381399(v=vs.85).aspx マウスを移動する http://msdn.microsoft.com/ja-jp/library/gg153550(v=VS.85).aspx マウス クリックに応答する http://msdn.microsoft.com/ja-jp/library/gg153548(v=VS.85).aspx その他のマウス操作 http://msdn.microsoft.com/ja-jp/library/gg153551(v=VS.85).aspx 下のプログラムは上のサイトを参考にして作ったマウスのウインドウ内の座標を表示するプログラムです。 Visual C++ 2010 Expressでコンパイルできます。 Borlandではpragma命令とクラスの設定で引っかかります。 #pragma comment(lib,"user32.lib") #pragma comment(lib,"gdi32.lib") #include <windows.h> #include <windowsx.h> #include <stdio.h> #define CLASSNAME "SKELETON" #define MAINTITLE "Move Mouse" #define WSTYLE 0 #define WNDPROC WndProc #define CLSEXTRA 0 #define WNDEXTRA 0 #define INSTANCE lih #define ICON LoadIcon(NULL,IDI_APPLICATION) #define CURSOR LoadCursor(NULL,IDC_ARROW) #define BACKGROUND (HBRUSH)(COLOR_WINDOW + 1) #define MENUNAME NULL #define CW_WIDTH 800 //GetSystemMetrics(SM_CXSCREEN) #define CW_HEIGHT 600 //GetSystemMetrics(SM_CYSCREEN) #define CW_LEFT ((GetSystemMetrics(SM_CXSCREEN) - CW_WIDTH) / 2) #define CW_TOP ((GetSystemMetrics(SM_CYSCREEN) - CW_HEIGHT) / 2) LRESULT CALLBACK WndProc(HWND wh,UINT ms,WPARAM wp,LPARAM lp) { HDC dh; char b[4096]; switch(ms) { case WM_MOUSEMOVE: sprintf(b," % 4d,% 4d ",GET_X_LPARAM(lp),GET_Y_LPARAM(lp)); dh = GetDC(wh); TextOut(dh,10,10,b,strlen(b)); ReleaseDC(wh,dh); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(wh,ms,wp,lp); } return 0; } int WINAPI WinMain(HINSTANCE lih,HINSTANCE rih,LPSTR argv,int ws) { MSG m; HWND w; WNDCLASS c = { WSTYLE,WNDPROC,CLSEXTRA,WNDEXTRA,INSTANCE, ICON,CURSOR,BACKGROUND,MENUNAME,CLASSNAME }; RegisterClass(&c); w = CreateWindow(CLASSNAME,MAINTITLE, WS_VISIBLE | WS_SYSMENU, CW_LEFT,CW_TOP,CW_WIDTH,CW_HEIGHT, HWND_DESKTOP,NULL,lih,NULL); while(1) switch(GetMessage(&m,NULL,0,0)) { case -1: case 0:return m.wParam; default: TranslateMessage(&m); DispatchMessage(&m); break; } } WindowsプログラムはGUIライブラリを使うことになりますので、Cを勉強するというよりライブラリの使い方を勉強するということになりますのでC自体やWindowsの仕組みがはっきり分かっていないと上記サイトの内容も難しく感じるかもしれません。

makoji
質問者

お礼

早速勉強してみます。 ありがとうございました。

関連するQ&A