1 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:20:46 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-10 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build66 pc11.2ch.net/test/read.cgi/tech/1210775622/
2 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:21:25 ] - MSDN ホームページ www.microsoft.com/japan/msdn/ - MSDN ライブラリ msdn.microsoft.com/library/ msdn.microsoft.com/library/ja/ - MSDN2 ライブラリ msdn2.microsoft.com/en-us/library/ msdn2.microsoft.com/ja-jp/library/ - MSDN ライブラリ (ローカル版) www.microsoft.com/downloads/details.aspx?familyid=6FF3BC60-32C8-4C22-8591-A20BF8DFF1A2&displaylang=ja www.microsoft.com/downloads/details.aspx?familyid=B8704100-0127-4D88-9B5D-896B9B388313&displaylang=ja - Windows SDK & Platform SDK www.microsoft.com/downloads/details.aspx?FamilyID=74dd6e2d-89c6-4e1e-af00-fc7d70f15439&DisplayLang=en www.microsoft.com/downloads/details.aspx?FamilyID=c2b1e300-f358-4523-b479-f53d234cdccf&DisplayLang=en www.microsoft.com/downloads/details.aspx?FamilyID=ff6467e6-5bba-4bf5-b562-9199be864d29&DisplayLang=en www.microsoft.com/downloads/details.aspx?FamilyID=7614FE22-8A64-4DFB-AA0C-DB53035F40A0&displaylang=ja www.microsoft.com/downloads/details.aspx?FamilyId=484269E2-3B89-47E3-8EB7-1F2BE6D7123A www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
3 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:22:16 ] - Google www.google.com/ - 猫でもわかるプログラミング www.kumei.ne.jp/c_lang/ - Win32 API入門 wisdom.sakura.ne.jp/system/winapi/ - Win32 プログラミング入門 www7.plala.or.jp/keny01/ - Advanced Windows (書籍) www.amazon.co.jp/dp/4756138055 -おまけ Build19が見たい人で余裕のある人は●でも買ってくれ。
4 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:23:57 ] 66 ttp://pc11.2ch.net/test/read.cgi/tech/1210775622/ 65 ttp://pc11.2ch.net/test/read.cgi/tech/1208847084/ 64 ttp://pc11.2ch.net/test/read.cgi/tech/1207099291/ 63 ttp://pc11.2ch.net/test/read.cgi/tech/1204600558/ 62 ttp://pc11.2ch.net/test/read.cgi/tech/1202060403/ 61 ttp://pc11.2ch.net/test/read.cgi/tech/1199514664/ 60 ttp://pc11.2ch.net/test/read.cgi/tech/1196874830/ 59 ttp://pc11.2ch.net/test/read.cgi/tech/1194701996/ 58 ttp://pc11.2ch.net/test/read.cgi/tech/1191781463/ 57 ttp://pc11.2ch.net/test/read.cgi/tech/1189255282/ 56 ttp://pc11.2ch.net/test/read.cgi/tech/1186989201/ 55 ttp://pc11.2ch.net/test/read.cgi/tech/1184853465/ 54 ttp://pc11.2ch.net/test/read.cgi/tech/1181645965/ 53 ttp://pc11.2ch.net/test/read.cgi/tech/1178882828/ 52 ttp://pc11.2ch.net/test/read.cgi/tech/1176828891/ 51 ttp://pc11.2ch.net/test/read.cgi/tech/1174416295/ 50 ttp://pc11.2ch.net/test/read.cgi/tech/1171721448/ 49 ttp://pc10.2ch.net/test/read.cgi/tech/1168708801/ 48 ttp://pc10.2ch.net/test/read.cgi/tech/1166172047/ 47 ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/ 46 ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/ 45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/ 44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/ 43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/ 42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
5 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:24:32 ] 41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/ 40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/ 39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/ 38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/ 37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/ 36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/ 35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/ 34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/ 33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/ 32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/ 31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/ 30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/ 29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/ 28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/ 27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/ 26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/ 25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/ 24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/ 23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/ 22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
6 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:25:49 ] 21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/ 20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/ 19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/ 18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/ 17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/ 16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★ 15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★ 14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html 13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html 12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html 11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html 10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html 9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html 8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html 7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html 6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html 5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html 4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html 3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html 2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html 1 ttp://pc.2ch.net/tech/kako/991/991576947.html
7 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:30:20 ] 21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/ 20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/ 19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/ 18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/ 17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/ 16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★ 15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★ 14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html 13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html 12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html 11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html 10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html 9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html 8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html 7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html 6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html 5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html 4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html 3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html 2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html 1 ttp://pc.2ch.net/tech/kako/991/991576947.html
8 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:32:10 ] >>1-7 乙
9 名前:前スレ958 mailto:sage [2008/06/08(日) 22:37:52 ] 960 名前:デフォルトの名無しさん[sage] 投稿日:2008/06/08(日) 10:58:25 >>958 >>959 のとおり、イベントログに情報がある。 ただ、OS起動やシャットダウンイベントはデフォルト設定だと記録されないはずなので、 設定を変えるか、もっと簡単にやりたいなら正確ではないけどイベントログサービスの 起動/停止時間をOS起動/シャットダウン時間とみなしてしまうやり方もある。 例がWin32APIでなくて申し訳ないけど、以下WMIのインタフェース使うスクリプトの例。 var query = "Select * from Win32_NTLogEvent where " + "LogFile = 'System' and SourceName = 'EventLog'"; var systemlogs = GetObject("winmgmts:!\\\\.\\root\\cimv2").ExecQuery(query); var e = new Enumerator(systemlogs); for (; ! e.atEnd(); e.moveNext()) { var log = e.item(); if (log.EventCode == 6005) {//イベントログサービス起動 WScript.Echo("起動: "+log.TimeGenerated); } else if (log.EventCode == 6006) {//イベントログサービス停止 WScript.Echo("停止: "+log.TimeGenerated); } } めちゃ助かりました。ありがとうございます。
10 名前:前スレ958 mailto:sage [2008/06/08(日) 22:39:52 ] 参考にして書いた.NETバージョンです public static DateTime イベントログの前回停止時間() { EventLog[] logs = EventLog.GetEventLogs("."); // ローカルコンピュータ DateTime result = DateTime.MinValue; bool ok = false; foreach (EventLog log in logs) { if (log.Log != "System") continue; foreach (EventLogEntry e in log.Entries) { if (e.EventID != 6006) continue; if (e.TimeGenerated > result) { result = e.TimeGenerated; ok = true; } } } if (!ok) { throw new ApplicationException("イベントログの前回停止時間の取得失敗"); } return result; }
11 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:50:52 ] >>10 スレ違い。邪魔。
12 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:55:09 ] >>1 おつ
13 名前:デフォルトの名無しさん [2008/06/08(日) 23:03:03 ] 英語だらけ
14 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:05:46 ] >>11 スルーしとけ お前も邪魔
15 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:06:56 ] >>14 ごめんなさい
16 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:36:20 ] 過去ログの横の★って何?
17 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:46:50 ] datが行方不明って事では
18 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 23:47:00 ] ↑「いやー ごめんなさい。」に巻き込まれてログなし
19 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 00:01:46 ] >>17-18 d
20 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:45:41 ] 誰もまともに答えてないところにちょっと情けなくも思ったが >>前スレ904 ファイルをD&Dで渡す動作を再現するならTMPGEncのHWNDを検索で見付け、 HDROPを自前で作ってWM_DROPFILESを投げればいい HDROPの作り方は検索すれば出てくる
21 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:54:24 ] 訳) やっと私に分かる質問を見つけて、喜び勇んでやってまいりました。
22 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 13:13:38 ] 訳:かまってほしいな
23 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 14:47:22 ] オンラインゲームにキーストロークを送るツールを作ろうと思い、 全スレ>>73 を参考にコードを書いてみたのですが、まったく反応なし。 >>53 で非推奨されている keybd_event(0, MapVirtualKey(DIK_A) ,KEYEVENTF_SCANCODE ,0) とかやってみたけどダメだった. JoyToKeyではちゃんと送れているので、方法がない訳じゃないとは思うんだけど... 他のやり方があれば教えてくれ。
24 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:08:30 ] ま た チ ー ト か
25 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:15:15 ] 全スレw
26 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:33:23 ] やめときなさい、普通に遊びなさい。
27 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:47:27 ] 能書きはいいからさっさと教えろ 知らないならレスするなカス
28 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:51:47 ] 知ってても誰も教えてくれないよ。ニートちゃん。
29 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:26:08 ] やり方知ってるよ 当然教えないよ ゴミ君
30 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:49:18 ] >>24-29 ※すべて同一人物です
31 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 19:05:17 ] ↑これも俺
32 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 19:12:22 ] ↑これも私
33 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 19:22:58 ] ↑これも↓これも僕
34 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 19:25:42 ] 呼んだ?
35 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 20:16:50 ] | ̄``''- 、 | `゙''ー- 、 ________ | ,. -‐ ''´ ̄ ̄`ヽ、_ / |, - '´ ̄ `ヽ、 / / `ヽ、ヽ / _/ ヽヽ/ / / / / / / ヽハ く / /! | 〃 _/__ l| | | | | | | ||ヽ \l// / | /|'´ ∧ || | |ー、|| | | l | ヽ /ハ/ | | ヽ/ ヽ | ヽ | || /|ヽ/! |/ | ヽ / | ||ヽ { ,r===、 \| _!V |// // .! | | || |l |ヽ!'´ ̄`゙ , ==ミ、 /イ川 |─┘ | ハ|| || | """ ┌---┐ ` / // | V !ヽ ト! ヽ、 | ! / //| / ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | / ┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/ |(/(/(/(/(/(/(/(/(/(/│|| |\ 〃 r'´ ̄ヽ. | | ト / \ /  ̄`ア | | | ⌒/ 入 〉  ̄二) 呼んでないが | | | / // ヽ 〈! ,. -' | | ヽ∠-----', '´ ', | \| | .お前の態度が | |<二Z二 ̄ / ', | | | _r'---| [ ``ヽ、 ', | | | 気に入らない >-、__ [ ヽ ! \.| l. ヽ、 [ ヽ | ヽ| \ r' ヽ、 |
36 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 20:47:57 ] ウィンドウのメニューの背景色を変えたいのですが、 どうすれば出来ますか?
37 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:06:58 ] オーナードロー
38 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:16:36 ] 質問です。 case WM_SYSCOMMAND: switch(LOWORD(wp)) { case SC_RESTORE: result = ::AnimateWindow(hWnd, 1000, AW_ACTIVATE | AW_CENTER); if(!result) { LPWSTR lpMessage = 0; DWORD error = ::GetLastError(); CONSOLEMSG(L"ERROR:[%d]\n", error); if( ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), lpMessage, 0, NULL) ) { if(!lpMessage) MessageBox(hWnd, lpMessage, NULL, MB_OK); } else { error = ::GetLastError(); CONSOLEMSG(L"ERROR:[%d]\n", error); } } break; case SC_MINIMIZE: ::AnimateWindow(hWnd, 500, AW_HIDE | AW_CENTER); ShowWindow(hWnd, SW_MINIMIZE); return TRUE; } break;
39 名前:38 mailto:sage [2008/06/09(月) 22:19:08 ] ウィンドウを最小化時と元に戻すときにアニメーションさせようと 上記のように元に戻すときのアニメーション書いたんですがうまくいきません。 原因が分かる方教えてください
40 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:40:42 ] オードーナロー
41 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:48:43 ] >>39 うまくいかない、じゃなくて具体的な現象を書けよ。 原因究明の重要な情報なんだからさ。
42 名前:38 mailto:sage [2008/06/09(月) 22:59:19 ] >>41 説明足がたらず、すみません。 最小化時はウィンドウのアニメーションが実行されるんですが、 元に戻すときにAnimateWindowが失敗してアニメーションが実行されないんです。 GetLastErrorでエラーをチェックすると正常終了のIDがセットされているので原因がよく分からないのです。 ちなみにCONSOLEMSGはOutputDebugStringのマクロです。
43 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:00:57 ] LVS_REPORTなリストビューで、カラムの文字列の左右のマージンを知りたいのですが、 どのように計算すればいいのでしょうか?
44 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:12:39 ] >>43 以下の関数を使う。 int ListView_GetColumnMargin(HWND hwnd) { return 4; } ListView_GetColumnMargin はおおよそのマージンを返します。
45 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:45:33 ] >>44 これはひどい
46 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:49:56 ] ワロタ
47 名前:44 mailto:sage [2008/06/10(火) 00:18:38 ] すまん間違えた。 int ListView_GetColumnMargin(HWND hwnd) { return 6; } >>45-46 一応マジレスなんだが。 正確には GetSystemMetrics(SM_CXEDGE) * 3 らしいが。
48 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:26:55 ] こいよ、ベネット
49 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:32:17 ] こいよ、ベネット
50 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:44:55 ] >>42 AW_ACTIVATEは非表示状態から表示させるもので、Restoreさせるものではないから。
51 名前:38 mailto:sage [2008/06/10(火) 01:37:26 ] >>50 なるほど! ということは、Restoreさせた後にウィンドウのアニメーションをさせたい場合は、 独自メッセージを飛ばす必要があるのでしょうか? それともRestoreされたことを通知するメッセージがあるのでしょうか? WM_ACTIVEをキャッチすることも考えたんですが、 Restoreされたときだけを抜き出す方法が思いつかなかったのでアドバイスお願いします。 また、アニメーションさせるとき1度SW_HIDEで非表示にしてAW_ACTIVATEで表示させるという流れでいいのでしょうか
52 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 03:43:33 ] 少しは自分で調べろ
53 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 06:09:59 ] >>47 間違っています。 以上。 はい次の方。
54 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 08:00:26 ] >>53 間違ってないよ 知らないならレスしないでね
55 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 08:03:19 ] Win32APIによるファイルの入出力を実装しています. 入出力自体はできた(と思う)のですが,最後の CloseHandle(hFile); の戻り値を HRESULT result としてデバッガで 追いかけてみると, 正常終了したはずなのに S_FALSE が返ってきます. 下記のサイトのサンプルでも試してみたのですが,同じでした. 同様の問題をご存知の方がいらっしゃいましたら教えて下さい. wisdom.sakura.ne.jp/system/winapi/win32/win113.html
56 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 08:05:40 ] CloseHandleの戻り値の型はBOOL。 0が偽(失敗)で、それ以外の値は真(成功)。 ちなみにS_FALSEの値ははたしか1のはず。
57 名前:55 mailto:sage [2008/06/10(火) 08:40:38 ] >> 56 すみません. 調べてみたらその通りでした. CloseHandle() で F1 押して CBlobCache::CloseHandle の説明を見てました. それにしても, 戻り値の 1, 0, -1 の区別は統一性が無いですね. (自分が知らないだけで良い覚え方とかあるのかな.) 素早い返信ありがとうございました. さすが2ch.
58 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 09:08:46 ] Win32APIは統一性の無さがウリ
59 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 09:58:59 ] HRESULTはCOMまわり
60 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:05:17 ] >>56 それ、せめてMSDNには "戻り値はTRUE, FALSE" って書いてほしい 戻り値がnonzeroとか書かれると、if文で戻り値を判定するときにそういう条件文を書くべきなのか迷う
61 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:13:43 ] いや、最初からC/C++のifその他の判定は0か非0かだろ
62 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:24:00 ] if (Hoge() == TRUE) なんてやってる人のコードは信用できないよな
63 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:40:28 ] BOOLでTRUE/FALSE以外を返す関数の方が信用できない どういう設計なんだよ
64 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:48:10 ] おっとGetMessageの悪口はそこまでだ
65 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:54:53 ] 所詮はDWORDさ。
66 名前:60 mailto:sage [2008/06/10(火) 11:28:06 ] >>62 そういうコードを書きたくないから言ってるんだよ… BOOLを戻すと宣言してあるなら、それ以上の判定は必要ないのはわかるよ。実際書かないし。 nonzero(数値)を戻すなら、せめて "ブール値の真として..." くらい書いてくれないかなってこと CのAPIである以上、数値のnonzeroとブール値の真は同じだからどっちが書いてあっても気にするなってことなのかな
67 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:44:39 ] Cの特徴だしな
68 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:57:25 ] >CのAPIである以上、数値のnonzeroとブール値の真は同じだからどっちが書いてあっても気にするなってことなのかな 間違いだらけだ。
69 名前:60 mailto:sage [2008/06/10(火) 12:13:01 ] >>68 マジか 規格の少なくともifやwhileの項にはブール値なんて存在しないとかそういうこと?
70 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 12:45:31 ] C++ならboolがあるが、C99でないCにブール値なんて概念自体存在してるのか?
71 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 13:00:18 ] >>70 ブール値の概念は存在しているが規格には書かれていない ってところかな
72 名前:デフォルトの名無しさん [2008/06/10(火) 15:45:32 ] 初歩的な質問なのですが、CreateWindowExでボタンを作りました。 そのボタンにアクセラレータ?(SHIFT+'A')をつけたいのですが、 CreateWindowExで作成したボタンにアクセラレータをつけるにはどうすればいいのでしょうか? 環境はVC+SDKです。よろしくお願いします
73 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 15:49:07 ] >>72 CreateAcceleratorTable
74 名前:72 mailto:sage [2008/06/10(火) 17:07:40 ] >>73 レスありがとうございます。 CreateAcceleratorTableで作った場合、 ボタンアクションがありません ><。
75 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:16:00 ] BM_CLICKでも投げとけ
76 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:18:48 ] >>74 まさかとは思うが、「ボタン(A)」(Alt+A)のことじゃないだろうな? こっちはボタンのキャプションを「ボタン(&A)」にすれば勝手に機能するぞ。
77 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:23:27 ] アクセラレータは発動したときにあくまでWM_COMMANDを発行するものであって、 ボタンのクリックをシミュレートするものではない。
78 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:34:29 ] >>66 Win95で適当に試した結果 EnableWindow(hwnd, TRUE) で成功するとTRUEではなく 8 が返ってくる。 EnableWindow(hwnd, 0x10000) は失敗する。(下位16ビットしか見ていないらしい) GetWindowRect(hwnd, &rect) で成功するとTRUEではなく 500 〜 599 が返ってくる。 ShowWindow(hwnd, SW_SHOW) で直前に表示されているとTRUEではなく 16 が返ってくる。 こういう謎な仕様は9x系で終わっていてほしい。 とりあえず上のAPIはNTでは大丈夫っぽいが。
79 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:35:43 ] 76が正解の予感
80 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:37:41 ] TranslateAcceleratorしてないだけだろ
81 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:45:39 ] >>78 APIのリファレンスに、引数はTRUE/FALSEを指定するとある。 zero/nonzeroとは書いてない。 戻り値は、zero/nonzeroと書いてある。 TRUE/FALSEを返すなんて書いてない。 説明は正しい。
82 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:54:05 ] >>81 >>78 は、仕様がおかしいって言いたいんだろ?
83 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:58:44 ] >>81 説明の正しさ、じゃなくてBOOLなのにTRUE/FALSE以外を返すなということ。 GetMessageのように意味があってTRUE/FALSE以外を返すわけでも無さそうだし。
84 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:27:39 ] Win16のときの、1バイトでも節約、て状況のせいなのかもな。 そして互換性のためにうっかり変えられない、と。
85 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:30:17 ] 8や500を返すのが互換性ってのもおかしな話だなぁ
86 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:33:22 ] if(GetOpenFileName(&ofn) == IDOK) { 〜 } とか書いてたら正常動作していたので間違いに気付かなかった事ならある
87 名前:72 mailto:sage [2008/06/10(火) 18:37:18 ] >>75-77 >>79-80 レスありがとうございます >>77 が僕が今詰まってる問題に一番近いっぽいです ><。 アクセラレータは動いてるのですが、ボタンシミュレートが問題です。
88 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:38:51 ] だからSendMessage(hButton,BM_CLICK,0,0)でいいだろうが
89 名前:72 mailto:sage [2008/06/10(火) 18:52:00 ] >>88 おおっ ボタンシミュレートできました >>88 さん、どうもです。感謝ですー ><。
90 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 19:48:36 ] 人の話を聞かない性格の典型的パターンだな
91 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:50:18 ] >>83 実装効率を考えると真の際 TRUE 以外の値を返した方がいい場合もある。 TRUE しか返さない、としてしまうと、その効率のいい実装が取れなくなってしまう。 例えば is 系関数の戻り値を戻り値にしたい場合とか。 is 系関数はメモリ効率のため全ての関数で1つのテーブルを共有し、 ビット演算を使ってそれぞれの関数の戻り値を決めるよう実装されている場合がある。 int isalpha(int letter) { return table[letter] & 1; } int isdigit(int letter) { return table[letter] & 2; } int isalnum(int letter) { return table[letter] & 3; } みたいな感じで。 こういう関数を戻り値に直接指定したい場合とか、0/1 にならないことがある。 そして、果たして BOOL の戻り値を作成する際に使った関数が 全て真偽を 0/1 で返すと確かめることはできるだろうか? もしかしたら急に仕様が変えられるかもしれない。 それを考えて常に isalpha(ch) ? TRUE : FALSE のように書く事はできるかもしれないけど、 無駄も多いし書き忘れるミスを犯す事もあるだろう。 結局、bool 型のように true/false の2値性を保証する型で typedef されていない以上、 BOOL は 0/1 の2値性を保証しない方が安全ということになる。 TRUE や FALSE は真偽値を与える箇所で 条件式を書く事無くダイレクトに真か偽かを指定するために使う物であって、 比較に使う物ではない。 そもそも真偽値をさらに比較するという発想自体が 二度手間の無駄な発想としか言いようが無い。
92 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:53:36 ] C言語なんだから0/1じゃなくて 0/非0で考えろ
93 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:28:41 ] C言語で考えるとむしろ0/1じゃね? 比較とかの評価結果は0/1で返すと決まってるし。 どちらかというと、アセンブラレベルの話だな。 BOOLを0/1へ変換するなら !!value で一応はできるな。 見た目が宜しくないのでお勧めはしないけど。
94 名前:デフォルトの名無しさん [2008/06/11(水) 00:31:39 ] HTMLを解析したいのでIHTMLDocument2を使おうと思っています CComPtr<IHTMLDocument2> aDoc; aDoc.CoCreateinstance(CLSID_HTMLDOCUMENT); aDoc->put_URL(CComBSTR("~ ")); //URLの読み込み(のつもり) aDoc->get_images() この put_URL を使うとブラウザで引数のURLを開いてしまい、また、get_imagesで取得したイメージコレクションのサイズが0になっています。 まず、「ブラウザを開かないでHTMLを解析したい」のと、「get_images で取得できていない」理由がよく解りません。 コマンドラインから使うツールのつもりなのでCUIの方がうれしいのですが、ダイアログかなにかで表示させる必要があるのでしょうか? #イメージとしてはURLを引数で渡すとそのページのIMG src="***" を抽出するプログラムです。
95 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:38:26 ] >>93 条件式は 0/1 を返すが、 if 文や while 文などの中身は 0/非0 で判定するから C で考えるなら 0/非0 だな。
96 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:50:47 ] >比較とかの評価結果は0/1で返すと決まってるし。 処理系依存
97 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:52:54 ] ↑馬鹿
98 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 02:58:43 ] はあぁ?
99 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 03:00:22 ] 妄想は日記の中でしてね。
100 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 08:44:32 ] 馬鹿かお前 Win32なんて基本的に妄想が中心だろ MSDNに載ってないような事をしたければ妄想するしかないし