• ベストアンサー

HANDLEて何ですか?

#include <windows.h> #include <stdio.h> #include <conio.h> int Locate(HANDLE, int, int); int TxtPrint(HANDLE, char *); int main() { HANDLE hStdout; SYSTEMTIME st; char str[32]; hStdout = GetStdHandle(STD_OUTPUT_HANDLE); while(!_kbhit()) { Locate(hStdout, 0, 10); GetLocalTime(&st); wsprintf(str, "現在%2d時%2d分%2d秒です", st.wHour, st.wMinute, st.wSecond); TxtPrint(hStdout, str); Sleep(500); } return 0; } int Locate(HANDLE hOut, int x, int y) { COORD dwPos; dwPos.X = (SHORT)x; dwPos.Y = (SHORT)y; if (SetConsoleCursorPosition(hOut, dwPos) == 0) return -1; else return 0; } int TxtPrint(HANDLE hOut, char *str) { BOOL bResult; DWORD dwResult; bResult = WriteConsole(hOut, (CONST VOID *)str, (DWORD)lstrlen(str), &dwResult, NULL); if (bResult == 0) return -1; else return 0; } よくハンドルと言う言葉が出てくるのですが、いまいち意味がわかりません。あとint Locate()の所で COORD dwPos; dwPos.X = (SHORT)x; dwPos.Y = (SHORT)y; とやっているのですが、これは?

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

int Locate()の部分について COORD は構造体です。MSDNライブラリで確認できると思いますがCOORD は以下のように定義されています。 typedef struct _COORD { // coord. SHORT X; // horizontal coordinate SHORT Y; // vertical coordinate } COORD; SHORT も typedef short SHORTと定義されいるだけで単にshort型です。 dwPos.X = (SHORT)x; dwPos.Y = (SHORT)y; xとyはint型なのでint→shortにキャスト(変換)しています。 HANDLEは typedef void *HANDLE と定義されていますが、 要はOS(windows)から渡される整理券みたいなものです。

morumomo
質問者

お礼

ありがとうございました。

その他の回答 (2)

noname#25358
noname#25358
回答No.2

 ハンドルというのは識別番号です。  たとえば、ファイルにアクセスするためには、ファイルスペックのほかにディスク上の物理位置情報やシーク位置情報など、たくさんの情報を持っている必要があります。  また、デバイスの種類によって情報の内容が変わるので、これらをアプリケーション側から弄られると、ちょっと困った事になってしまいます。  そこで、それらの情報は『アプリからは見えない位置』に置いておき、アプリには識別番号のみを伝えておきます。  その識別番号のことを『ハンドル』と呼び、OSはこの識別番号を見て、アプリがどんな操作をしたがっているかを判断します。  もっとも、識別番号とは名ばかりで実は物理アドレスだったりすることもあります。  ですが、アプリが外部デバイスや仮想デバイスなどにアクセスするための『とっかかり』だと思っておけば間違いないです。

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.1

ハンドルとは「取って」のようなものです たとえば片手で「取っ手」のついてないコップを取るよりも 「取っ手」のついてあるコップを取るようが取りやすいでしょう この「取って」のようなものです