Win32API質問箱 Build67
at TECH
1:デフォルトの名無しさん
08/06/08 22:20:46
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-10くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(URLリンク(msdn2.microsoft.com))の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- Win32API質問箱 wiki
URLリンク(wiki.livedoor.jp)
Win32API質問箱 Build66
スレリンク(tech板)
2:デフォルトの名無しさん
08/06/08 22:21:25
- MSDN ホームページ
URLリンク(www.microsoft.com)
- MSDN ライブラリ
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
- MSDN2 ライブラリ
URLリンク(msdn2.microsoft.com)
URLリンク(msdn2.microsoft.com)
- MSDN ライブラリ (ローカル版)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
- Windows SDK & Platform SDK
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
3:デフォルトの名無しさん
08/06/08 22:22:16
- Google
URLリンク(www.google.com)
- 猫でもわかるプログラミング
URLリンク(www.kumei.ne.jp)
- Win32 API入門
URLリンク(wisdom.sakura.ne.jp)
- Win32 プログラミング入門
URLリンク(www7.plala.or.jp)
- Advanced Windows (書籍)
URLリンク(www.amazon.co.jp)
-おまけ
Build19が見たい人で余裕のある人は●でも買ってくれ。
4:デフォルトの名無しさん
08/06/08 22:23:57
66 スレリンク(tech板)
65 スレリンク(tech板)
64 スレリンク(tech板)
63 スレリンク(tech板)
62 スレリンク(tech板)
61 スレリンク(tech板)
60 スレリンク(tech板)
59 スレリンク(tech板)
58 スレリンク(tech板)
57 スレリンク(tech板)
56 スレリンク(tech板)
55 スレリンク(tech板)
54 スレリンク(tech板)
53 スレリンク(tech板)
52 スレリンク(tech板)
51 スレリンク(tech板)
50 スレリンク(tech板)
49 スレリンク(tech板)
48 スレリンク(tech板)
47 スレリンク(tech板)
46 スレリンク(tech板)
45 スレリンク(tech板)
44 スレリンク(tech板)
43 スレリンク(tech板)
42 スレリンク(tech板)
5:デフォルトの名無しさん
08/06/08 22:24:32
41 スレリンク(tech板)
40 スレリンク(tech板)
39 スレリンク(tech板)
38 スレリンク(tech板)
37 スレリンク(tech板)
36 スレリンク(tech板)
35 スレリンク(tech板)
34 スレリンク(tech板)
33 スレリンク(tech板)
32 スレリンク(tech板)
31 スレリンク(tech板)
30 スレリンク(tech板)
29 スレリンク(tech板)
28 スレリンク(tech板)
27 スレリンク(tech板)
26 スレリンク(tech板)
25 スレリンク(tech板)
24 スレリンク(tech板)
23 スレリンク(tech板)
22 スレリンク(tech板)
6:デフォルトの名無しさん
08/06/08 22:25:49
21 スレリンク(tech板)
20 スレリンク(tech板)
19 スレリンク(tech板)
18 スレリンク(tech板)
17 スレリンク(tech板)
16 スレリンク(tech板)★
15 スレリンク(tech板)★
14 URLリンク(pc5.2ch.net)
13 URLリンク(pc5.2ch.net)
12 URLリンク(pc5.2ch.net)
11 URLリンク(pc5.2ch.net)
10 URLリンク(pc5.2ch.net)
9 URLリンク(pc5.2ch.net)
8 URLリンク(pc5.2ch.net)
7 URLリンク(pc3.2ch.net)
6 URLリンク(pc3.2ch.net)
5 URLリンク(pc3.2ch.net)
4 URLリンク(pc3.2ch.net)
3 URLリンク(pc.2ch.net)
2 URLリンク(pc.2ch.net)
1 URLリンク(pc.2ch.net)
7:デフォルトの名無しさん
08/06/08 22:30:20
21 スレリンク(tech板)
20 スレリンク(tech板)
19 スレリンク(tech板)
18 スレリンク(tech板)
17 スレリンク(tech板)
16 スレリンク(tech板)★
15 スレリンク(tech板)★
14 URLリンク(pc5.2ch.net)
13 URLリンク(pc5.2ch.net)
12 URLリンク(pc5.2ch.net)
11 URLリンク(pc5.2ch.net)
10 URLリンク(pc5.2ch.net)
9 URLリンク(pc5.2ch.net)
8 URLリンク(pc5.2ch.net)
7 URLリンク(pc3.2ch.net)
6 URLリンク(pc3.2ch.net)
5 URLリンク(pc3.2ch.net)
4 URLリンク(pc3.2ch.net)
3 URLリンク(pc.2ch.net)
2 URLリンク(pc.2ch.net)
1 URLリンク(pc.2ch.net)
8:デフォルトの名無しさん
08/06/08 22:32:10
>>1-7乙
9:前スレ958
08/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
08/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:デフォルトの名無しさん
08/06/08 22:50:52
>>10
スレ違い。邪魔。
12:デフォルトの名無しさん
08/06/08 22:55:09
>>1
おつ
13:デフォルトの名無しさん
08/06/08 23:03:03
英語だらけ
14:デフォルトの名無しさん
08/06/08 23:05:46
>>11
スルーしとけ お前も邪魔
15:デフォルトの名無しさん
08/06/08 23:06:56
>>14
ごめんなさい
16:デフォルトの名無しさん
08/06/08 23:36:20
過去ログの横の★って何?
17:デフォルトの名無しさん
08/06/08 23:46:50
datが行方不明って事では
18:デフォルトの名無しさん
08/06/08 23:47:00
↑「いやー ごめんなさい。」に巻き込まれてログなし
19:デフォルトの名無しさん
08/06/09 00:01:46
>>17-18
d
20:デフォルトの名無しさん
08/06/09 12:45:41
誰もまともに答えてないところにちょっと情けなくも思ったが
>>前スレ904
ファイルをD&Dで渡す動作を再現するならTMPGEncのHWNDを検索で見付け、
HDROPを自前で作ってWM_DROPFILESを投げればいい
HDROPの作り方は検索すれば出てくる
21:デフォルトの名無しさん
08/06/09 12:54:24
訳) やっと私に分かる質問を見つけて、喜び勇んでやってまいりました。
22:デフォルトの名無しさん
08/06/09 13:13:38
訳:かまってほしいな
23:デフォルトの名無しさん
08/06/09 14:47:22
オンラインゲームにキーストロークを送るツールを作ろうと思い、
全スレ>>73 を参考にコードを書いてみたのですが、まったく反応なし。
>>53で非推奨されている
keybd_event(0, MapVirtualKey(DIK_A) ,KEYEVENTF_SCANCODE ,0)
とかやってみたけどダメだった.
JoyToKeyではちゃんと送れているので、方法がない訳じゃないとは思うんだけど...
他のやり方があれば教えてくれ。
24:デフォルトの名無しさん
08/06/09 15:08:30
ま た チ ー ト か
25:デフォルトの名無しさん
08/06/09 15:15:15
全スレw
26:デフォルトの名無しさん
08/06/09 15:33:23
やめときなさい、普通に遊びなさい。
27:デフォルトの名無しさん
08/06/09 15:47:27
能書きはいいからさっさと教えろ
知らないならレスするなカス
28:デフォルトの名無しさん
08/06/09 15:51:47
知ってても誰も教えてくれないよ。ニートちゃん。
29:デフォルトの名無しさん
08/06/09 18:26:08
やり方知ってるよ
当然教えないよ
ゴミ君
30:デフォルトの名無しさん
08/06/09 18:49:18
>>24-29
※すべて同一人物です
31:デフォルトの名無しさん
08/06/09 19:05:17
↑これも俺
32:デフォルトの名無しさん
08/06/09 19:12:22
↑これも私
33:デフォルトの名無しさん
08/06/09 19:22:58
↑これも↓これも僕
34:デフォルトの名無しさん
08/06/09 19:25:42
呼んだ?
35:デフォルトの名無しさん
08/06/09 20:16:50
| ̄``''- 、
| `゙''ー- 、 ________
| ,. -‐ ''´ ̄ ̄`ヽ、_ /
|, - '´ ̄ `ヽ、 /
/ `ヽ、ヽ /
_/ ヽヽ/
/ / / / / / ヽハ
く / /! | 〃 _/__ l| | | | | | | ||ヽ
\l// / | /|'´ ∧ || | |ー、|| | | l | ヽ
/ハ/ | | ヽ/ ヽ | ヽ | || /|ヽ/! |/ | ヽ
/ | ||ヽ { ,r===、 \| _!V |// // .! |
| || |l |ヽ!'´ ̄`゙ , ==ミ、 /イ川 |─┘
| ハ|| || | """ ┌---┐ ` / // |
V !ヽ ト! ヽ、 | ! / //| /
ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | /
┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/
|(/(/(/(/(/(/(/(/(/(/│|| |\ 〃
r'´ ̄ヽ. | | ト / \
/  ̄`ア | | | ⌒/ 入
〉  ̄二) 呼んでないが | | | / // ヽ
〈! ,. -' | | ヽ∠-----', '´ ',
| \| | .お前の態度が | |<二Z二 ̄ / ',
| | | _r'---| [ ``ヽ、 ',
| | | 気に入らない >-、__ [ ヽ !
\.| l. ヽ、 [ ヽ |
ヽ| \ r' ヽ、 |
36:デフォルトの名無しさん
08/06/09 20:47:57
ウィンドウのメニューの背景色を変えたいのですが、
どうすれば出来ますか?
37:デフォルトの名無しさん
08/06/09 22:06:58
オーナードロー
38:デフォルトの名無しさん
08/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
08/06/09 22:19:08
ウィンドウを最小化時と元に戻すときにアニメーションさせようと
上記のように元に戻すときのアニメーション書いたんですがうまくいきません。
原因が分かる方教えてください
40:デフォルトの名無しさん
08/06/09 22:40:42
オードーナロー
41:デフォルトの名無しさん
08/06/09 22:48:43
>>39
うまくいかない、じゃなくて具体的な現象を書けよ。
原因究明の重要な情報なんだからさ。
42:38
08/06/09 22:59:19
>>41
説明足がたらず、すみません。
最小化時はウィンドウのアニメーションが実行されるんですが、
元に戻すときにAnimateWindowが失敗してアニメーションが実行されないんです。
GetLastErrorでエラーをチェックすると正常終了のIDがセットされているので原因がよく分からないのです。
ちなみにCONSOLEMSGはOutputDebugStringのマクロです。
43:デフォルトの名無しさん
08/06/09 23:00:57
LVS_REPORTなリストビューで、カラムの文字列の左右のマージンを知りたいのですが、
どのように計算すればいいのでしょうか?
44:デフォルトの名無しさん
08/06/09 23:12:39
>>43
以下の関数を使う。
int ListView_GetColumnMargin(HWND hwnd) { return 4; }
ListView_GetColumnMargin はおおよそのマージンを返します。
45:デフォルトの名無しさん
08/06/09 23:45:33
>>44
これはひどい
46:デフォルトの名無しさん
08/06/09 23:49:56
ワロタ
47:44
08/06/10 00:18:38
すまん間違えた。
int ListView_GetColumnMargin(HWND hwnd) { return 6; }
>>45-46
一応マジレスなんだが。
正確には GetSystemMetrics(SM_CXEDGE) * 3 らしいが。
48:デフォルトの名無しさん
08/06/10 00:26:55
こいよ、ベネット
49:デフォルトの名無しさん
08/06/10 00:32:17
こいよ、ベネット
50:デフォルトの名無しさん
08/06/10 00:44:55
>>42
AW_ACTIVATEは非表示状態から表示させるもので、Restoreさせるものではないから。
51:38
08/06/10 01:37:26
>>50
なるほど!
ということは、Restoreさせた後にウィンドウのアニメーションをさせたい場合は、
独自メッセージを飛ばす必要があるのでしょうか?
それともRestoreされたことを通知するメッセージがあるのでしょうか?
WM_ACTIVEをキャッチすることも考えたんですが、
Restoreされたときだけを抜き出す方法が思いつかなかったのでアドバイスお願いします。
また、アニメーションさせるとき1度SW_HIDEで非表示にしてAW_ACTIVATEで表示させるという流れでいいのでしょうか
52:デフォルトの名無しさん
08/06/10 03:43:33
少しは自分で調べろ
53:デフォルトの名無しさん
08/06/10 06:09:59
>>47
間違っています。
以上。
はい次の方。
54:デフォルトの名無しさん
08/06/10 08:00:26
>>53
間違ってないよ
知らないならレスしないでね
55:デフォルトの名無しさん
08/06/10 08:03:19
Win32APIによるファイルの入出力を実装しています.
入出力自体はできた(と思う)のですが,最後の
CloseHandle(hFile); の戻り値を HRESULT result としてデバッガで
追いかけてみると, 正常終了したはずなのに S_FALSE が返ってきます.
下記のサイトのサンプルでも試してみたのですが,同じでした.
同様の問題をご存知の方がいらっしゃいましたら教えて下さい.
URLリンク(wisdom.sakura.ne.jp)
56:デフォルトの名無しさん
08/06/10 08:05:40
CloseHandleの戻り値の型はBOOL。
0が偽(失敗)で、それ以外の値は真(成功)。
ちなみにS_FALSEの値ははたしか1のはず。
57:55
08/06/10 08:40:38
>> 56
すみません.
調べてみたらその通りでした.
CloseHandle() で F1 押して
CBlobCache::CloseHandle
の説明を見てました.
それにしても, 戻り値の 1, 0, -1
の区別は統一性が無いですね.
(自分が知らないだけで良い覚え方とかあるのかな.)
素早い返信ありがとうございました.
さすが2ch.
58:デフォルトの名無しさん
08/06/10 09:08:46
Win32APIは統一性の無さがウリ
59:デフォルトの名無しさん
08/06/10 09:58:59
HRESULTはCOMまわり
60:デフォルトの名無しさん
08/06/10 10:05:17
>>56
それ、せめてMSDNには "戻り値はTRUE, FALSE" って書いてほしい
戻り値がnonzeroとか書かれると、if文で戻り値を判定するときにそういう条件文を書くべきなのか迷う
61:デフォルトの名無しさん
08/06/10 10:13:43
いや、最初からC/C++のifその他の判定は0か非0かだろ
62:デフォルトの名無しさん
08/06/10 10:24:00
if (Hoge() == TRUE)
なんてやってる人のコードは信用できないよな
63:デフォルトの名無しさん
08/06/10 10:40:28
BOOLでTRUE/FALSE以外を返す関数の方が信用できない
どういう設計なんだよ
64:デフォルトの名無しさん
08/06/10 10:48:10
おっとGetMessageの悪口はそこまでだ
65:デフォルトの名無しさん
08/06/10 10:54:53
所詮はDWORDさ。
66:60
08/06/10 11:28:06
>>62
そういうコードを書きたくないから言ってるんだよ…
BOOLを戻すと宣言してあるなら、それ以上の判定は必要ないのはわかるよ。実際書かないし。
nonzero(数値)を戻すなら、せめて "ブール値の真として..." くらい書いてくれないかなってこと
CのAPIである以上、数値のnonzeroとブール値の真は同じだからどっちが書いてあっても気にするなってことなのかな
67:デフォルトの名無しさん
08/06/10 11:44:39
Cの特徴だしな
68:デフォルトの名無しさん
08/06/10 11:57:25
>CのAPIである以上、数値のnonzeroとブール値の真は同じだからどっちが書いてあっても気にするなってことなのかな
間違いだらけだ。
69:60
08/06/10 12:13:01
>>68
マジか
規格の少なくともifやwhileの項にはブール値なんて存在しないとかそういうこと?
70:デフォルトの名無しさん
08/06/10 12:45:31
C++ならboolがあるが、C99でないCにブール値なんて概念自体存在してるのか?
71:デフォルトの名無しさん
08/06/10 13:00:18
>>70
ブール値の概念は存在しているが規格には書かれていない ってところかな
72:デフォルトの名無しさん
08/06/10 15:45:32
初歩的な質問なのですが、CreateWindowExでボタンを作りました。
そのボタンにアクセラレータ?(SHIFT+'A')をつけたいのですが、
CreateWindowExで作成したボタンにアクセラレータをつけるにはどうすればいいのでしょうか?
環境はVC+SDKです。よろしくお願いします
73:デフォルトの名無しさん
08/06/10 15:49:07
>>72
CreateAcceleratorTable
74:72
08/06/10 17:07:40
>>73
レスありがとうございます。
CreateAcceleratorTableで作った場合、
ボタンアクションがありません ><。
75:デフォルトの名無しさん
08/06/10 17:16:00
BM_CLICKでも投げとけ
76:デフォルトの名無しさん
08/06/10 17:18:48
>>74
まさかとは思うが、「ボタン(A)」(Alt+A)のことじゃないだろうな?
こっちはボタンのキャプションを「ボタン(&A)」にすれば勝手に機能するぞ。
77:デフォルトの名無しさん
08/06/10 17:23:27
アクセラレータは発動したときにあくまでWM_COMMANDを発行するものであって、
ボタンのクリックをシミュレートするものではない。
78:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/10 17:35:43
76が正解の予感
80:デフォルトの名無しさん
08/06/10 17:37:41
TranslateAcceleratorしてないだけだろ
81:デフォルトの名無しさん
08/06/10 17:45:39
>>78
APIのリファレンスに、引数はTRUE/FALSEを指定するとある。
zero/nonzeroとは書いてない。
戻り値は、zero/nonzeroと書いてある。
TRUE/FALSEを返すなんて書いてない。
説明は正しい。
82:デフォルトの名無しさん
08/06/10 17:54:05
>>81
>>78は、仕様がおかしいって言いたいんだろ?
83:デフォルトの名無しさん
08/06/10 17:58:44
>>81
説明の正しさ、じゃなくてBOOLなのにTRUE/FALSE以外を返すなということ。
GetMessageのように意味があってTRUE/FALSE以外を返すわけでも無さそうだし。
84:デフォルトの名無しさん
08/06/10 18:27:39
Win16のときの、1バイトでも節約、て状況のせいなのかもな。
そして互換性のためにうっかり変えられない、と。
85:デフォルトの名無しさん
08/06/10 18:30:17
8や500を返すのが互換性ってのもおかしな話だなぁ
86:デフォルトの名無しさん
08/06/10 18:33:22
if(GetOpenFileName(&ofn) == IDOK) { 〜 } とか書いてたら正常動作していたので間違いに気付かなかった事ならある
87:72
08/06/10 18:37:18
>>75-77 >>79-80
レスありがとうございます
>>77 が僕が今詰まってる問題に一番近いっぽいです ><。
アクセラレータは動いてるのですが、ボタンシミュレートが問題です。
88:デフォルトの名無しさん
08/06/10 18:38:51
だからSendMessage(hButton,BM_CLICK,0,0)でいいだろうが
89:72
08/06/10 18:52:00
>>88
おおっ
ボタンシミュレートできました
>>88さん、どうもです。感謝ですー ><。
90:デフォルトの名無しさん
08/06/10 19:48:36
人の話を聞かない性格の典型的パターンだな
91:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/10 23:53:36
C言語なんだから0/1じゃなくて
0/非0で考えろ
93:デフォルトの名無しさん
08/06/11 00:28:41
C言語で考えるとむしろ0/1じゃね?
比較とかの評価結果は0/1で返すと決まってるし。
どちらかというと、アセンブラレベルの話だな。
BOOLを0/1へ変換するなら !!value で一応はできるな。
見た目が宜しくないのでお勧めはしないけど。
94:デフォルトの名無しさん
08/06/11 00:31:39
HTMLを解析したいのでIHTMLDocument2を使おうと思っています
CComPtr<IHTMLDocument2> aDoc;
aDoc.CoCreateinstance(CLSID_HTMLDOCUMENT);
aDoc->put_URL(CComBSTR("URLリンク(~)")); //URLの読み込み(のつもり)
aDoc->get_images()
この put_URL を使うとブラウザで引数のURLを開いてしまい、また、get_imagesで取得したイメージコレクションのサイズが0になっています。
まず、「ブラウザを開かないでHTMLを解析したい」のと、「get_images で取得できていない」理由がよく解りません。
コマンドラインから使うツールのつもりなのでCUIの方がうれしいのですが、ダイアログかなにかで表示させる必要があるのでしょうか?
#イメージとしてはURLを引数で渡すとそのページのIMG src="***" を抽出するプログラムです。
95:デフォルトの名無しさん
08/06/11 00:38:26
>>93
条件式は 0/1 を返すが、
if 文や while 文などの中身は 0/非0 で判定するから
C で考えるなら 0/非0 だな。
96:デフォルトの名無しさん
08/06/11 00:50:47
>比較とかの評価結果は0/1で返すと決まってるし。
処理系依存
97:デフォルトの名無しさん
08/06/11 00:52:54
↑馬鹿
98:デフォルトの名無しさん
08/06/11 02:58:43
はあぁ?
99:デフォルトの名無しさん
08/06/11 03:00:22
妄想は日記の中でしてね。
100:デフォルトの名無しさん
08/06/11 08:44:32
馬鹿かお前
Win32なんて基本的に妄想が中心だろ
MSDNに載ってないような事をしたければ妄想するしかないし
101:デフォルトの名無しさん
08/06/11 08:45:32
↑馬鹿
102:デフォルトの名無しさん
08/06/11 09:56:18
↑阿呆
103:デフォルトの名無しさん
08/06/11 10:03:46
↑馬鹿
104:デフォルトの名無しさん
08/06/11 10:07:05
↑阿呆
105:デフォルトの名無しさん
08/06/11 10:08:20
↑馬鹿
106:デフォルトの名無しさん
08/06/11 10:08:55
↑ば、馬鹿じゃないのっ
107:デフォルトの名無しさん
08/06/11 10:10:01
↑阿呆
108:デフォルトの名無しさん
08/06/11 10:21:25
↑あ、阿呆じゃないのっ
109:デフォルトの名無しさん
08/06/11 10:25:26
↑馬鹿
110:デフォルトの名無しさん
08/06/11 10:26:12
↑ば、馬鹿じゃないのっ
111:デフォルトの名無しさん
08/06/11 10:33:12
訳:かまってほしいな
112:デフォルトの名無しさん
08/06/11 10:36:37
かまってほしくない人はレスしないでください
113:デフォルトの名無しさん
08/06/11 10:39:16
>>94
IHTMLDocument2 を使うことが絶対条件なの?
114:デフォルトの名無しさん
08/06/11 12:32:55
必要条件
115:デフォルトの名無しさん
08/06/11 12:36:22
BOOLを返すAP(Iは必ず
bool Successed = Hoge(...) != 0;
としてる。
116:デフォルトの名無しさん
08/06/11 12:40:17
だから?
117:60
08/06/11 12:57:43
ちょっとした愚痴のつもりだったんだが…
いまさらMSDN書き替えられても困るし
で、結局>>68の指摘してる間違いってなんなんだ?
すごく気になるんだけど
118:デフォルトの名無しさん
08/06/11 13:06:50
単なるかまって厨でFA
119:デフォルトの名無しさん
08/06/11 13:13:40
URLリンク(www.open-std.org)
120:デフォルトの名無しさん
08/06/11 14:21:09
>>68の指摘は分からんが、CのAPIではないなw
API自体は言語関係ないからね。
そう考えると、Cの文法や流儀を元に議論するのはナンセンスかもしれん。
121:デフォルトの名無しさん
08/06/11 14:31:32
馬鹿だなあ
文字列がナルターミネートな時点でC前提だろ
122:デフォルトの名無しさん
08/06/11 14:35:03
↑馬鹿
123:デフォルトの名無しさん
08/06/11 14:54:48
↑阿呆
124:デフォルトの名無しさん
08/06/11 14:58:36
呼び出し規約そのものは、cdeclとpascalの中間だけど
まあC用だな、他の言語はそれにあわせてるだけ。
125:デフォルトの名無しさん
08/06/11 15:05:18
そもそもwin32API自体がCで書かれているのだからC前提で当然
そんな事もわからない素人が増えちゃったんだね・・・
126:デフォルトの名無しさん
08/06/11 15:17:41
↑馬鹿
127:デフォルトの名無しさん
08/06/11 15:19:19
↑阿呆
128:デフォルトの名無しさん
08/06/11 15:20:51
↑馬鹿
129:デフォルトの名無しさん
08/06/11 15:21:36
馬鹿も阿呆も漏れだけでいい
130:デフォルトの名無しさん
08/06/11 15:29:14
↓馬鹿
131:デフォルトの名無しさん
08/06/11 15:29:52
え?おれも?
132:デフォルトの名無しさん
08/06/11 15:41:59
まとめ:かまってほしいな
133:デフォルトの名無しさん
08/06/11 15:53:55
(・ω・` )ヾ(・ω・* )ネェネェ カマッテヨ
134:デフォルトの名無しさん
08/06/11 16:34:53
「↑馬鹿」と「↑阿呆」はそれぞれ同一人物による書き込み
つまり荒らしは2名
135:デフォルトの名無しさん
08/06/11 16:51:30
↑はずれ
136:デフォルトの名無しさん
08/06/11 17:02:54
1人だったのか
137:デフォルトの名無しさん
08/06/11 17:06:37
↑はずれ
138:デフォルトの名無しさん
08/06/11 17:15:14
答え:多重人格(一人)
139:デフォルトの名無しさん
08/06/11 17:23:45
↑はずれ
140:デフォルトの名無しさん
08/06/11 17:43:15
現在の稼動状況
人格1: >>135
人格2: >>137
人格3: >>139
人格4〜16: Idle
最大16人格まで拡張可能
それぞれの人格は並列動作
(例えば人格1から人格2〜16のレスを見ても同一人物であるという認識は本人には無い)
記憶装置(脳)は16人格で共有されるため、正常な人間に比べて人格それぞれの知識は16分の1
141:デフォルトの名無しさん
08/06/11 17:54:06
>>140みたいな事を平気で書き込めちゃう奴って本気で近づきたくない
142:デフォルトの名無しさん
08/06/11 17:57:37
↑馬鹿
143:デフォルトの名無しさん
08/06/11 18:01:29
↑阿呆
144:デフォルトの名無しさん
08/06/11 18:06:05
ビリーミリガンよりは少ないな
145:デフォルトの名無しさん
08/06/11 18:20:27
かまってほしいな
146:デフォルトの名無しさん
08/06/11 18:43:19
(・ω・` )ヾ(・ω・* )ネェネェ カマッテヨ
147:94
08/06/11 18:45:28
>>113
> >>94
> IHTMLDocument2 を使うことが絶対条件なの?
いえ、HTMLの解析が簡単にできればIHTMLDocument2でなくても問題ないです。
MSDNの中を探してたらそれらしいメソッドがIHTMLDocument2に見つかったので使っている所です。
ブラウザを開かないのはIHTMLDocument4::CreateDocumentFromURLを使えばいいのかなぁ
148:デフォルトの名無しさん
08/06/12 00:36:01
>>147
もし、htmlソースが文字列として得られるのなら、
・空のドキュメントにhtmlをwriteしてDOMを作ったことはあるなあ。
・普通に文字列処理で何とかするのも手。
・TidyとかでXHTMLにしてXMLパーサに読ませるとか。
URLがあるんなら、そういう時のためのいいやり方が別にあるような気はするけど。
あと、こっちのスレの方が詳しいかもしれない。
IEコンポーネントを使い倒すスレ Ver.2
スレリンク(tech板)
149:デフォルトの名無しさん
08/06/12 02:24:06
>>147
用途が分からないから判断が難しいけど、
IHTMLDocument2だとブラウザは開くねぇ。隠したとしても音が残る。
XMLパーサーだと規約に沿ってないとエラーになる。
簡単なのはWinInetを使って、正規表現を使って解析することかなぁ。
150:デフォルトの名無しさん
08/06/12 03:14:42
>>149
APIフックして音を消せば?ってのがこのスレ的な回答かな
151:デフォルトの名無しさん
08/06/12 07:03:47
全角半角キーをスイッチのように使いたいのですが
押しても全角モードに切り替わらない良い方法はありませんか
152:デフォルトの名無しさん
08/06/12 12:21:13
フック
153:デフォルトの名無しさん
08/06/12 14:41:05
>>152
詳しく
154:デフォルトの名無しさん
08/06/12 14:53:39
クック
155:デフォルトの名無しさん
08/06/12 15:06:35
ドゥ
156:デフォルトの名無しさん
08/06/12 15:16:20
訳:かまってほしいな
157:デフォルトの名無しさん
08/06/12 15:20:03
訳:ググレ
158:デフォルトの名無しさん
08/06/12 15:33:13
いちごみるくうめぇ
159:デフォルトの名無しさん
08/06/12 15:45:14
ヾ(@⌒¬⌒@)ノ ウマヒィ
160:デフォルトの名無しさん
08/06/12 16:49:07
社会から自分が必要とされていないのではないかと思っているから荒らす
少しでも反応があれば自分は必要とされているんだと勝手に勘違いして納得する
それがかまってちゃん
こうして俺たちがかまってあげているうちは街中で無差別殺人なんてしないだろうから
人助けの一つだと考えて適当に相手してあげておいた方がいいかもな
161:デフォルトの名無しさん
08/06/12 16:54:19
>>160
こうですか!わかりません><
162:デフォルトの名無しさん
08/06/12 16:55:35
探すのが面倒だから荒らすんですね(>ω<
163:デフォルトの名無しさん
08/06/12 18:52:04
フックについてググってもvbやらdelphiやらc++やらapiやら混在してる割に
ヒット数が意外と少ないんですがとりあえず
SetWindowsHookEx WH_KEYBOARD WM_INITDIALOG
あたりを使う方法でいいのでしょうか?
164:デフォルトの名無しさん
08/06/12 18:53:22
最後は関係ない希ガス
165:デフォルトの名無しさん
08/06/12 19:20:16
>>164
どうもです。そのものずばりの情報はなかなか見つかりませんね。
範囲があまりにも広いのですが絞るとほとんどhitせず・・・もう少し調べてみます
166:デフォルトの名無しさん
08/06/12 21:02:18
動的に追加したリストボックスをDestroyWindow()する時に予めLB_RESETCONTENTする必要はありますか?
167:デフォルトの名無しさん
08/06/12 21:14:24
>>166
deleteする時に予めデストラクタを呼んでおく必要はありますか?
って聞いてるようなモンだぞ
168:デフォルトの名無しさん
08/06/12 21:26:55
>>167
DestroyWindow()するだけで良いのですね。
ありがとうございました。
169:デフォルトの名無しさん
08/06/12 21:52:18
スレ違いのような気もするけど、気にせず教えてください。
kbdacc とか 秀Caps のようなキーリピートの高速化ってどうやって実現してるんでしょうか?
SystemParametersInfo で設定できる値よりずっと速くできるようですが。
170:デフォルトの名無しさん
08/06/12 22:15:27
>>165
自プロセスへのフックは簡単だと思うけど‥‥他プロセスやグローバルフックになると共有メモリとかの処理が必要になってくるけど
171:デフォルトの名無しさん
08/06/12 22:17:16
>>169
気にせず教えてください…?頭わいてんのか?
172:デフォルトの名無しさん
08/06/12 22:29:33
お忙しい中すみませんが、気にせず教えてください。
173:デフォルトの名無しさん
08/06/12 22:33:16
教えを乞う言葉じゃない気がしますが、気にせず教えてください。
174:デフォルトの名無しさん
08/06/12 22:54:35
>>169
ずっと速くできるようですが気にせず設定してください
175:デフォルトの名無しさん
08/06/12 23:12:31
流れがおかしいようですが気にせず質問してください
176:デフォルトの名無しさん
08/06/12 23:15:39
ツールバーの表示位置を変えたいのですが、どのようにすればいいですか?
177:デフォルトの名無しさん
08/06/12 23:21:10
movewindow
178:デフォルトの名無しさん
08/06/13 00:14:46
>>177
レスありがとうございます。
後一つわからないことがありまして、
ツールバーの高さを変えるにはどうすればいいですか?
179:デフォルトの名無しさん
08/06/13 00:15:13
>>177
APIの大文字小文字は区別されます。嘘を書くのをやめましょう。
180:デフォルトの名無しさん
08/06/13 00:16:35
>>178
ボタンを大きくする
181:デフォルトの名無しさん
08/06/13 00:28:58
>>180
ありがとうございます。
御礼に私の集めた女子高生画像10枚ほどぅpしようと思うのですが
182:デフォルトの名無しさん
08/06/13 00:33:42
>>181
早く汁
URLリンク(www.uploda.org)
183:デフォルトの名無しさん
08/06/13 01:00:03
>>181-182
偽者&自作自演乙
184:デフォルトの名無しさん
08/06/13 01:10:32
↑はずれ
185:デフォルトの名無しさん
08/06/13 01:13:02
URLリンク(mbup.net)
URLリンク(mbup.net)
こんな感じのでよいでしょうか?
186:デフォルトの名無しさん
08/06/13 01:36:20
訳:かまってほしいな
187:デフォルトの名無しさん
08/06/13 02:35:45
>>186
かまってほしいです。
実のところMoveWindowでツールバーの移動が出来ませんでした。
188:デフォルトの名無しさん
08/06/13 02:55:07
自プロセスのUIスレッドのIDを取得したいのですが、方法はありますかね?
189:デフォルトの名無しさん
08/06/13 03:12:29
>>188
ググッたらその辺のサンプルは、見つかると思うよ
190:デフォルトの名無しさん
08/06/13 05:09:14
ツールバー移動出来ない……
クローズボタンなんかだと移動出来てるぽいから出来ると思うのですが…
191:デフォルトの名無しさん
08/06/13 10:24:01
Windows Media Playerの埋め込みについて質問させてください。
親ウィンドウ(レイヤードウィンドウ)にメディアプレイヤーを埋め込んでいるのですが、
WS_EX_Layeredで親ウィンドウを生成し、SetLayeredWindowAttributesで透明度を設定すると、
メディアプレイヤーの動画部分が黒く表示されます(再生はされているみたいです)
親ウィンドウを動かしてみると、一瞬だけ動画が表示され、動かすのをやめるとまた消えてしまいます。
これはどういった原因があるでしょうか。
親ウィンドウをレイヤードウィンドウにしなかった場合は、そのまま表示されます。
192:デフォルトの名無しさん
08/06/13 11:24:59
WS_CLIPCHILDRENとかその辺?
193:デフォルトの名無しさん
08/06/13 11:28:43
タブのグレイ表示ってできないんですか?
194:デフォルトの名無しさん
08/06/13 13:57:22
>>190
>>190
>>190
>>190
>>190
>>190
>>190
195:デフォルトの名無しさん
08/06/13 14:12:25
聞きたいのは、何故ツールバーをMoveWindowで移動出来ないのか
です。
196:デフォルトの名無しさん
08/06/13 15:19:53
最近、いろいろなサイトでTEXT("aaa");見たいなの見かけますが
文字型charには代入できなくなったのですか?新しい型?
197:デフォルトの名無しさん
08/06/13 15:21:14
意味不明
198:デフォルトの名無しさん
08/06/13 15:27:26
TEXT("aaa")とか_T("aaa")は、ユニコード対応だったけか?
ググれば、その辺はすぐ見つかるよー
199:デフォルトの名無しさん
08/06/13 15:28:16
最近のVC++はデフォがUnicode版API使うようにマクロ定義さてるんじゃなかったっけ?
2003で止まってるから知らんが。
200:デフォルトの名無しさん
08/06/13 15:39:25
WM_KEYUPでwParamと数値を比較すると警告メッセージがでるのですが
wParamをintでキャストするような方法でいいのでしょうか
201:デフォルトの名無しさん
08/06/13 15:40:25
おk
202:デフォルトの名無しさん
08/06/13 15:41:20
>>201
秒殺レスさんくす
203:デフォルトの名無しさん
08/06/13 16:05:45
>>191
WMPが動画をオーバーレイで表示してるなら、不思議な挙動ではないな。
ビデオオーバーレイは画面上のビデオ表示領域にあるピクセルが特定の色だった場合に、そのピクセルに動画を表示する。
よって半透明にした結果、そのピクセルの色が変わってしまえば動画が表示されなくてもおかしくはない
204:デフォルトの名無しさん
08/06/13 16:20:56
なかなか深い読みだな
205:デフォルトの名無しさん
08/06/13 16:27:34
>>203
アプリの背景色をその色にすると面白い事になるよね
206:デフォルトの名無しさん
08/06/13 16:32:23
自己解決しちゃったぜ!!?
気分がいいので
今から写メを20枚ぅpしてやんよ!!!
207:デフォルトの名無しさん
08/06/13 16:50:01
URLリンク(mbup.net)
URLリンク(mbup.net)
URLリンク(mbup.net)
URLリンク(mbup.net)
URLリンク(mbup.net)
208:デフォルトの名無しさん
08/06/13 16:54:40
基地外が沸いてるな
209:デフォルトの名無しさん
08/06/13 17:53:16
>>191
WMPでオーバーレイを使わない設定にすれば見えなくなることはなくなるけど、透けないしちらつくんだよな。
210:デフォルトの名無しさん
08/06/13 20:52:48
ツールチップをCreateWindowEx()してTOOLINFO構造体のlpszTextにLPSTR_TEXTCALLBACKを指定した後、
case WM_NOTIFY:
switch (((LPNMHDR)lp)->code)
{
case TTN_NEEDTEXT:
LPTOOLTIPTEXT ptt = (LPTOOLTIPTEXT)lp;
lstrcpy(ptt->lpszText, 表示するテキスト);
break;
default:
return FALSE;
}
とすると、数十字程度の場合は正常に動作しますが、300文字等文字数を増やすとデバッグ実行時でもエラーが出ずに突然落ちてしまいます。
原因は何でしょうか。
因みにTTM_UPDATETIPTEXTでは正常に動作しました。
>>196
所謂TCHAR型だから、プロパティでマルチバイトを選択すればchar、Unicodeを選べばwchar_tとコンパイラは解釈する。
211:デフォルトの名無しさん
08/06/13 21:18:19
TTN_NEEDTEXT 通知メッセージを処理する場合は、表示する文字列を次のいずれかの方法で指定します。
szText メンバで指定したバッファにテキストをコピーする。
テキストが入っているバッファのアドレスを lpszText メンバにコピーする。
文字列リソースの識別子を lpszText メンバにコピーし、そのリソースが入っているインスタンスのハンドルを hinst メンバにコピーする。
MSDNくらいちゃんと確認汁
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5234日前に更新/81 KB
担当:undef