Win32API質問箱 Build67at TECH
Win32API質問箱 Build67 - 暇つぶし2ch2:デフォルトの名無しさん
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


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くらいちゃんと確認汁

212:デフォルトの名無しさん
08/06/13 21:24:54
>>210
バッファオーバーラン

今時そんなバグを平気で出しちゃうCプログラマは
偉そうにTCHAR型の講釈している場合じゃないよ

213:デフォルトの名無しさん
08/06/13 21:25:28
俺も>>211 が正解な気がする

214:デフォルトの名無しさん
08/06/13 21:31:45
タスクの切り替え(アクティブウィンドウを切り替える)のをエミュレートしたいんですけどどうすればいいですかね?

ある条件を満たしたとき、(タスクバーの)(右)隣のウィンドウに切り替えたいんですけど。

Alt+Tabのキーボードエミュレートだと、直前のやつにしか切り替え不可ですよね・・?
Tabの押す回数をうまく制御すればいいんですかね?
他にもっとスマートな方法ありますか??

あと、上記のような不特定多数のタスクがある状況で動くものと、
特定の(例えばWMPとか、決まったアプリをアクティブにする)をアクティブにするものも知りたいです。
ちなみにC++(VC2008ExpressEdition)です。
ご教授のほどお願いします。

215:デフォルトの名無しさん
08/06/13 21:36:05
>>214
FindWindow
GetWindowThreadProcessId
SetActiveWindow
SetForegroundWindow

216:デフォルトの名無しさん
08/06/13 21:36:28
>>210
80文字分しかないバッファに300文字コピーしたら
バッファオーバーランするに決まってるだろ。

217:デフォルトの名無しさん
08/06/13 22:08:45
(誰が決めたのだろう・・・?)

218:デフォルトの名無しさん
08/06/13 22:09:50


219:デフォルトの名無しさん
08/06/13 22:11:45
そいやXPのPowerToyのAlt+TAB乗っ取りプログラムはWS_EX_TOOLWINDOWとかマスクしてなくてPhotoshopとか起動してるとかなり格好悪いことになるんだよな。

220:デフォルトの名無しさん
08/06/13 22:31:36
>>215
単純明快かつわかりやすい回答、ありがとうございます。

221:デフォルトの名無しさん
08/06/13 22:34:57
どういたしまして

222:デフォルトの名無しさん
08/06/13 22:39:30
>>221
騙りウザイ

223:デフォルトの名無しさん
08/06/13 22:40:53
>>192
>>203
>>209
埋め込んだメディアプレイヤーを透明にするということは難しいということですね。。
別の方向で検討します。
レスありがとうございました。

224:デフォルトの名無しさん
08/06/13 22:45:30
どういたしまして

225:214
08/06/13 22:48:41
すいません、また質問させてください。
>>215でプロセスIDを習得する意味は何でしょうか?

226:デフォルトの名無しさん
08/06/13 22:49:29
習得?

227:デフォルトの名無しさん
08/06/13 22:54:07
取得、です。

228:デフォルトの名無しさん
08/06/13 22:55:29
同じプロセスで動いてるやつを飛ばすとか?

229:デフォルトの名無しさん
08/06/13 23:10:01
>>225
> 例えばWMPとか、決まったアプリをアクティブにする
とあったので、特定のアプリをアクティブにするならプロセスIDから逆引きすればいいよってこと。

230:デフォルトの名無しさん
08/06/13 23:43:22
GDIのPolygon関数は、与えられた引数によっては交差した図形を描くのですが、
どんな引数を与えられても交差しない図形を描くことは出来ないのでしょうか。

231:デフォルトの名無しさん
08/06/13 23:56:05
>>230
交差しない順で自分で頂点を並べればいいだろう。
ちょっと考えれば、順不同で与えられた頂点から、辺が交差しない図形は
一意で求まらないことくらい分かりそうなもんだが。

232:デフォルトの名無しさん
08/06/13 23:56:42
そんなAPIがあることを初めて知った。。。

質問の意味はよくわからんが、細かく制御したいなら自分でやれば。

233:デフォルトの名無しさん
08/06/14 00:10:18
分からないならレスしないでください

234:デフォルトの名無しさん
08/06/14 00:22:14
>>191のやつをVista DWM有効下で動かすとどうなるんだろうと気になった。

235:デフォルトの名無しさん
08/06/14 00:29:56
オーバーレイは使えないが、動画は表示され、ちらつきも無くなって万々歳と予想

236:デフォルトの名無しさん
08/06/14 00:36:56
それってXPで出力をVMR9にしたのと同じような状況じゃねーの?

237:デフォルトの名無しさん
08/06/14 00:46:13
個人的に、レイヤードウィンドウとDWMの違いがハッキリしないんだけど。
レイヤードウィンドウでもWM_PAINTがほとんど飛んでこなくなるし、DirectXベースっぽいし。

思うに、レイヤードウィンドウがDX7だったのに対してDWMがDX9になっただけな気がする。
もちろん色々と変わってるだろうけど(GDIをソフトレンダラ化とか)、DWMでやってる事って
半分ぐらいはWindows2000で既に実現できていたんじゃないのかなぁ。

238:214
08/06/14 01:21:17
あーできません助けてください!

「今アクティブなウィンドウ(アプリ)の、“タスクバーにおける(右)隣”のウィンドウへアクティブを移す」を実現したいのですが、
要はこれって「タスクバーでいうと隣」のウィンドウのハンドルを取得、それを使ってアクティブにすればいいんですよね?

だけど「タスクバーで隣」っていうのをどう条件設定すればよいのかわからず・・・。タスクバーを右に右に推移(+右端だったら左端に動くように)させたいのですが・・。

なんかヒントください!

239:デフォルトの名無しさん
08/06/14 01:25:08
>>238
タスクバーをフックする


そして次のバージョンのWindowsで死亡

240:デフォルトの名無しさん
08/06/14 08:27:48
fprintf等でUTF-8 LF形式で出力したいのですが、どうしてもできません。
どうかご教授おねがいします


FILE* fp;
_tfopen_s( &fp, _T("hoge.txt"), _T("w,ccs=UTF-8"));
fseek(fp, 0, SEEK_SET );
_ftprintf_s( fp, _T("hogehoge"));
_setmode( _fileno( fp ), _O_BINARY );
_ftprintf_s( fp, _T("\n"));
_setmode( _fileno( fp ), _O_TEXT );
_ftprintf_s( fp, _T("あいうえお"));
fclose(fp);

MSDN見る限りではこう作れってかいてあるのですが、どうも_setmodeの挙動がおかしいようで...

241:デフォルトの名無しさん
08/06/14 09:14:00
どうせccs=UTF-8なんてVC++限定なんだから、
自分でメモリ上にUTF-8, LF改行のデータを作って、
ただのバイナリモードで一気に書きこんだらどうかと思う。

というかスレ違い。

242:デフォルトの名無しさん
08/06/14 10:13:39
>>240
_setmode( _fileno( fp ), _O_U8TEXT);

243:デフォルトの名無しさん
08/06/14 10:53:27
リッチエディットの背景に画像を表示したいのですが方法はあるのでしょうか?
ググってみても背景色の変更はあるのですが背景に画像を埋め込む方法は見つかりません。


244:デフォルトの名無しさん
08/06/14 10:57:51
>>243
無理。IEコンポーネントでも使え

245:243
08/06/14 11:01:49
やっぱりそうですか・・・。ありがとうございます。

246:デフォルトの名無しさん
08/06/14 11:24:30
どういたしまして

247:デフォルトの名無しさん
08/06/14 14:21:30
リッチエディットコントロールで右クリックしても
エディットコントロールと違って何も表示されないんだけど
どうすればいいんでしょか


248:デフォルトの名無しさん
08/06/14 14:54:24
>>241

間違えてここに書いちゃいました。
C++相談室で聞いてきます。

>>242
実はこれはいろいろためしてたときのソースがそのまま残ってました。
_setmode( _fileno( fp ), _O_U8TEXT);
もすでに試してたけど、なぜかCRLFになるので、ダメでした。


249:デフォルトの名無しさん
08/06/14 15:10:51
C++相談室もスレ違いだけどな

250:デフォルトの名無しさん
08/06/14 15:20:35
・スレ違いの質問でも丁寧に答えてくれます。
・かまってちゃんの煽りにもきちんとかまってくれます。

をテンプレに追記汁

251:デフォルトの名無しさん
08/06/14 15:45:05
CreateThreadで作成したスレッドがサスペンドになるまで待機するような関数はありませんか。
WaitForInputIdleのスレッド版、のようなモノです。

自前でフラグでも立てて調べ続けるしかないのでしょうか。

252:デフォルトの名無しさん
08/06/14 15:50:57
訳:おしえてほしいな

253:デフォルトの名無しさん
08/06/14 15:55:11
>>251
サスペンドにする設計はよしたほうがいい。
同期オブジェクトを使うべき。



254:デフォルトの名無しさん
08/06/14 16:11:46
自前で Win32API のラッパーライブラリ作って使い回してる人どれくらいいます?
windowsx.h みたいなマクロの集合から本格的なクラスライブラリまで含めて。

255:デフォルトの名無しさん
08/06/14 16:35:10
>>254
自分が使う分はラップしてから使う。


256:デフォルトの名無しさん
08/06/14 16:53:37
そのコードにsetmodeは要らないと思うが。

257:デフォルトの名無しさん
08/06/14 16:58:06
>>254
WTLでいいだろ

258:デフォルトの名無しさん
08/06/14 17:35:31
WTLは糞すぎるんで、
自作の、ATLをラップしたテンプレートクラスライブラリでやってるよ。

259:デフォルトの名無しさん
08/06/14 17:48:36
VCLで間に合ってます

260:デフォルトの名無しさん
08/06/14 18:13:08
>>258
どう糞すぎるの?

261:デフォルトの名無しさん
08/06/14 21:14:18
TCHAR[]な文字列のバイト数はどうやったら求められるのでしょうか

262:デフォルトの名無しさん
08/06/14 21:15:27
あ、lstrlenでいけるっぽいですね。スレ汚しすみません。

263:デフォルトの名無しさん
08/06/14 21:32:21
わかってるかもしれんけど、
「バイト数」は lstrlen(str) * sizeof(TCHAR) じゃないと求まらんよ

264:デフォルトの名無しさん
08/06/14 21:33:36
>>263
おまい、優しいな

265:デフォルトの名無しさん
08/06/14 21:35:55
strlenとlstrlenて何が違うんだ?ずっとstrlen使ってたんだけぢ

266:デフォルトの名無しさん
08/06/14 21:36:19
引数の型が違う

267:デフォルトの名無しさん
08/06/14 21:44:09
やっぱり違いが判らない

lstrlenのLPCTSTRって
strlenのconst char* と同じでしょ?

268:デフォルトの名無しさん
08/06/14 21:45:39
#define UNICODE

269:デフォルトの名無しさん
08/06/14 21:49:57
じゃあ
lstrlen=_tcslenなわけ?

270:デフォルトの名無しさん
08/06/14 21:50:34
>>265
lstrlenはスレ違いじゃないけどstrlenはスレ違い

271:デフォルトの名無しさん
08/06/14 21:54:04
_tcslenもスレ違い

272:デフォルトの名無しさん
08/06/14 21:54:16
>>269
lstrlen (lstrlenA, lstrlenW) は Win32API (ダイナミックリンク)
_tcslen (strlen, wstrlen) は C Runtime (スタティックリンク)
この違い重要な

273:デフォルトの名無しさん
08/06/14 21:56:17
> C Runtime (スタティックリンク)
馬鹿は黙っててね

274:デフォルトの名無しさん
08/06/14 21:58:20
>>272
CRTもダイナミックリンクできるが?

つーか基本的にwsprintfとかlstrlenとかWin16でメモリが厳しくてCRTなんか使ってられるかって時代の遺物なんだから気にするな。使うな。

275:デフォルトの名無しさん
08/06/14 22:06:41
Win32API はスタティックリンクできないが
C Runtime は普通スタティックリンクで使うので間違ってはいない

276:デフォルトの名無しさん
08/06/14 22:09:08
>>275
VC8はダイナミックリンクがデフォ設定になってたなぁ


277:272
08/06/14 22:34:54
>>276
あ、確かにデフォルトで /MD (msvcr80.dll) になってるわ
普段 cl.exe とか nmake.exe とかでやってるから libcmt.lib が当たり前だと思ってた

あと誰もつっこんでくれないけど wstrlen じゃなくて wcslen
また多分 strlen ぐらいならコンパイラがインライン展開してくれると思う

278:デフォルトの名無しさん
08/06/15 00:23:16
msvcrt.dllはKnownDLLsだから、これを使うならCRTもWin32APIみたいな物じゃね
まーそのせいで最近のVC++はmsvcrt.dllが使用できないが

279:デフォルトの名無しさん
08/06/15 01:08:48
リストボックスに横スクロールバーを追加したのですが、項目の文字列の幅を正確に取得出来ないのか全ての文字が表示される所までスクロール出来ません。

GetTextExtentPoint32()は

> デバイスの中には、通常のセル配列に文字を配置しないデバイス(すなわちカーニングを実行するデバイス)もあるため、文字列内の個々の文字のサイズの総計と文字列全体のサイズとが一致しないことがあります。

の解説から等幅しか正しく計算出来ないようですが、プロポーショナルフォントで正しく計算する方法はないのでしょうか。
※これとは別に垂直スクロールバー分のGetSystemMetrics(SM_CXVSCROLL)は足しています。

280:デフォルトの名無しさん
08/06/15 01:18:08
その説明は関係ないだろ
(もし1文字分ずつ別々に測って足してったら正しい結果は出ないよって意味だ)
ちゃんとDCにフォントを選択したか?

281:デフォルトの名無しさん
08/06/15 01:32:32
>>280
誤解を解いてくれてありがとうございます。

> DCにフォントを選択したか
選択したら、未選択の時より短くなってしまいました。

追加したコード

HFONT hFont = CreateFont(-MulDiv(9, GetDeviceCaps(hDC, LOGPIXELSY), 72), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, VARIABLE_PITCH, L"MS UI Gothic");
SelectObject(hDC, hFont);



DeleteObject(hFont);

282:デフォルトの名無しさん
08/06/15 02:50:21
>>281
それはリストボックスと同じフォントか?
というかWM_GETFONTでフォントもらえ

283:デフォルトの名無しさん
08/06/15 11:24:09
>>282
遅レスすみません。
リストボックスのフォント(ダイアログのフォントと同じ)はMS UI Gothic 9ptですが、WM_GETFONTで取得したフォントは何故かArialの12pt(?)になっていました。
更にウィンドウ上の文字もそれに変わって表示が滅茶苦茶に…。
勿論Arialなんて何処にも使用していません。

何処に原因があるのか解らないので一度Win32APIから離れて.NETでGraphicsオブジェクトを作りMeasureString()で幅を取得してHorizontalExtentプロパティに設定したら、こちらは上手くいきました。

結局の所、正しいフォントが選択されていない事が最大の原因でしょうか。
そうだとしたら何故フォントが正しく取得出来ないのでしょうか。

284:デフォルトの名無しさん
08/06/15 13:08:11
>>282
もらえるのはHFONTだが、それがArialだってのはどうやって調べた
(というか調べる必要があった)んだ? DCにハンドル選択するだけなのに。
本当にArialとやらだったら、取得に失敗してシステムフォントが返ってるんだろ。

他のウィンドウのフォントが崩れたのは、
このスレにコード念写できる人はおらんから確かなことは言えんが
おおかたもらったフォントをDeleteObjectでもしたんでないの。

285:デフォルトの名無しさん
08/06/15 13:24:08
> それがArialだってのはどうやって調べた
ウィンドウに表示される文字で判別しました。

> もらったフォントをDeleteObjectでも~
思い切りしていました…。
削除する事でフォントは正常に戻りましたが、やはり文字列の最後までスクロール出来ません。
文字コードは全てワイド文字で処理していますが、これが関係しているのでしょうか。

286:デフォルトの名無しさん
08/06/15 13:48:23
> ウィンドウに表示される文字
それほど信頼できん調べ方はないだろうがw
フォントリンクとかでぐぐっとけよ

287:デフォルトの名無しさん
08/06/15 13:52:08
>>285
あなたにWin32APIは無理です。
諦めて.NETを使いましょう。いい時代になりましたね。

288:デフォルトの名無しさん
08/06/16 01:30:35
>>285
>ウィンドウに表示される文字で判別しました。
フォント名がほしいなら GetTextFace() とか使ってくれ

とりあえず GetTextExtentPoint32() のリファレンス読み直すとか、
DrawText() に DT_CALCRECT 渡すなどの方法で代用するとか

289:デフォルトの名無しさん
08/06/16 07:54:20
Advanced Windows っていい本ですね
高いけど

290:デフォルトの名無しさん
08/06/16 09:13:10
>>288
情報小出しする奴はスルーしとけ

291:デフォルトの名無しさん
08/06/16 12:13:15
テキストエディタ作りたいんですけど、
どうやって日本語入力するんでしょうか?

292:デフォルトの名無しさん
08/06/16 12:17:26
テキストボックスでも貼っとけ

293:デフォルトの名無しさん
08/06/16 12:27:58
日本人なら日本語ぐらい入力できるだろ

294:デフォルトの名無しさん
08/06/16 12:32:31
URLリンク(msdn.microsoft.com)

295:デフォルトの名無しさん
08/06/16 12:40:26
>>292
すごく・・・
完了しました

296:デフォルトの名無しさん
08/06/16 13:15:54
今時Edit貼っただけのテキストエディタなんて需要ゼロだろ

297:デフォルトの名無しさん
08/06/16 14:25:39
コンソールで作るんだろ?

298:デフォルトの名無しさん
08/06/16 14:29:25
SEDやEDLINのx64コンソール対応版か

299:デフォルトの名無しさん
08/06/16 14:56:54
HTREEITEMのハンドルの比較はどのようにやればいいですか?

300:デフォルトの名無しさん
08/06/16 15:12:45
==

301:デフォルトの名無しさん
08/06/16 15:26:44
冗談抜きで==以外にアイテム同一の比較する方法はない

302:デフォルトの名無しさん
08/06/16 15:37:52
>>288
遅レスすみません、DrawText()にDT_CALCRECTを渡す方法で出来ました。

上記方法での取得値 - リストボックスの幅 + 縦スクロールバーの幅

で正確なスクロール幅が算出出来ました。
本当にありがとうございました。

303:デフォルトの名無しさん
08/06/16 16:20:15
一瞬>>300が何のレスか分からないw

304:デフォルトの名無しさん
08/06/16 17:49:15
Cから呼び出したDLL内でEXCEPTION_ACCESS_VIOLATION (0xc0000005)
が発生した場合、それをC側から補足できますでしょうか?
例外が発生したことを上の関数に返したいのですが
難しいでしょうか?

よろしくお願いいたします。

305:デフォルトの名無しさん
08/06/16 17:50:49
VC++なら___try - ___catch(EXCEPTION_EXECUTE_HANDLER)

306:デフォルトの名無しさん
08/06/16 17:51:01
___じゃない、__

307:デフォルトの名無しさん
08/06/16 18:17:43
>>305
ありがとうございます。
スーパー助かりました。

308:デフォルトの名無しさん
08/06/16 19:33:49
コンビニどういたしまして。

309:デフォルトの名無しさん
08/06/16 19:43:32
まさか全く関係ない奴が、どういたしましてなんて言ってないよなw

310:デフォルトの名無しさん
08/06/16 19:51:31
私には心の分身が居るので彼らがどういたしましてを言っています

311:デフォルトの名無しさん
08/06/16 19:54:08
たとえ心が離れていても僕たちはいつもひとつ!

312:デフォルトの名無しさん
08/06/16 20:21:42
それ多重人格じゃね?

313:デフォルトの名無しさん
08/06/16 21:40:53
このスレには人工無脳が搭載されてるのを知らないのか?
「ありがとうございます」に対して自動で「どういたしまして」と返信して回答者の煩わしさを軽減してくれてるんだよ。

ただあまり賢くないから、たまに暴走して意味不明なレスで荒れたり
「なぜこんな設計にするのか理解できない」→「分からないならレスしないでください」
と煽ったりして荒れる原因になって迷惑な一面もある。

314:デフォルトの名無しさん
08/06/16 21:51:45
説明ありがとうございます

315:デフォルトの名無しさん
08/06/16 21:53:25
どういたしまして

316:デフォルトの名無しさん
08/06/16 22:48:13
質問です。

CreateProcessでメモ帳(notepad.exe)を起動する際に、
ユーザーがCtrlキーを押しながら起動しても最前面にメモ帳を表示させたいのですが、
試行錯誤を繰り返していますが上手くいきません。
ご教授お願いいたします。

317:デフォルトの名無しさん
08/06/16 22:49:43
お断りします

318:デフォルトの名無しさん
08/06/16 22:51:32
お断りじゃあ仕方ないよな
あきらめろ

319:デフォルトの名無しさん
08/06/16 23:26:58
AttachThreadInputとかかね?

320:デフォルトの名無しさん
08/06/16 23:30:10
>>243
規制に巻き込まれて遅レスだが
WS_EX_TRANSPARENTスタイルを追加してWM_ERASEBKGNDで背景画像をBitBlt。
ちらつくので親ウィンドウにWS_CLIPCHILDREN追加して
RichEditのカーソル付近の表示がおかしくなるので親ウィンドウのWM_PAINTで
RichEditのUpdateWindow追加でいけると思う。

321:デフォルトの名無しさん
08/06/16 23:56:19
>>291
IME対応を何もしなくても、確定した文字列は最悪WM_CHARで1文字ずつ送られてくる (IME-unaware)。
ANSIモードだとShift_JISの2バイト文字も1バイトずつ送られてくる。

それだとあまりにも不便すぎるから、IMM APIを使って取得する。
確定文字列の取得はWM_IME_COMPOSITIONかつlParam & GCS_RESULTSTRのとき。
詳しくはググれ。あと、再変換対応も忘れるな。

現在はIMMからTSFへ移ろうとしているんだが、
IMMでしか使えない変換エンジンの1つにATOKもあるし、
XPまでだと様々な理由でTSFをオフにしたり、そもそもTSFが入っていなかったりするので、
TSFのみの対応のアプリケーションは非現実的。IMMのみかIMM/TSF両対応にすべき。

322:デフォルトの名無しさん
08/06/17 00:40:38
> ユーザーがCtrlキーを押しながら起動しても

今頃こんな機能があることを知った

ありがとう2ちゃんねらー

323:デフォルトの名無しさん
08/06/17 00:44:18
Ctrlキー押して起動してみたけど
なんもならないぞ

324:デフォルトの名無しさん
08/06/17 01:06:34
>>322
マジだ・・・今まで知らんかった

325:デフォルトの名無しさん
08/06/17 01:13:50
Shiftを押しながらだと・・・


326:デフォルトの名無しさん
08/06/17 01:17:19
shift 最小化して起動
alt  プロパティ

知りませんでした

327:デフォルトの名無しさん
08/06/17 01:25:42
すげぇマジだ。
Windowsのプログラマは只者じゃねーな。

328:デフォルトの名無しさん
08/06/17 04:20:05
スタートメニューやクイック起動からだと
Ctrl+クリック  バックグラウンドで起動 (メモ帳だけ?)
Shift+クリック メニューが勝手に消えない

Shift+クリックなんて知らなかった。これ結構便利だな。

329:デフォルトの名無しさん
08/06/17 10:01:57
> Shift+クリック メニューが勝手に消えない

うおおおお
すげえ、これすげえ
感激した

330:デフォルトの名無しさん
08/06/17 10:03:29
感激したので、これからは
WinMainのnCmdShow引数をまじめに処理しようと思う

331:デフォルトの名無しさん
08/06/17 10:55:21
で、結局Ctrl押しながら起動でZオーダー最前面にする方法は誰も分からんのか、、、

332:デフォルトの名無しさん
08/06/17 11:03:25
便利な機能を殺すのか。
ウィンドウハンドルをどうにか持って来れれば何とかならんか?

333:デフォルトの名無しさん
08/06/17 11:58:07
メモ帳のソースコードが公開されていて改修できるなら可能だと思うが、
それが出来ないならちょっと思いつかないな。

334:デフォルトの名無しさん
08/06/17 12:09:26
notepad.exeを改造すればいいじゃない
その程度のクラック知識も無い人はWin32APIで開発なんてやめた方がいいと思うよ

335:デフォルトの名無しさん
08/06/17 12:10:27
STARTUPINFOに仕込んでてもダメかな…

336:デフォルトの名無しさん
08/06/17 12:15:25
流出はしてたかもしれんなw

337:デフォルトの名無しさん
08/06/17 12:16:32
別に変な事をしなくてもThreadIDから窓を列挙して前面に移動すればいいだけじゃないか

338:デフォルトの名無しさん
08/06/17 12:22:58
実際にやってみれ
多分無理

339:デフォルトの名無しさん
08/06/17 12:27:54
メモ帳限定でいいなら
CreateProcess→WaitForInputIdle→ウィンドウ列挙してプロセスIDから該当のメモ帳を探す
→AttachThreadInputでアクティブプロセスのコンテキストを割り当て→SetForegroundWindow
こうかな?

340:デフォルトの名無しさん
08/06/17 14:18:04
メモ帳をフックすればいいだろ

341:デフォルトの名無しさん
08/06/17 14:31:43
ソレダ!

342:デフォルトの名無しさん
08/06/17 14:34:47
んー
Process32FirstとProcess32Nextを使ってNotePad.exeと親のプロセスIDとを取得。
AttachThreadInputでアタッチして制御をもらって、終わったらデタッチ。

ただ、NotePad.exeのウインドウハンドルはどうやって取得するんだろう。
それが出来ればSetActiveWindowなりSetForegroundWindowを呼べるんだが。

343:デフォルトの名無しさん
08/06/17 14:41:59
CreateProcess したのに、わざわざそうやってプロセスID取得するの?
EnumWindows()とGetWindowThreadProcessId()を組み合わせて探すのが
バージョン依存しなくていいかも。

344:343
08/06/17 14:42:45
下2行はプロセスIDからウィンドウハンドル探す方法ね。

345:デフォルトの名無しさん
08/06/17 16:53:06
バージョン依存ってProcess32FirstがNT4で使えないとかそういう事かね?

346:デフォルトの名無しさん
08/06/17 16:57:07
メモ帳側が変わるかということじゃね

347:デフォルトの名無しさん
08/06/17 19:19:45
変わらねーよw

・タブ対応
・正規表現grep
・構文ハイライト
・ソース折り畳み
ぐらいは対応して欲しいけどな

348:デフォルトの名無しさん
08/06/17 19:33:24
そんな高機能なメモ帳なんてメモ帳じゃないやい・゚・(つД`)・゚・

でも、Vistaのメモ帳ではCtrl+Gで行番号指定移動に対応していたりと
結構侮れなかったりもする。

349:デフォルトの名無しさん
08/06/17 19:36:52
メモ帳はタブ幅を4に変更可能にしてくれればもう何も言うことはない

350:デフォルトの名無しさん
08/06/17 19:45:13
comctl32を設計した馬鹿をひっぱたきたい。

351:デフォルトの名無しさん
08/06/17 19:54:15
メモ帳に関連づけてるファイルがなくて試せない俺は負け組

352:デフォルトの名無しさん
08/06/17 19:57:05
>>350
つうほうしまたし

353:デフォルトの名無しさん
08/06/17 20:18:29
メモ帳というかEditコントロールが貧弱すぎ。
無制限UNDO/REDOやドラッグドロップぐらい標準で対応しろと。
マウス乗せたらボワっと色が変わるようなくだらん機能つけるぐらいなら基本機能を充実させろと。

354:デフォルトの名無しさん
08/06/17 20:22:41
そんなもの標準でつけられても、結局は込み入ったことするには不足で、自前で実装することになるのが目に見えてる。

355:デフォルトの名無しさん
08/06/17 21:31:19
SetWindowHookEx で、WH_MOUSE を指定し、プライマリスレッドへのローカルフックを
設定しているのですが、MOUSEHOOKSTRUCT.dwExtraInfoは常に0になります。
XBUTTONの番号やホイールの回転量が取れなくて困るのですが、これは仕様なんでしょうか。

356:355
08/06/17 21:47:41
すみません。ググったらすぐわかりました。MOUSEHOOKSTRUCTEXを使うべきなんですね。

357:デフォルトの名無しさん
08/06/17 21:54:32
Editコントロールを改良してくれるというなら、TSFに対応してほしかった。
ただ、MS-IMEナチュラルインプットがフェードアウト気味で、どうでもいいと思うようになってきたけど。

358:デフォルトの名無しさん
08/06/17 21:59:44
時代はATOKです

359:デフォルトの名無しさん
08/06/17 22:27:14
SS_BITMAPを指定したスタティックコントロールにStretchBlt()した画像を貼り付ける方法が判りません。

(WM_PAINT以外)
hBmp = (HBITMAP)LoadImage(NULL, L"test.bmp", IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
HDC hDC = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, hBmp);
hBackDC = CreateCompatibleDC(hMemDC);
hBackBmp = CreateCompatibleBitmap(hMemDC, 256, 192);
SelectObject(hBackDC, hBackBmp);
SetStretchBltMode(hBackDC, STRETCH_HALFTONE))
StretchBlt(hBackDC, 0, 0, 256, 192, hMemDC, 0, 0, 640, 480, SRCCOPY);
ReleaseDC(hwnd, hDC);

(WM_PAINT内)
BeginPaint(hwnd, &ps);
SendDlgItemMessage(hwnd, IDC_BITMAP1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBackBmp);
EndPaint(hwnd, &ps);

このようにしてみましたが、スタティックコントロール上には何も表示されません。
何が原因でしょうか。
※便宜上WM_~と書いていますが、実際はメッセージクラッカーを使用しています。

360:デフォルトの名無しさん
08/06/17 22:42:44
WM_PAINT内

361:デフォルトの名無しさん
08/06/17 23:38:47
マインスイーパの(ニコニコマークの)ボタンのようなものを押そうとしているんですが、

HWND hwnd = FindWindow(NULL,TEXT("マインスイーパ"));
POINT pos = {87,27};
int lparam = (pos.y<<16) + pos.x;
PostMessage(hwnd,WM_LBUTTONDOWN,0,lparam);
PostMessage(hwnd,WM_LBUTTONUP,0,lparam);

で押したことにできません。
pos={100,100}とかで下の領域部分は押したことにできます。
調べた感じ、ボタンっぽい部分はハンドルも持ってなさそうなのですが、
どうすれば押せるのでしょうか?

362:デフォルトの名無しさん
08/06/17 23:40:11
>>361
F2を押したことにするんじゃだめなの?

363:デフォルトの名無しさん
08/06/17 23:43:35
>>362
マインスイーパをプログラムで操作したいというよりは、
ハンドルを持っていないボタンを押したいということなんです。

364:362
08/06/17 23:43:36
よく考えたらF2よりメニューのID調べてWM_COMMAND送ったほうが楽かも

365:デフォルトの名無しさん
08/06/17 23:46:23
>>363
SendInput

366:デフォルトの名無しさん
08/06/17 23:54:28
>>365
やっぱりそれしかないんですかね?
PostMessageでなんとかしたかったけど、SendInputでいってみます。
ありがとうございました。

367:デフォルトの名無しさん
08/06/18 00:31:14
「チートのためのSendInput」
という本を書いたら売れますか?

368:デフォルトの名無しさん
08/06/18 02:50:24
チート専門ならWin32APIなんかよりAHKでも薦めるかな

369:デフォルトの名無しさん
08/06/18 13:13:44
すみません、ちょっとお聞きしたいんですが、
CreateFileMappingAの戻り値のHANDLEから
_open_osfhandle()と_fdopen()とで
FILE*を取得することは出来るんでしょうか?
どうもやってみても_open_osfhandle()が-1を返すんですが、
失敗する理由が自分のコーディングミスなのか仕様なのか分からないです。


370:デフォルトの名無しさん
08/06/18 14:27:41
そのハンドルは別のものだから使えないよ

371:デフォルトの名無しさん
08/06/18 17:25:33
>>360
遅レスすみません、漸く解りました。
ありがとうございます。

(WM_PAINT以外)
hBmp = (HBITMAP)LoadImage(NULL, L"test.bmp", IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE);
HDC hDC = GetDC(hwnd);
hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, hBmp);
hBackDC = CreateCompatibleDC(hMemDC);
hBackBmp = CreateCompatibleBitmap(hMemDC, 256, 192);
hPrevBmp = SelectObject(hBackDC, hBackBmp);
SetStretchBltMode(hBackDC, STRETCH_HALFTONE))
StretchBlt(hBackDC, 0, 0, 256, 192, hMemDC, 0, 0, 640, 480, SRCCOPY);
ReleaseDC(hwnd, hDC);

(WM_PAINT内)
BeginPaint(hwnd, &ps);
HBITMAP hTempBmp = (HBITMAP)SelectObject(hBackDC, hPrevBmp);
SendDlgItemMessage(hwnd, IDC_BITMAP1, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBackBmp);
SelectObject(hBackDC, hTempBmp);
EndPaint(hwnd, &ps);

372:デフォルトの名無しさん
08/06/18 17:27:16
>>371
そのソースじゃ何も解っていないようだな

373:デフォルトの名無しさん
08/06/18 17:28:40
WM_PAINTの度にSTM_SETIMAGEを送る必要はない気がするんだけど、自分の勘違いか?

374:デフォルトの名無しさん
08/06/18 17:40:35
てかStretchBlt自体が不要。SS_REALSIZECONTROLでいいじゃん。
それとも、XP未満にも対応する必要でもあるの?

375:デフォルトの名無しさん
08/06/18 20:02:36
戦略からコードの細部にいたるまで間違いだらけだな、感動した。
またクライアント領域の人か?基礎からちゃんと勉強しないと話にならんぞ。

376:デフォルトの名無しさん
08/06/18 20:40:19
今更Win32の基礎を勉強するなんて馬(ry


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch