Win32API質問箱 Build58

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
1 名前:デフォルトの名無しさん[age] 投稿日:2007/09/08(土) 21:41:22
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2デフォルトの名無しさん:2007/10/08(月) 03:25:02
3デフォルトの名無しさん:2007/10/08(月) 03:25:13
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/
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
4デフォルトの名無しさん:2007/10/08(月) 03:25:26
    ∩___∩
   | ノ      ヽ/⌒)  あばばばばばばばばばば
  /⌒) (゚)   (゚) | .|
 / /   ( _●_)  ミ/   ∩―−、
.(  ヽ  |∪|  /    / (゚) 、_ `ヽ
 \    ヽノ /      /  ( ●  (゚) |つ      おちんちんびろ〜〜〜ん
  /      /      |  (入__,,ノ   ミ       あばあばばばば
 |       /       、 (_/    ノ
 |  /\ \       \___ ノ゙ ─――、
 | /    )  )       /\       _  ヽ
 ∪    (  \    (⌒0 /\     ヽ (_ノ
       \,,_)    `ヽノ   /  、   )O
                    (  </ /
                     > ( 〈
                    (,,__(,,_ノ
5デフォルトの名無しさん:2007/10/08(月) 03:25:56
6デフォルトの名無しさん:2007/10/08(月) 03:26:08
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/

- Advanced Windows (書籍)
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055

-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://www.2chsearch.info/index.php?b=tech
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&view=table&D=tech

>>4を除いてここまで
7デフォルトの名無しさん:2007/10/08(月) 03:26:26

    ○| ̄|_

    あー!下手こいたー!

        〃〃
     ○/\〃
     ノ  <〃〃

    ♪ズンチャ!♪ズンチャ!

    ♪ズンチャ!♪ズンチャ!

     〇∧〃
     / >
     < \

    でもそんなの関係ねぇ!

    そんなの関係ねぇ!

      〇/
     /|
     />

    はい!オッパッピー!!
8デフォルトの名無しさん:2007/10/08(月) 03:41:22
>・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。

地味に書き換わってるな
9デフォルトの名無しさん:2007/10/08(月) 03:45:08
>>4
kora--
10デフォルトの名無しさん:2007/10/08(月) 03:51:22
立ててて思ったが29ちゃんのリンクは抜けばよかったな
11デフォルトの名無しさん:2007/10/08(月) 08:24:40
>>10
死ね
12デフォルトの名無しさん:2007/10/08(月) 13:16:43
15、16は一体ドコに消えたんだ。●はあるのに見えないぞ。
13デフォルトの名無しさん:2007/10/08(月) 15:05:09
pc2消滅の余波で消えたんじゃないか?
14デフォルトの名無しさん:2007/10/08(月) 15:16:57
pc.2ch.net を消そうとして 
まちがって pc2.2ch.net 消しちゃいました。 

すまぬ。 
15デフォルトの名無しさん:2007/10/08(月) 15:19:47
前スレが埋まる恐怖に慌ててたのか
16デフォルトの名無しさん:2007/10/08(月) 15:20:52
>>12
仕事人 ★ がさくっと。
詳細は下なんか
http://www.geocities.jp/pc2_down/
17デフォルトの名無しさん:2007/10/08(月) 15:25:29
>>5
>- Google
http://www.google.com/


これ、要るのか?
18デフォルトの名無しさん:2007/10/08(月) 15:30:14
とても大事
19デフォルトの名無しさん:2007/10/08(月) 15:39:56
void* p = (void*)GetModuleHandleW;
素朴な疑問なんですが↑のコードをコンパイルしたバイナリがあるとして
p は実行環境(主にOSバージョン)ごとに違う値が入りますよね

p == GetProcAddress(..., "GetModuleHandleW") になるのは直感的に判るのですが、
バイナリはどういう仕組みで実行時に GetModuleHandleW を評価してるんでしょか?
(GetModuleHandleW が GetProcAddress(..., "GetModuleHandleW") というコードに置換されるわけでもないだろうし)
20デフォルトの名無しさん:2007/10/08(月) 15:42:05
ああ〜、思い出した。あったねそういうこと。
さすがにデータが無くなってちゃどうしようもないか・・・
21デフォルトの名無しさん:2007/10/08(月) 15:56:21
>>19
インポートアドレステーブルとかでぐぐれ
22デフォルトの名無しさん:2007/10/08(月) 16:26:03
>>21
トン

GetModuleHandleW という記述はインポートアドレステーブルを通してアドレスとして解釈できてる
そのテーブルはバイナリの起動プロセスで「しすてむろーだ」なるものによって自動的に調整される
ってな感じなのかな
23デフォルトの名無しさん:2007/10/08(月) 16:57:26
EDITコントロールのフォントサイズを20にするにはどうしたらいいのでしょう?
よろしくお願いします。
2423:2007/10/08(月) 17:10:51
頑張ってみた結果の状況・・・、
LOGFONTのナニを弄ればフォントサイズが20になるか解らない。
処理入れないで実行するとフォントサイズが見えないほどになってる・・・。
どっか(というより全体?)処理がおかしいんだと思います。
やり方教えてください、お願いします。

LOGFONT lf;
HFONT hFont;

hFont = (HFONT)SendMessage(hEdit, WM_GETFONT, 0, 0L);
GetObject(hFont, sizeof(LOGFONT), (LPSTR)&lf);
//フォント20にする処理いれるつもり・・・
hFont = CreateFontIndirect((LPLOGFONT)&lf);
SendMessage(hEdit, WM_SETFONT,(WPARAM)hFont, (LPARAM)TRUE);
25デフォルトの名無しさん:2007/10/08(月) 17:22:13
>>24
lf.lfHeight
ポイント数で指定する方法はMSDNライブラリに書いてある。
http://msdn2.microsoft.com/en-us/library/ms533931.aspx

HFONT/WPARAMへのキャスト以外は不要。
2623:2007/10/08(月) 17:28:29
>>25
lf.lfHeightでしたかw
ポイント数、一度参考URLで見てきますね。(英語苦手だけど頑張ってきます^^)

ところでなぜ、なにもしていないとフォントサイズが変になったのでしょう?
27デフォルトの名無しさん:2007/10/08(月) 17:48:51
WM_GETFONTがNULLを返している、とか?
LOGFONTの内容を確認しないと何とも言えないな。
2823:2007/10/08(月) 17:52:59
>>27
NULL帰ってきてますね・・・。
WM_GETFONTの戻り値、「システムのフォントを使用しているときは0を返す」ってありました。
システムフォント使ってる場合はこの方法じゃダメなのか・・・
29デフォルトの名無しさん:2007/10/08(月) 18:22:22
GetStockObject(DEFAULT_GUI_FONT)を基にすると良いんじゃないかな。
30デフォルトの名無しさん:2007/10/08(月) 18:27:56
Windowsの事なのでここで質問しますが特定のデバイスドライバを
無効にしたり有効にしたりする方法ってどうやればいいのでしょうか?

とあるデバイスがきちんとVistaに対応していないせいかVistaのスリープから復帰すると
読み込めない状態になってしまいます。
そこでそのデバイスをデバイスマネージャから一旦無効にし、再度有効にしてやると
きちんとまた動作するのでそれをタスクマネージャを利用しスリープ復帰の際に自動で
行ってやろうと思っています。
3123:2007/10/08(月) 18:29:16
>>29
ありがとうw
解決しました^^;
32デフォルトの名無しさん:2007/10/08(月) 18:57:21
>>30
PnP Configuration Manager を使う

Win32 and COM Development
- Windows Driver Kit
- Device Installation
- Reference
- PnP Configuration Manager

SDKにcfgmgr32.hはあるが、肝心のインポートライブラリが無いな。
元々WDK用なので、色々弄らないと駄目だと思うが頑張れ。
33デフォルトの名無しさん:2007/10/08(月) 19:01:42
>>32
サンクスです。
それをヒントに調べてみます。
34デフォルトの名無しさん:2007/10/08(月) 19:12:42
>>19
トレースしろよ。
実際は言語やコンパイラによって実装が違う事もある。
35デフォルトの名無しさん:2007/10/08(月) 22:39:42
ウィンドウのあるプログラムでメニューで終了を選択したときの処理として
いきなり PostQuitMessage を呼んじゃうと
メモリリークしちゃうって理解でいいんでしょうか?
36デフォルトの名無しさん:2007/10/08(月) 22:55:00
は?
37デフォルトの名無しさん:2007/10/08(月) 22:57:47
PostQuitMessageはメッセージキューにWM_QUIT置くだけ
3830:2007/10/08(月) 23:03:10
自己レス
手抜きだけど調べてたらDevConユーティリティというのを発見したのでそれ利用して解決。
DevConのソースは公開されてるようだからそれを参考にすれば実装は簡単だと思う。
39デフォルトの名無しさん:2007/10/09(火) 07:28:27
>DevConのソースは公開されてるようだ
マジ?
40デフォルトの名無しさん:2007/10/09(火) 07:33:04
あ、ゴメン。ソースじゃなくて醤油だったわ
41デフォルトの名無しさん:2007/10/09(火) 10:09:31
>>40
wwwマジかよwwwそれはないわwwww
42デフォルトの名無しさん:2007/10/09(火) 15:47:25
質問して前スレの最後の奴みたいになるの嫌だしな。。
43デフォルトの名無しさん:2007/10/09(火) 17:15:32
>>42
怖がらなくていいわよ坊や。
44デフォルトの名無しさん:2007/10/09(火) 17:21:52
>>42
死ね
45デフォルトの名無しさん:2007/10/09(火) 18:23:12
バーーーーーーーーーーーーーーーーーーーーーーーーーーか
46デフォルトの名無しさん:2007/10/09(火) 18:24:14
         .| ,. '"::::::::::::::::::::::::::::::::::::`ヽ、
 失 や 精   |´::::::::::::<::::::╋::::::>:::::::::::::::::ヽ.
 せ る 神  |::::::::_,.-─‐-ァ-─-::、::::::::::::::::ヽ
 ろ か 安  |,. '"    /      `ヽ、::::::::::〉
    ら 定  | / /  i ハ ヽ 、   ヽ::/
.      剤  ノ/  /.ゝ!、ハ i  ! ,!ィ! ハ  !ハ
ヽ       i ハ   ハ'T7ヽ!ヽ! レ7'"7T'! /   i
 `''ー---‐'^ヽ!/ ヽハ .!'ト___リ     ト__,.リ レ'  /
     ほ  〈ヽ、  ! "        "/! rイ
     れ   ヽ. ヽ.ヽ、   r─ 、  ,.イノ ノ
          〉ヽ、ヽ.>.、.,,___-' ,.イハイ
          ヽ/ ´ ̄`ヽーr‐'"i´ ̄:::ヽ、
        __ rイ、__、___   iヽ--‐ヘ::::::ヽ:::ヽ.
      と__ ̄`ヽ、ニ、 ヽr」/ . 十::::`ヽ.::::::::::::>、
      ,. '", θ:..`ヽ、!,イ .   十::::::::::!、_r:、_rン
     /./7 ,.  .  !ン `   - ''^:::::::-イ、   ヽ.
     `´ / /7 ハ !ヘ       十::::::::iィ´   ノ
47デフォルトの名無しさん:2007/10/09(火) 18:29:16
ごめんねえーりん
おっぱい触ってくよえーりん
48デフォルトの名無しさん:2007/10/09(火) 18:29:42
>>45
お前Barに居るのか?
49デフォルトの名無しさん:2007/10/09(火) 18:38:07
VC++でUNICODE設定でビルドしているのですが、
文字を等幅フォントで表示させた場合、
UNICODEでもいわゆる半角文字は半角サイズで表示されますよね。
その文字が「全角サイズの文字」か「半角サイズの文字」かというのは
どうやって判定すればよいのでしょうか?
50デフォルトの名無しさん:2007/10/09(火) 18:45:54
フォントに拠るんじゃね?
51デフォルトの名無しさん:2007/10/09(火) 18:49:36
GetStringTypeEx
52デフォルトの名無しさん:2007/10/09(火) 19:26:44
>>50-51
GetStringTypeExにCT_CTYPE3を渡して、
C3_HALFWIDTHが立っているかを見ることで判定できました。
ありがとうございます。
53デフォルトの名無しさん:2007/10/09(火) 19:32:56
てか、日本語MSDNのGetStringTypeExの説明間違ってるな
C3_HALFWIDTH 全角文字
C3_FULLWIDTH 半角文字
逆だろ
54デフォルトの名無しさん:2007/10/09(火) 19:57:06
>>53
メール出して教えてやれ。
55デフォルトの名無しさん:2007/10/10(水) 00:11:11
最近windowsプログラムに手を出し始めた素人なんだが
最初のウィンドウ作成は定型みたいだけど全部覚えるものなの?
56デフォルトの名無しさん:2007/10/10(水) 00:16:24
>>55
死ね
初心者が出しゃばるな
57デフォルトの名無しさん:2007/10/10(水) 00:20:17
>>56
なにぬるぽしてるの
ばかじゃない
58デフォルトの名無しさん:2007/10/10(水) 00:21:42
それぞれの意味を調べて知っておいた方がいいとは思うが、覚える必要は別にないかと
59デフォルトの名無しさん:2007/10/10(水) 00:23:29
素人には関係ない話
60デフォルトの名無しさん:2007/10/10(水) 00:36:36
数をこなせば変更の必要の在るところはすぐに覚える。
時間があるときにでも、いろいろスタイルとか変更してどんな風になるか見るといいかもよ。
61デフォルトの名無しさん:2007/10/10(水) 00:46:05
初心者板でやれ
62デフォルトの名無しさん:2007/10/10(水) 01:11:20
初心者はドトネトでも使ってろ
63デフォルトの名無しさん:2007/10/10(水) 01:22:57
なんで煽ってんだよw
DQNかよw
64デフォルトの名無しさん:2007/10/10(水) 01:29:02
素人の分際でこのスレに出て来た>>55がDQN
65デフォルトの名無しさん:2007/10/10(水) 01:45:53
どうしてそんなに余裕がないんだ?
質問してきた人を馬鹿にするようなスレじゃないだろう。
こんな流れじゃ誰も質問しなくなる事がなぜ分からん?
66デフォルトの名無しさん:2007/10/10(水) 01:51:19
おっとろしいすれだべ。
おらみだいなカッペにはこわくてかきこみできねーだよ。
67デフォルトの名無しさん:2007/10/10(水) 01:57:09
>>65
どうしてそんなに余裕がないんだ?
質問してきた人を馬鹿にするようなレスじゃないだろう。
こんな流れじゃお前が質問しなくなるだけがなぜ分からん?
68デフォルトの名無しさん:2007/10/10(水) 02:22:47
>>67
死ね
69デフォルトの名無しさん:2007/10/10(水) 02:24:38
余裕がないのはどっちだか┐(´ー`)┌
701:2007/10/10(水) 02:48:22
素人お断りとは書いてないだろう

下らんことで煽るな
馬鹿かお前ら
71デフォルトの名無しさん:2007/10/10(水) 02:50:58
>>70
1は俺だ

名前を騙るな
馬鹿かお前
72デフォルトの名無しさん:2007/10/10(水) 03:12:03
WIN32質問箱存続の危機だな・・・
とりあえず、質問者を馬鹿にするようなタイプは出て行ってくれ。害にしかならん。
73デフォルトの名無しさん:2007/10/10(水) 03:23:21
>>72
お前アホだなw

すみません、ウィンドウの出し方教えてください。
74デフォルトの名無しさん:2007/10/10(水) 03:26:57
>>73
極端な例しか上げられんのか。
だからお前はダメなんだよ。
75デフォルトの名無しさん:2007/10/10(水) 03:54:10
>>55
メッセージループ
クラスの登録
ウィンドウの生成
プロシージャ

どれも覚えるに値する
76:2007/10/10(水) 04:14:34
>>71
●出してみろ

書き込み時間的に>>1は●持ちのはずだ
77デフォルトの名無しさん:2007/10/10(水) 07:55:12
>>66
あんた好きだwwww
てかマジで心に余裕のない人が混じりこんでますね
78:2007/10/10(水) 07:59:54
横からですまんが、●って一般レスではどうやってだすんだ?
名前欄に●っていれとけばいいのか?やってみたけど・・・
79デフォルトの名無しさん:2007/10/10(水) 07:59:57
>>66
書き込みしてんじゃんwww
80デフォルトの名無しさん:2007/10/10(水) 08:04:43
スクリーンセーバーの変更っていうか、設定ってどうやるんですか?
自作のスクリーンセーバーを作ったんですが、インストール時に自分のスクリーンセーバーを
デフォルトのスクリーンセーバーにするっていうオプションを作りたいのですが・・
レジストリへの設定でしょうか?
81デフォルトの名無しさん:2007/10/10(水) 08:17:27
>>80
rundll32.exe desk.cpl,InstallScreenSaver "c:\windows\system32\エロ動画.scr"
82デフォルトの名無しさん:2007/10/10(水) 08:28:47
>>81
これってShellExec関数から起動するってことなんでしょうか?

具具ってたらhttp://support.microsoft.com/kb/185348/jaこんなの見つけたんですが
レジストリ書き込みでもいけそうな感じもします。
ただSetSystemParametersInfoみたいな関数があると便利なんですが・・
83デフォルトの名無しさん:2007/10/10(水) 08:35:55
>>82
レジストリだとHKCU\Control Panel\Desktop\SCRNSAVE.EXEにフルパスで書き込むだけでいいっぽい。
意外にもSystemParametersInfoとかWM_SETTINGCHANGEしなくてもおk。(w2kで確認)
84デフォルトの名無しさん:2007/10/10(水) 10:30:11
>>81
どうでもいいがウィルス入りっぽいなwwwww
85デフォルトの名無しさん:2007/10/10(水) 10:40:47
まだ入れてねーよ
86デフォルトの名無しさん:2007/10/10(水) 11:23:16
あるexeが実行中かどうか調べるWin32APIを教えて下さいorz
87デフォルトの名無しさん:2007/10/10(水) 11:30:02
80ですけど、scrって結局exeを拡張子変えただから(初級者なんでアホな質問でご勘弁
なんかなんでもできるっぽい感じしますけど、これいいんですかね・・
88デフォルトの名無しさん:2007/10/10(水) 11:32:48
それはAPIと関係あるのかい?
89デフォルトの名無しさん:2007/10/10(水) 11:43:27
すみません、お聞きしたいことがあるのですが、今自由課題で

ttp://www.nicovideo.jp/watch/sm766671
( ニコニコ動画(RC)‐北海道に日本が制圧された )

みたいな物を作っているのですが
これの地図とセルの関連付け(?)はどのようにやっているのか教えてもらえないでしょうか。
今ウィンドウ作成が完了してこれから何をしていいか詰まってしまいました・・・。

何て言ったらいいか分からなくて、漠然としている質問内容ですいません。
90デフォルトの名無しさん:2007/10/10(水) 12:04:29
>>89
要はライフゲームだな

C言語宿題スレにでも移動しな
91デフォルトの名無しさん:2007/10/10(水) 12:11:58
>>86
ToolHelpかPSAPIあたりを使う

下位互換を気にするならToolHelpで
NT以降で良いならPSAPIの方が多分楽
92デフォルトの名無しさん:2007/10/10(水) 12:19:26
【政治】政府、"お金をつくる"造幣局や印刷局など独立法人20以上を民営化へ−機密性の保持も絡み様々な意見も★


http://news22.2ch.net/test/read.cgi/newsplus/1191932873/

【民営化】造幣局・印刷局など、独立行政法人20以上を民営化へ:政府方針 [07/10/07]
http://news21.2ch.net/test/read.cgi/bizplus/1191727281/


政府は6日、現在進めている独立行政法人(独法)の整理合理化に関連し、
101ある独法のうち、予算に占める国からの財政支出の割合(財政依存度)が低い
20法人以上の民営化を目指す方針を固めた。

2007年末に整理合理化計画を策定し、閣議決定する予定だ。
民営化の対象には、造幣局や国立印刷局、日本万国博覧会記念機構などがあがっている。
今後、独法の民営化推進を目指す渡辺行政改革相らの方針に対し、
事業の公共性の高さなどを主張する関係省庁の巻き返しが本格化しそうだ。

貨幣や紙幣を造る造幣局や国立印刷局については、機密性の保持なども絡み、
是非をめぐって様々な意見が出そうだ。

http://headlines.yahoo.co.jp/hl?a=20071007-00000002-yom-pol
93デフォルトの名無しさん:2007/10/10(水) 12:20:35
宣伝厨死ね
94デフォルトの名無しさん:2007/10/10(水) 12:26:05
>>90
ライフゲーム自体のアルゴリズムは分かるのですが他の処理がどうも・・・。

一応私の考えだと

日本地図の画像を貼り付ける

巨大な2次元配列を作成

日本地図内に収まっている配列だけを使い、収まりきらない部分は使用しない

って考えになってしまいます。本当に初心者ですいません。
助言通りC言語宿題スレでも聞いてみようかと思います。
ありがとうございました。

95デフォルトの名無しさん:2007/10/10(水) 12:33:24
>>94
まだいるか分からんけどニコニコの奴はそうやってるんだと思うぞ
9686:2007/10/10(水) 12:45:48
サンクス>>91

簡単に見つかりました→ttp://www.geekpage.jp/programming/psapi/list-process.php
97デフォルトの名無しさん:2007/10/10(水) 17:45:32
透明ウィンドウの上に透明じゃないスタティックコントロールを置くことは出来ないでしょうか。
透明ウィンドウを親ウィンドウとして、子ウィンドウのスタティックコントロールを作ると
スタティックコントロールまで透明になってしまいます。
98デフォルトの名無しさん:2007/10/10(水) 18:42:16
透明ウィンドウの下に透明ウィンドウじゃないスタティックコントロールじゃなくて?
上が透明じゃなくて、下が透明なら下にボタンあったら見えないし押せなくなるけど・・・いいの?
99デフォルトの名無しさん:2007/10/10(水) 18:59:29
透明ウィンドウってレイヤードウィンドウの事?
どっちにしろ無理じゃね
10097:2007/10/10(水) 19:39:15
>>98,99
ありがとうございます。
SetLayeredWindowAttributes()のLWA_COLORKEYを使ってウィンドウを透明化し
そのウィンドウの子ウィンドウとしてスタティックコントロールを置いたところうまくいきました。

ただ、透明化したほうのウィンドウが、何かしらのウィンドウの子ウィンドウにすると
見えなくなってしまいます。

仕方が無いのでとりあえず親ウィンドウとして透明化ウィンドウを作っていますが、対処策として

  1.透明化ウィンドウを親ウィンドウのまま、メインの親ウィンドウに重ねる
  2.透明化ウィンドウをなんとかして子ウィンドウにしても見えるようにする

の2つを考えているんですが、親ウィンドウ同士の動きを同期させるようなことって出来ないでしょうか。
10198:2007/10/10(水) 19:53:04
メインウィンドウの座標を中心に考えてMoveWindowしてやればいいんじゃね?
102デフォルトの名無しさん:2007/10/10(水) 21:30:42
すいません、教えてください。
今Window同士の関連動作的に実験プログラムを動かしています。

1:WindowAとBという異なる2つのexeを作成。
2:WindowAには1つのMenuとEnableMenuItemでMF_GRAYED|MF_DISABLEしたSubMenuがある。
3:WindowBでWindowAのHWNDを取得
4:3で取得したHWNDからWindowAのHMENUを取得
5:EnableMenuItem()でWindowBからWindowAのメニューをMF_ENABLEに
6:DrawMenuBar()でWindowAのメニューを再描画

 hWnd = FindWindow("クラス名", NULL);// WindowA HWND取得
 hMenu = GetMenu( hWnd );
 hSMenu = GetSubMenu( hWnd, 0 );
 EnableMenuItem( hSMenu, 2, MF_BYPOSITION | MF_ENABLED );
 DrawMenuBar( hWnd );
103デフォルトの名無しさん:2007/10/10(水) 21:31:47
送信しちゃった、すいません。

このソースでWindowAのメニューを操作しようと思ったのですが、
異なるexeの他のWindowって操作できないんでしょうか?
104デフォルトの名無しさん:2007/10/10(水) 21:35:35
>>103
ダイアログなんかだとクラス名が一緒になってしまうので
予期しないウインドウを操作してしまうかもしれない
105デフォルトの名無しさん:2007/10/10(水) 21:56:09
>>104
ありがとうございます。

現在サンプルで作って動かしてみて居るんですが、
EnableWindow()もDrawMenuBar()も正常な返り値を返すのですが、
何故か正常動作はしません。(この場合WindowAのSubMenuがEnableにならない)

 ret1 = EnableMenuItem( hSMenu, 0, MF_BYPOSITION | MF_ENABLED );
 ret2 = EnableMenuItem( hSMenu, 0, MF_GRAYED|MF_DISABLE );
 ret3 = EnableMenuItem( hSMenu, 0, MF_BYPOSITION | MF_ENABLED );

実験で連続してコールし、変更されているかどうかを確認すると

 ret1 = 0x03 // (返値は変更前の状態、失敗は-1)
 ret2 = 0x00
 ret1 = 0x03

となり、成功しているようです。

他のexeのMenuってセキュリティ的に動かせないようになってる、
なんて事は無いですよね?
106デフォルトの名無しさん:2007/10/10(水) 21:57:49
>>105
そういうときには SendMessage (or PostMessage)
107デフォルトの名無しさん:2007/10/10(水) 22:00:20
その操作対象exeは自分の作ったもの?

他人の作った内部構造のわからないものなら、
メニューが表示される直前に有効/無効を設定してる場合もあるから、
単に後から上書きされてるだけの可能性も
108デフォルトの名無しさん:2007/10/10(水) 22:26:57
>>106-107
ありがとうございます。

実験プログラムなので、自分で作った物と電卓などのWindowsに入っているもの
両方で実験しています。

電卓で実験する場合は、既に起動しておいてからEnableMenuItem()を発行しています。
109デフォルトの名無しさん:2007/10/10(水) 22:30:34
GetMenuStateで本当に変わってるか確認してみるとか・・・
110デフォルトの名無しさん:2007/10/10(水) 22:38:29
>>108
電卓(calc.exe)を逆汗してみたらWM_INITMENUPOPUPでEnableMenuItemしてるみたいだが。
111デフォルトの名無しさん:2007/10/11(木) 00:17:07
>電卓で実験する場合は、既に起動しておいてからEnableMenuItem()を発行しています。
「既に」「しておいて」ってなんだよ。すげぇ日本語だなぁ、おい。
112デフォルトの名無しさん:2007/10/11(木) 00:18:01
止めんか
113デフォルトの名無しさん:2007/10/11(木) 00:18:57
>>108
人間止めんか
114デフォルトの名無しさん:2007/10/11(木) 00:20:55
そういうのいいから。
殺伐としすぎだ。
115デフォルトの名無しさん:2007/10/11(木) 00:22:56
こういうのすきだ。
和むね。
116デフォルトの名無しさん:2007/10/11(木) 00:35:19
>>111
違和感を感じない俺はゆとろ
117デフォルトの名無しさん:2007/10/11(木) 00:37:44
ゆとろ蕎麦
118デフォルトの名無しさん:2007/10/11(木) 00:38:23
>>116
「既に」は状態を表すから、「既に起動しておいて」はおかしい。
文脈から判断する限り、「予め起動しておいてから」が妥当だろう。
どうしても「既に」を使いたいなら、「既に起動されている電卓に対して」とでもすればいい。
119デフォルトの名無しさん:2007/10/11(木) 00:40:19
となりのゆとろ
120ユトリロの絵は好きですが:2007/10/11(木) 00:45:23
ユトリロ
121デフォルトの名無しさん:2007/10/11(木) 00:47:39
画家乙
122デフォルトの名無しさん:2007/10/11(木) 00:50:04
となりのゆとろ
かわいい
123デフォルトの名無しさん:2007/10/11(木) 03:03:00
EDITコントロールと、描画にてExcelの入力画面みたいなのを作っています。
それで、入力状態にて、
ENTER、SHIFT+ENTER、TAB、ALT+TAB、↑、→、↓、←で、
セルの移動(十字キーは、最初から文字列が入っている場合は、Excelみたいに文字列内の移動のみ)
をするようにしたいのですが、すっきりした形になりません。
どういった形が、作ればそれっぽくできるでしょうか?

以下が考え途中の状況・・・
(SHIFT+↓でも「↑」に行く処理になってしまった。文字列の判定も無い状態)

switch(wp)
{
case VK_RIGHT:
case VK_TAB:
if(GetKeyState(VK_SHIFT) >= 0)
{/*移動処理*/break;}
case VK_LEFT:
//移動処理
break;
case VK_DOWN:
case VK_RETURN:
if(GetKeyState(VK_SHIFT) >= 0)
{/*移動処理*/break;}
case VK_UP:
//移動処理
break;
}

よろしくお願いします。
124デフォルトの名無しさん:2007/10/11(木) 03:05:40
うん。APIの質問じゃないよね。それ

グリッドコントロールでも使ってて
125デフォルトの名無しさん:2007/10/11(木) 03:08:22
ありがとうございます!

ブリットウンコトール使います!!
126デフォルトの名無しさん:2007/10/11(木) 03:09:28
>ブリットウンコトール

洗剤か何かですか?
127デフォルトの名無しさん:2007/10/11(木) 03:17:48
>ブリットウンコトール

効き目あっても、買いたくないなぁ・・・
128デフォルトの名無しさん:2007/10/11(木) 03:28:34
じゃあ、次の質問どうぞ!
129デフォルトの名無しさん:2007/10/11(木) 03:35:15
やっぱりブリット100人シテも大丈夫?
130デフォルトの名無しさん:2007/10/11(木) 03:55:43
うん。APIの質問じゃないよね。それ

ブリットウンコトールでも使ってて
131デフォルトの名無しさん:2007/10/11(木) 05:25:14
OllyDbg関係の板もしくはスレないの?
132デフォルトの名無しさん:2007/10/11(木) 05:32:22
ネトゲのチートスレぐらいしかない

スレ違い
133デフォルトの名無しさん:2007/10/11(木) 12:58:59
クスクスッ
クスリッ
134デフォルトの名無しさん:2007/10/11(木) 15:30:08
EDITコントロールにフォーカスが移ったときに、
カーソル位置を、最後の文字列の後ろにしたいのですが、どうするのでしょうか?
135デフォルトの名無しさん:2007/10/11(木) 15:33:31
EM_SETSELでなんとかなる
136デフォルトの名無しさん:2007/10/11(木) 16:07:40
staticコントロールのサイズを変えたくて、
「SendMessage(hStatic, WM_SIZE, 40, 40);」としました。
ですが変えれませんでした。
これはなんで変えれないのでしょうか?

で、代案を調べてみたら「SetWindowPos」って関数を見つけました。
予想道理の動作をしようと思ったら、下の方法でいいのでしょうか?
「SetWindowPos(hEdit, NULL, 0, 0, 40, 40, SWP_NOMOVE | SWP_NOZORDER);」
137デフォルトの名無しさん:2007/10/11(木) 16:11:48
WM_SIZE はサイズを変えるメッセージじゃなくて、
サイズが変わった後にそのことを教えるためのメッセージだから。
138デフォルトの名無しさん:2007/10/11(木) 16:13:43
>>135
なんとかなりましたw
139136:2007/10/11(木) 16:40:32
>>137
あぁ、知らせてるだけだったのですね^^
140デフォルトの名無しさん:2007/10/11(木) 20:26:29
ウィンドウの背景色を好きなタイミングで変更できるような関数ってありませんか?
ExtFloodFillでWM_PAINTが来るごとに全体を塗りつぶせばいいと思ったんですけど上手くいかないです…。

case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
ExtFloodFill(hdc, 1, 1, RGB(255,255,255), FOODFILLSURFACE);
EndPaint(hWnd, &ps);
break;

みたいな感じで描いたんですけど上手くいきません。
141デフォルトの名無しさん:2007/10/11(木) 20:56:35
>>140
俺はうまく行ってるように見えるが?
気のせいだろ。
142デフォルトの名無しさん:2007/10/11(木) 21:01:15
>>140
InvalidateRect の事かー!
143デフォルトの名無しさん:2007/10/11(木) 21:02:50
いいえ
144デフォルトの名無しさん:2007/10/11(木) 21:10:48
なんでExtFloodFill?
FillRectとかRectangleじゃダメなの?
145デフォルトの名無しさん:2007/10/11(木) 21:12:13
いいです
146デフォルトの名無しさん:2007/10/11(木) 21:45:33
早く答えてください
147デフォルトの名無しさん:2007/10/11(木) 21:59:27
もう答え出ましたが
あほですか?
148デフォルトの名無しさん:2007/10/11(木) 22:18:47
あほの子だ〜
                あほの子だ〜
149デフォルトの名無しさん:2007/10/12(金) 00:13:58
殺伐としてるなぁ・・・
150デフォルトの名無しさん:2007/10/12(金) 00:16:17
mjd?
151デフォルトの名無しさん:2007/10/12(金) 00:27:23
初心者は質問するなとは言わんがせめて猫ぐらい読んでから質問しろ
152デフォルトの名無しさん:2007/10/12(金) 00:29:51
っていうかよ
ブラシは指定してるのか?
ExtFloodFillはHDCのブラシで塗りつぶしするんだろ?
同じブラシ使ってりゃ塗りつぶされたかわからんわ
153デフォルトの名無しさん:2007/10/12(金) 01:06:49
ますですはい。
154デフォルトの名無しさん:2007/10/12(金) 01:23:37
クラス登録のときにCS_OWNDC付けてる?

でないとデバイスコンテキストのオブジェクトは
BeginPaintの度に一々初期化される(=標準ブラシに戻る)ぞ
155デフォルトの名無しさん:2007/10/12(金) 01:24:54
もっと詳しくお願いします
156デフォルトの名無しさん:2007/10/12(金) 01:26:57
どんだけ〜
157デフォルトの名無しさん:2007/10/12(金) 01:32:33
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);

SelectObject(hdc,hBrush);// ←これ

ExtFloodFill(hdc, 1, 1, RGB(255,255,255), FOODFILLSURFACE);
EndPaint(hWnd, &ps);
break;
158デフォルトの名無しさん:2007/10/12(金) 03:09:39
何がなんだかわかりません、解決方法を教えてもらえないでしょうか?
下記の操作をASCIIモードでコンパイルすると普通に動作します。
ですが、UNICODEモードでコンパイルするとMessageBoxにて文字化けしてしまいます。
よろしくお願いします。

CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);
dwsize = GetFileSize(hFile, NULL);
ReadFile(hFile, lpszBuf, dwsize, &dwAccBytes, NULL);
MessageBox(NULL, lpszBuf, CLASS_NAME, MB_OK);
159デフォルトの名無しさん:2007/10/12(金) 03:18:17
読み込んだ文字列はASCIIだからだろ

ReadFileはそこまで面倒見ない
160158:2007/10/12(金) 03:40:43
>>159
あ〜、ってことはASCII文字列をUNICODE文字列に
何かで変換しなくちゃいけないってことかw
161デフォルトの名無しさん:2007/10/12(金) 03:46:46
バカだなぁw
162158:2007/10/12(金) 03:55:21
>>161
あれ、もしかして変換じゃないの?
今、変換関数探しているんだけど・・・
163158:2007/10/12(金) 03:57:31
これかな?
MultiByteToWideChar
164デフォルトの名無しさん:2007/10/12(金) 03:59:23
それよりテキストをUNICODEで保存したら良いだろ
165158:2007/10/12(金) 04:03:18
>>164
まぁ、そうですけど・・・、他の人が使う場合を想定したら、
テキストファイルがASCIIだったって場合ないです?
それに対応するために両方出来るように処理した方がいいのかなって思ったんですが・・・
166デフォルトの名無しさん:2007/10/12(金) 04:09:46
>158 は自分で検証しようとする姿勢が見えて好感が持てる。
167158:2007/10/12(金) 04:22:58
あれ、もしかして>>165で聞いたことってなんか間違ってるのかな・・・。
なんか自信なくなってきた・・・。
以下、独り言

もう(探し)疲れたよ…パトラッシュ…。
僕は眠ることにするよ・・・。
続きは明日頑張るからいいよね・・・?
168デフォルトの名無しさん:2007/10/12(金) 04:33:38
うざいからもう来ないで欲しい
ここはお前の日記帳でも独りごち場でもない
169158:2007/10/12(金) 04:44:26
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszBuf, dwsize, lpszBuf2, dwsize2);
これでlpszBuf2に変換文字列が入って表示ができたけど・・・。
これが正しいとしてファイルの文字コードの判別処理もいるんだよな・・・。
とりあえず探すか・・・。
170158:2007/10/12(金) 04:51:41
>>168
ごめんなさいでした。
後は一人でがんばって見ます。
171デフォルトの名無しさん:2007/10/12(金) 06:36:38
最近変な質問者が多いな
172デフォルトの名無しさん:2007/10/12(金) 06:42:17
Windows2000/XPでTCP/IPによる各コネクションの転送速度を取得したいのですが
どうすればいいのでしょうか?
173デフォルトの名無しさん:2007/10/12(金) 07:28:51
WMI
174デフォルトの名無しさん:2007/10/12(金) 08:01:30
158は全然ヘンじゃないだろw
175デフォルトの名無しさん:2007/10/12(金) 08:05:39
174の方がヘンだろw
176デフォルトの名無しさん:2007/10/12(金) 09:19:10
ID出ないから変な煽り房が発生してるな。
177デフォルトの名無しさん:2007/10/12(金) 09:26:34
うるせーバーカ
178デフォルトの名無しさん:2007/10/12(金) 09:36:55
こんのバカちんが!!
179デフォルトの名無しさん:2007/10/12(金) 09:42:01
>>176
死ね
180デフォルトの名無しさん:2007/10/12(金) 09:58:32
MFCのCDCやCBitmapを使っているのですが、
内容自体はAPIに近いので、こちらで質問させていただきます。

PCの画面設定に関係無く、メモリビットマップを常にフルカラーで作成し、
そこにフルカラーのままCDCのメンバ関数で描画していきたいのですが、
このときのメモリDCやメモリビットマップはどのように用意するものなのでしょうか。
CreateCompatibleDC()やCreateCompatibleBitmap()しか使ったことが無く、
ここにデスクトップのDCを渡すと画面設定に依存してしまいます。
なにかよいサンプルがあれば教えていただけませんでしょうか。
181デフォルトの名無しさん:2007/10/12(金) 10:16:19
CreateDIBSectionかな
これだと任意のビット深度でビットマップが作れる
ハンドルも取れる
182デフォルトの名無しさん:2007/10/12(金) 10:36:22
実際いま沸いてる小心者は一人か二人くらいだとおもわれ
183デフォルトの名無しさん:2007/10/12(金) 10:40:58
お前が一人
184デフォルトの名無しさん:2007/10/12(金) 10:42:04
>>182
煽るな死ね
185181:2007/10/12(金) 10:53:43
一応真面目に答えてるんだから荒らさないでほしいお…
186デフォルトの名無しさん:2007/10/12(金) 10:55:01
はい!喧嘩はここまで!
昔のAPI質問箱の流れに戻そう。
187デフォルトの名無しさん:2007/10/12(金) 11:00:54
最近のコンパイラにはASCIIモードなんてものがあるのか
あってもおかしくは無いが
188デフォルトの名無しさん:2007/10/12(金) 11:31:06
あ?あんかけチャーハン?
189デフォルトの名無しさん:2007/10/12(金) 11:36:51
腹減ったなあ…
190180:2007/10/12(金) 11:52:24
>>181
情報ありがとうございます。
CreateCompatibleBitmap()の代わりにCreateDIBSection()を使ってみたところ、
フルカラーモードでないPC上でも内部にフルカラーのビットマップを作り、
そこにCDCのメンバ関数で描画することができました。

ちなみに、念のため確認させていただきたいのですが、
CreateDIBSection()で作成したビットマップにCDCのメンバ関数で描画する場合、
SelectObject()するためのメモリDCは、CreateCompatibleDC(デスクトップDC)でよいのでしょうか?
とりあえずちゃんと描画されてはいるようなのですが、
なんかここにフルカラーではないDCを渡すのが違和感があるのですが。
191デフォルトの名無しさん:2007/10/12(金) 12:01:36
メモリデバイスコンテキストは作成時点じゃ1×1のモノクロだそーだから気にしなくていいんじゃない?


192デフォルトの名無しさん:2007/10/12(金) 12:02:17
デバイスコンテキストに書き込んだとき
DIBのフォーマットに合わせて勝手に変換してくれるから大丈夫
193180:2007/10/12(金) 12:30:43
>>191-192
情報ありがとうございます。
フルカラーでないディスプレイのDCからでも
フルカラービットマップに描画することができるのですね。

以下のようにして、PCの画面設定に影響されずに
内部でフルカラービットマップに描画するようになりました。

/* PCの画面設定に影響されないようにDIBSectionを使う */
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biBitCount = 32;

(その他のメンバセット)

m_bitmap.DeleteObject();
m_bitmap.Attach(CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, NULL, NULL, 0));

/* メモリDCの参照元はディスプレイDC(PC自体がフルカラーでなくても問題無い) */
CDC dcMem;
dcMem.CreateCompatibleDC(NULL);
dcMem.SaveDC();
dcMem.SelectObject(&m_bitmap);

(CDCの描画関数)

dcMem.RestoreDC(-1);
194158:2007/10/12(金) 14:23:54
くるなと言われたけど、事後報告だけ書かせてください。

ttp://akari.kabe.co.jp/MagSite/Content.modf?id=20060711104047
文字コードの判定ですけど調べた結果、WINAPIにはそういった機能がなかったみたいですね^^
>>164の方は、だから簡単な「UNICODEで保存」の方を薦めてくれたんですね。
すみませんでした、素人がでしゃばって・・・。
サイトのほうに載ってる判定方法を試して無理そうだったらそれであきらめます、でわ。
195デフォルトの名無しさん:2007/10/12(金) 16:15:19
>>172
GetIfTable
196デフォルトの名無しさん:2007/10/12(金) 16:16:03
>>194
IsTextUnicode
197デフォルトの名無しさん:2007/10/12(金) 16:20:28
>>194
CとかC++のwchar_t系の入出力なら、
入出力時にマルチバイト文字列との変換をやってくれるぞ。
198デフォルトの名無しさん:2007/10/12(金) 18:18:58
IE(コンテナ)のウィンドウをRegisterDragDropの引数にしても
IDropTargetのDropイベントが発生しません。
なぜなんでしょうか?

// OLE機能にIDropTargetを登録します。
RegisterDragDrop(GetActualParent(), pDropTarget);
199デフォルトの名無しさん:2007/10/12(金) 18:49:58
サービスアプリを作ってるんですが、デスクトップを持つユーザーが
ログオンした、またはしている、という情報を得る方法を教えてください。
今はexplorer.exeプロセスが存在してるかどうかを見て、そのプロセスの
トークンを取得して判断していますが、もっとスマートなやり方があれば。
200デフォルトの名無しさん:2007/10/12(金) 20:05:44
デスクトップ持っててもExplorere.exeが無い時もあるが
201デフォルトの名無しさん:2007/10/12(金) 20:13:34
そのアプローチで行けてるなら無理に新規開発しなくてもそれでもいいような気もするが
ただシェルは置き換えられたり落ちてる場合があるから、プロセス列挙とかで調べたほうがいいような気もする
202デフォルトの名無しさん:2007/10/12(金) 21:52:49
>>198
ウィンドウ間違ってんじゃね
203デフォルトの名無しさん:2007/10/12(金) 22:16:25
>>202
spy++で見ると
Internet Explorer_Server
のウィンドウハンドルなんですが間違ってますでしょうか?
204デフォルトの名無しさん:2007/10/13(土) 11:31:09
はい
205デフォルトの名無しさん:2007/10/14(日) 14:57:26
キーボード関連のAPI
GetAsyncKeyState,GetKeyState,GetKeyboardStateをAPIフックしているんですが、
フック先がリリースビルドのものだとうまくいきません。
リリースビルドとデバッグビルドでどこか違いがあるんですか?
(タイマーで上記APIを呼んで結果表示するアプリで確認、
デバッグビルドだとフック側を呼んでいるっぽいのですが、
リリースビルドだとフック側を呼んでないっぽいのです。
ぽいっていうのは結果から、実際にデバッグがフック側を呼んでいるのは確認しました、リリースはこれから)

マウスのGetCursorPosもフックしているんですが、
こちらははリリースだろうが、デバッグだろうが関係なく
フック側を呼んで居るっぽいです。
(ぽいっていうのは、結果から、実際に呼んでいるのは見ていない。)

なんで?
206デフォルトの名無しさん:2007/10/14(日) 15:04:19
教えてあげないよ

     _,∩_         _,∩_           _,∩_
    (_____)ゝ、     (_____)    y     (_____)
    / :: :: :: ヽ 〉     /-‐:: ::‐-ヽ /       / :: :: :: ヽ
   _./ (・ )ll(・ ) ∨     _/  0) i! 0) ∨      _/ ( ・)i!(・ ) ゙、_
 // :: :: ∈ゝ :: ::ヽ   // ::  ‐-‐ :: ヽ    //  :: ー一 :: ヽ\
. ゝ/:: :: ::  :: :: ::ヽ  ゝ/ :: ::  ::  :: :: ヽ   ゝ/ :: ::  ::  :: :: ヽく
   ̄ ̄ | ̄ ̄ | ̄ ̄     ̄ ̄ | ̄ ̄ | ̄ ̄     ̄ ̄ | ̄ ̄ | ̄ ̄
       |     |             |     |             |     |
    ⊂!     !つ          .シ!     !つ        ⊂!     !つ

ジャン♪
207デフォルトの名無しさん:2007/10/14(日) 15:05:03
書き忘れ

環境はVisualStdio.NET2005のVCです。

VC6.0でもフックされる側アプリをビルドして試してみましたが、
同様の現象になります。
208デフォルトの名無しさん:2007/10/14(日) 15:06:07
ま た フ ッ ク か

過去スレにたくさん情報があると思うよ
209デフォルトの名無しさん:2007/10/14(日) 15:57:00
>>206
クソワロタwwwwwww
210デフォルトの名無しさん:2007/10/14(日) 15:59:13
>>206
三角形の秘密は結局、袋に書いてあったよ。
知りたければ買えってことだな。
211205:2007/10/14(日) 16:49:44
>>210

ちょ、ちょ・・・
ポリンキー買ってきます。
212デフォルトの名無しさん:2007/10/14(日) 16:53:32
このスレ、もう教えれる人間居ないんじゃw
213デフォルトの名無しさん:2007/10/14(日) 16:57:03
×教えれる
○教えられる
あほだな
214デフォルトの名無しさん:2007/10/14(日) 17:03:22
世の中には口語というものがあってだな…
215デフォルトの名無しさん:2007/10/14(日) 17:05:30
つーか、もう俺より技術力あるやついないんだよなぁ
216デフォルトの名無しさん:2007/10/14(日) 17:13:20
感感俺俺
217デフォルトの名無しさん:2007/10/14(日) 17:25:28
>>214
文語の世界ですよ
あほだなぁ
218デフォルトの名無しさん:2007/10/14(日) 18:43:36
フックの質問は全て、素晴らしい技術をお持ちの >>215 に一任しようぜ。
219デフォルトの名無しさん:2007/10/14(日) 18:49:53
ばっかじゃねぇの
>>215の技術力が乏しいのは誰から見ても明らかなのに
わざわざ釣られてやる必要ない
220デフォルトの名無しさん:2007/10/14(日) 19:21:53
技術不足でやきもきした連中の煽りあいがまたはじまったよー
221デフォルトの名無しさん:2007/10/14(日) 19:57:33
>>220
技術不足乙
222デフォルトの名無しさん:2007/10/14(日) 20:15:49
win32API存続の危機w
質問する奴を罵倒する釣りスレになってるw
223205:2007/10/14(日) 20:16:31
作業続行開始

デバッグ時のアセンブラコード

デバッグ

GetKeyboardState(abyKey);
00412F6D 8B F4 mov esi,esp
00412F6F 8D 85 EC FE FF FF lea eax,[ebp-114h]
00412F75 50 push eax
00412F76 FF 15 D0 1A 42 00 call dword ptr [__imp__GetKeyboardState@4 (421AD0h)]
00412F7C 3B F4 cmp esi,esp
00412F7E E8 FF E5 FF FF call @ILT+1405(__RTC_CheckEsp) (411582h)


リリース
GetKeyboardState(abyKey);
004015C6 8D 44 24 08 lea eax,[esp+8]
004015CA 50 push eax
004015CB 8B F1 mov esi,ecx
004015CD FF 15 EC 32 40 00 call dword ptr [__imp__GetKeyboardState@4 (4032ECh)]

どっちもAXにポインター入れてCallしてるだけの模様。
デバッグ時のCall後の処理はESP(スタックポインタ)のチェックか?

__imp__GetKeyboardState@4のアドレスが違う?
224205:2007/10/14(日) 20:17:53
APIフックかける前とかけた後のdword ptr [__imp__GetKeyboardState@4]を見てみることにする。

デバッグ:フック前
(ウォッチ)__imp__GetKeyboardState@4 0x00421ad0 __imp__GetKeyboardState@4 void *
(ウォッチ)*(long*)__imp__GetKeyboardState@4,x 0x77cfef29 long
この状態でステップインするとUSER.DLLの0x77cfef29飛び込む(当たり前)

デバッグ:フック後
(ウォッチ)__imp__GetKeyboardState@4 0x00421ad0 __imp__GetKeyboardState@4 void *
(ウォッチ)*(long*)__imp__GetKeyboardState@4,x 0x012b1db0 long
アドレスが変わっている、ステップインすると自作DLLの0x012b1db0に飛び込む、ソースがあるのでソースも表示される。

完全に予期した動作であり問題なし。

リリース:フック前
(ウォッチ)__imp__GetKeyboardState@4 0x004032ec __imp__GetKeyboardState@4 void *
(ウォッチ)*(long*)__imp__GetKeyboardState@4,x 0x77cfef29 long
デバッグ時と同じアドレス(0x77cfef29)を示している、当然USER.DLLの0x77cfef29飛び込む(当たり前)

デバッグ:フック後
(ウォッチ)__imp__GetKeyboardState@4 0x004032ec __imp__GetKeyboardState@4 void *
(ウォッチ)*(long*)__imp__GetKeyboardState@4,x 0x77cfef29 long
ふぉっ?フックされてないしっ。

とりあえず、解決?
225デフォルトの名無しさん:2007/10/14(日) 20:20:15
答えられないなら黙ってればいいのに
226デフォルトの名無しさん:2007/10/14(日) 20:21:40
インポートテーブルでもいじってんの?
227205:2007/10/14(日) 20:26:01
そーです。いじってます。
APIフックなのです。
228デフォルトの名無しさん:2007/10/14(日) 20:48:17
>>205
自分のブログにでも書いてろカス
229デフォルトの名無しさん:2007/10/14(日) 20:58:17
ブレークポイントってコード書き換えて実装しているんだよ。
あとリリースビルドだと基本的にトレースできないものと思っていい。
だから確認の仕方がまずいんでない?
230デフォルトの名無しさん:2007/10/14(日) 20:59:53
>>228
お前一人でうざすぎだから荒らし板に通報しといたよ
231デフォルトの名無しさん:2007/10/14(日) 21:06:10
>>230
お前一人でうざすぎだから殺人板に通報しといたよ
232デフォルトの名無しさん:2007/10/14(日) 21:09:30
・どのような方法でフックしているか
・どのようなアプリの関数呼び出しをフックしようとしているか
233デフォルトの名無しさん:2007/10/14(日) 21:14:36
・どのような方法でフックしているか
・どのようなアプリの関数呼び出しをフックしようとしているか
234デフォルトの名無しさん:2007/10/14(日) 21:15:08
なんで2回いうねん!
235デフォルトの名無しさん:2007/10/14(日) 21:20:56
なんで2回いうねん!
236205:2007/10/14(日) 21:31:29
>どのような方法でフックしているか

CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId())で、カレントプロセスのモジュール一覧を取得する
取得した全モジュールに対して、ImageDirectoryEntryToDataでIMAGE_DIRECTORY_ENTRY_IMPORTを渡してインポートディスクリプタを取得。

取得したインポートディスクリプタを検索して狙ったモジュール名(User32.DLL)を持つものを見つける。
(IMAGE_IMPORT_DESCRIPTORのNameを順に見ていく)

見つけたらFirstThunkから、順にu1.Function(IMAGE_THUNK_DATA)がオリジナルのAPI(GetKeyStateなど)と一致するか見る

一致したら、そのアドレスを置き換えたい関数のアドレスで上書き。

>どのようなアプリの関数呼び出しをフックしようとしているか
特定無し、あらゆるアプリケーション
237205:2007/10/14(日) 21:32:45
以下、ソース抜粋

int CApiHook::ReplaceIATEntryProcess(PCSTR pszModuleName, PROC pfnCurrent, PROC pfnReplace)
{
int cReplace = 0;
MEMORY_BASIC_INFORMATION mbiCurrentProcess;
if(VirtualQuery(ReplaceIATEntryProcess, &mbiCurrentProcess, sizeof mbiCurrentProcess) == 0)
return cReplace;
HMODULE hModCurrentProcess = reinterpret_cast<HMODULE>(mbiCurrentProcess.AllocationBase);

// モジュールリストを取得
HANDLE hModSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
if(hModSnap == INVALID_HANDLE_VALUE)
return cReplace;

MODULEENTRY32 meCurrentModule;
meCurrentModule.dwSize = sizeof(meCurrentModule);

for (BOOL fGetModule = Module32First(hModSnap, &meCurrentModule); fGetModule; fGetModule = Module32Next(hModSnap, &meCurrentModule)) {
// // 自モジュールは書き換えない
// if (hModCurrentProcess == meCurrentModule.hModule)
// continue;
if (ReplaceIATEntryModule(pszModuleName, pfnCurrent, pfnReplace, meCurrentModule.hModule))
cReplace++;
}

CloseHandle(hModSnap);
return cReplace; // 書き換えたモジュール数を返す
}
238205:2007/10/14(日) 21:35:08
bool CApiHook::ReplaceIATEntryModule(PCSTR pszModuleName, PROC pfnCurrent, PROC pfnReplace, HMODULE hModule)
{
bool fResult = false;
// モジュールのインポートセクションのアドレスを取得
ULONG ulSize;
PIMAGE_IMPORT_DESCRIPTOR piidEntry = reinterpret_cast<PIMAGE_IMPORT_DESCRIPTOR>(::ImageDirectoryEntryToData(hModule, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize));
if (piidEntry == NULL) return false;// インポートディスクリプタ行方不明
// インポートディスクリプタを検索
for (; piidEntry->Name != 0; piidEntry++) {
// モジュール名チェック
PSTR pszModuleNameEntry = reinterpret_cast<PSTR>(reinterpret_cast<PBYTE>(hModule) + piidEntry->Name);
if (lstrcmpiA(pszModuleNameEntry, pszModuleName)) continue; // 違う
// インポートアドレステーブルを取得
PIMAGE_THUNK_DATA pitdTable = reinterpret_cast<PIMAGE_THUNK_DATA>(reinterpret_cast<PBYTE>(hModule) + piidEntry->FirstThunk);
//インポートアドレステーブルを検索
for (; pitdTable->u1.Function != NULL; pitdTable++) {
// API関数アドレスのアドレスを取得
PROC* ppfnReplace = reinterpret_cast<PROC*>(&pitdTable->u1.Function);
if (*ppfnReplace == pfnCurrent) { // アドレスがオリジナルと一致したので書き換える
DWORD dwDummy;
VirtualProtect(pfnReplace, sizeof ppfnReplace, PAGE_EXECUTE_READWRITE, &dwDummy);
WriteProcessMemory(GetCurrentProcess(), ppfnReplace, &pfnReplace, sizeof pfnReplace, NULL);
fResult = true;
}
}
}
return fResult;
}
239205:2007/10/14(日) 21:36:48
うはぁ、がたがたになった。
しかも改行規制で改行消したから超見にくい。

申し訳ないですが、見る人はエディタに張って整形してください。
240デフォルトの名無しさん:2007/10/14(日) 21:41:29
フックってレベルじゃねぇぞ!!
241デフォルトの名無しさん:2007/10/14(日) 21:43:53
フックと言えばライクライフは名作だったなぁ・・・
242205:2007/10/14(日) 21:48:25
>フックってレベルじゃねぇぞ!!
技術不足で申し訳ないです。

IMAGE_DIRECTORY_ENTRY_IMPORTだけじゃなく、
IMAGE_DIRECTORY_ENTRY_IATもやらないとダメな気がしてきました。
243デフォルトの名無しさん:2007/10/14(日) 21:54:58
いあtのふっくはすでにおなじほうほうでふっくがかけられているとかならずしっぱいするから
>特定無し、あらゆるアプリケーション
はどうなのかなぁとおもふけどjmpほうしきはjmpほうしきであぶないからどうしたらいいのかなぁ
244デフォルトの名無しさん:2007/10/14(日) 21:55:16
>>1
>・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。


advanced windows欲しいんだけど売ってる?
245デフォルトの名無しさん:2007/10/14(日) 21:56:17
駄目な気がっていうかやらないと駄目
246デフォルトの名無しさん:2007/10/14(日) 21:56:56
>>244
かいてい5ばんぜっさんはつばいちゅう!
247デフォルトの名無しさん:2007/10/14(日) 21:57:30
>>245>>242
248デフォルトの名無しさん:2007/10/14(日) 22:18:58
m_hsageって何かの流行でしょうか?
249デフォルトの名無しさん:2007/10/14(日) 22:25:31
自己主張が激しいだけ
ファイナル・エージェントみたいなもん
250デフォルトの名無しさん:2007/10/14(日) 22:39:22
太斎
251205:2007/10/15(月) 00:33:52
205です。
原因わかりました。

泣きそうです。
2日悩んでました。


VirtualProtect(pfnReplace, sizeof ppfnReplace, PAGE_EXECUTE_READWRITE, &dwDummy);
WriteProcessMemory(GetCurrentProcess(), ppfnReplace, &pfnReplace, sizeof pfnReplace, NULL);

VirtualProtect(pfnReplace, , , );
WriteProcessMemory(, ppfnReplace, , , );
pfnReplace?ppfnReplace?

ということでした、DebugBuildだと書き込み可能に設定されるんですね。
以上、お騒がせしました。いろいろありがとうございました。

252デフォルトの名無しさん:2007/10/15(月) 00:45:10
エラーチェックしないお前が悪い
253デフォルトの名無しさん:2007/10/15(月) 01:50:32
Releaseでも普通は書き込めるよ
254デフォルトの名無しさん:2007/10/15(月) 19:25:16
ReleaseとDebugで動きの違うバグの90%は初期化関連のミス
255デフォルトの名無しさん:2007/10/15(月) 20:34:08
誰一人として205の求める回答が出来ていない件
レベル低すぎワロタ
256デフォルトの名無しさん:2007/10/15(月) 20:50:39
>255がきちんと回答してくれるそうです。期待しています。
257デフォルトの名無しさん:2007/10/15(月) 21:07:41
>>255
早くッ!
258デフォルトの名無しさん:2007/10/15(月) 21:20:10
自分で見つけさせた方が忘れにくい
259デフォルトの名無しさん:2007/10/15(月) 22:25:22
>>255 はまだか?
260デフォルトの名無しさん:2007/10/15(月) 22:43:16
昔エロゲのチェック外すのに使ったのう・・・
261デフォルトの名無しさん:2007/10/16(火) 01:37:37
APIフックなんて自分で書こうとせず既に出来上がってるライブラリ使えよ
262デフォルトの名無しさん:2007/10/16(火) 01:49:01
>>255
ネットでも現実でも口だけの中身のない人間か
263デフォルトの名無しさん:2007/10/16(火) 06:15:21
腔腸動物って、脳はどこにあるん?
つい疑問に思った。スレ違いゴメン。
264デフォルトの名無しさん:2007/10/16(火) 06:27:34
ぉヵぁ「ヵッォ ぉゃっ ょ-」
ヵッォ「…ぉゃっ ぃぃ…」

ぉヵぁ「ぉぃιぃ ぉゅ ょ-」

ヵッォ「…ぁι゙ ゎ?」

ぉヵぁ「ιぉぁι゙ ょ-」

ヵッォ「ゎぁぃゎぁぃ」

ゎぃ ゎ ヵッォ   ヵョゎぃ ヵッォ
ぁゃゃ ゎ ぉヵュ  ぉゃι゙ ゎ ぉι゙ゃ
ぁぁ… ぉヵァ ぃゃ ゃゎ…

「ヵッォ ぉゃっ ょ-」
…ぉゃっ ぃぃ…
「ぇぇ- ぉぃιぃ ぉヵヵ ょ?」
ぉヵヵ? …ぁゃιぃ ゎぁ…

ぃゃゃゎぁ… ぉヵヵ ぉぃιぃ…
ιょぅゅぁι゙ ぃぃゎぁ…
「ヵッォ ぉヵヵ ぉぃιぃ?」ぉぃιぃ ょ-
「… ヵッォ ぁι ゎ?」
ぁι?  ぇ?  …ぅゎぁぁぁぁ! ゎぃ ぁι ヵ゙! ぁι ヵ゙ぁぁ!!
「ヶヶヶ… ぉぃιぃ ぉヵヵ ゎ ぉぃιぃ ヵッォ  ヶヶヶ」
ぃゃぁぁぁぁぁぁぁ!!!!!
265デフォルトの名無しさん:2007/10/16(火) 07:21:43
>>264
「ぁぃぅぇぉヵヶιっゃゅょゎ゛」
を使って文章を生成するソフトをWin32APIでどうやって作るのですか?

って訊いてるのか。
266デフォルトの名無しさん:2007/10/16(火) 13:47:07
>>264
ごめん死ぬほどワロタ
267デフォルトの名無しさん:2007/10/16(火) 14:32:16
>>264
うざい死ね
268デフォルトの名無しさん:2007/10/16(火) 16:43:02
Win32API以外の話は禁止
269デフォルトの名無しさん:2007/10/16(火) 19:17:56
OutputDebugString( "ぃゃゃゎぁ…" );
270デフォルトの名無しさん:2007/10/16(火) 19:23:06
つまらんいつまで続けるんや
271デフォルトの名無しさん:2007/10/16(火) 20:45:49
>>270
しろうさんですか?
これからニートですけど頑張ってくださいね^^
272デフォルトの名無しさん:2007/10/16(火) 23:52:48
寿司食いたいフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
273デフォルトの名無しさん:2007/10/17(水) 00:15:59
>>272
たまにやってしまうなそれw
274デフォルトの名無しさん:2007/10/17(水) 00:24:43
未初期化データの0xCCか
275デフォルトの名無しさん:2007/10/17(水) 00:36:31
フフフフフフフフ と ンンンンンンンン はよく見かけるな。
276デフォルトの名無しさん:2007/10/17(水) 01:05:30
ンンンンンンンン はやらしい
277デフォルトの名無しさん:2007/10/17(水) 02:46:15
プロセスが使ってるハンドルの一覧を、タスクマネージャみたいに
表示してくれるツールありましたら教えてください。
長時間動かすアプリがなんかのタイミングでハンドルリークしてるっぽいので
調べたいのです。
昔見かけた気がするけど、名前忘れちゃった・・・
278デフォルトの名無しさん:2007/10/17(水) 03:01:15
Process Explorer
279デフォルトの名無しさん:2007/10/17(水) 03:39:30
ありがとうございます。
同じとこのhandleというコマンドラインツールで-p pid -a
で全部列挙できました。
280デフォルトの名無しさん:2007/10/17(水) 09:53:43
初心者なので意味のわからないこと言っていたらすみません。

VC++で、
ウィンドウのメニューからダイアログ開いて
そのダイアログの中でペイントのように絵を描いて保存する、
というようなことは可能ですか?

またダイアログに、
マウスで絵などを描くことができる普通の画面のようなもの
を貼り付けるには、どのツールを張ればよいのですか?
281デフォルトの名無しさん:2007/10/17(水) 10:35:27
>>280
そういう機能を持った標準コントロールは無いので自分で作る。
282デフォルトの名無しさん:2007/10/17(水) 10:37:08
ペイントを起動するプログラムを作成する
283デフォルトの名無しさん:2007/10/17(水) 11:52:24
CreateProcessってネット上にあるサンプルのコードとか見ると
>CreateProcess(NULL, "notepad.exe", ...);
って大抵が2番目に実行ファイルのパスを渡してますけど
これはコマンドライン引数付けないのであれば1番目に書いてもいいんですよね?
2番目はconst指定じゃないからわざわざLPSTRにキャストしてる例も多々見られるけど
それは何故1番目に書かないのか不思議です。
1番目だと不味い何か理由があるのでしょうか。
284デフォルトの名無しさん:2007/10/17(水) 12:02:59
MSDNに、NT系で16ビットアプリを呼ぶときは、最初のパラメータでNULL入れろって書いてある

んじゃ、「2番目に全部書いてしまえ」ってとこじゃないか
285デフォルトの名無しさん:2007/10/17(水) 13:40:33
>>281>>282
ありがとうございます。
ダイアログでは無理そうなので、
普通に作ったウィンドウクラスを開こうと思います。

メニューから選択し、ウィンドウを開くにはどうしたらいいんですか?
2つのウィンドウが表示されているような状態にするには。(2つのプロシージャ)
286デフォルトの名無しさん:2007/10/17(水) 13:50:21
>>285
そんな最初のとこから分からないんだったら、
ここで聞く前にどっかの入門サイトで勉強した方がいいと思う
287デフォルトの名無しさん:2007/10/17(水) 17:46:49
>>283
> 2番目はconst指定じゃないからわざわざLPSTRにキャストしてる例も多々見られるけど
これって本当は間違いだけどそういうサンプル多いよね。
288デフォルトの名無しさん:2007/10/17(水) 19:17:03
NT系でもCreateProcessAだと、変換バッファ介されるから通っちゃうんだよな。
289デフォルトの名無しさん:2007/10/17(水) 19:33:46

>>CreateProcess(NULL, "notepad.exe", ...);
>って大抵が2番目に実行ファイルのパスを渡してますけど
例のように第二引数にファイル名のみを渡した場合、環境変数を探してくれるのでテストコードとして扱いやすい
だがリテラル渡すようなサンプルのご利用は計画的に
290デフォルトの名無しさん:2007/10/17(水) 19:42:21
>>285
すみません。いくら探してもでてきませんでした。


今したいことは、2つのプログラムがあって、
1つは、メインの処理のプログラム
もう1つは、エディタのようなプログラムです。

私がしたいのは、メインの処理のウィンドウのメニューから
エディタのプログラムのウィンドウを開きたいんですが、
うまくいきません。
未熟者ですみません。お願いします。
291290:2007/10/17(水) 19:44:14
訂正
×メインの処理のウィンドウのメニューから
○メインの処理のウィンドウのメニューから項目を選択することで
292デフォルトの名無しさん:2007/10/17(水) 19:51:28
メニューコマンドのハンドラの書き方が分からない?
エディタのプログラムの起動方法が分からない?
何がうまくいかないのか、詳細を述べよ。
293デフォルトの名無しさん:2007/10/17(水) 19:54:03
うまくいきませんってことは、何かやってみたんだろう
・実際に何をやってみて (どのAPIをどういう風に呼んでるとか)、
・どういう結果になったのか、
・それが本当はどうなって欲しいのか、
を書くべきだ
294デフォルトの名無しさん:2007/10/17(水) 20:01:53
>>290
あほなんだから諦めろ
どうしてもやりたいならこんなとこで聞く前に基礎から勉強しろ
295デフォルトの名無しさん:2007/10/17(水) 20:05:57
亀田しね
296デフォルトの名無しさん:2007/10/17(水) 21:32:52
>>291
真面目に猫WinのCの所とAPIを読んでから来い
297デフォルトの名無しさん:2007/10/17(水) 21:50:47
>>290
うちはうまくいってるよ
298デフォルトの名無しさん:2007/10/17(水) 23:14:46
うちでもうまくいってる
299デフォルトの名無しさん:2007/10/17(水) 23:34:53
うちはかみさんとお袋がうまくいってない
300デフォルトの名無しさん:2007/10/17(水) 23:52:22
Katamari is beautiful
301デフォルトの名無しさん:2007/10/17(水) 23:52:53
スレ違いが多いんだな
302デフォルトの名無しさん:2007/10/17(水) 23:56:06
>>301
誰が上手いこと言えとw
303デフォルトの名無しさん:2007/10/18(木) 00:11:56
どこがどう上手いんですか
304デフォルトの名無しさん:2007/10/18(木) 00:14:09
(一連の書き込みが)スレ違いと(かみさんとお袋の)すれ違いが掛かってるのかな?
305デフォルトの名無しさん:2007/10/18(木) 00:22:51
俺はできちゃった結婚する予定の妹の旦那とうまくいってない。
306デフォルトの名無しさん:2007/10/18(木) 00:25:06
つまらない件

↓気を取り直して質問どうぞ
307デフォルトの名無しさん:2007/10/18(木) 00:34:01
>>305
それなんて俺
殺してしまえ
308デフォルトの名無しさん:2007/10/18(木) 00:36:11
ぬるぽ
309デフォルトの名無しさん:2007/10/18(木) 00:39:57
村役場の老人会並にお寒いスレだな
310デフォルトの名無しさん:2007/10/18(木) 00:40:06
めるぽ
311デフォルトの名無しさん:2007/10/18(木) 00:40:59
皆で荒れた雰囲気を緩和しようと気を使ってるというのにお前ときたら
312デフォルトの名無しさん:2007/10/18(木) 00:44:39
>>304
なるほど
頭が柔らかいね
俺にはちょっと難しかったわ
313デフォルトの名無しさん:2007/10/18(木) 00:45:30
>>308
>>310
ガッガッ

うそつき
XPSP2からはIATとかデフォルトで読み取り専用じゃねーか
314デフォルトの名無しさん:2007/10/18(木) 02:55:21
>>309
年寄り乙
315デフォルトの名無しさん:2007/10/18(木) 03:25:10
スレを3分の1ぐらい消費したのに碌な情報がない件について
316デフォルトの名無しさん:2007/10/18(木) 03:50:24
君が有用な情報を書いてもいいんだよ
317デフォルトの名無しさん:2007/10/18(木) 09:44:53
やだよ
318デフォルトの名無しさん:2007/10/18(木) 12:11:28
>>317
無理だよ、の間違いだろw
319デフォルトの名無しさん:2007/10/18(木) 12:45:13
オマエガナー
320デフォルトの名無しさん:2007/10/18(木) 12:46:48
という事にしたいのですね:-)
321デフォルトの名無しさん:2007/10/18(木) 13:23:49
lol
322デフォルトの名無しさん:2007/10/18(木) 16:03:06
もはやネタスレ
323デフォルトの名無しさん:2007/10/18(木) 16:16:03
何を期待してんだか
324デフォルトの名無しさん:2007/10/18(木) 16:30:54
>>323
おまえがこの世から消え去ることを。
325デフォルトの名無しさん:2007/10/18(木) 16:32:09
どんだけ小さいんだか
326デフォルトの名無しさん:2007/10/18(木) 17:08:49
>>325
おまえのケツの穴よりは大きい。
327デフォルトの名無しさん:2007/10/18(木) 17:14:08
ケツの穴が比較対象ってもはや数センチの戦いだなw
328デフォルトの名無しさん:2007/10/18(木) 17:16:21
わらた
329デフォルトの名無しさん:2007/10/18(木) 17:20:34
穴の深さってどうやって測るんだろう
330デフォルトの名無しさん:2007/10/18(木) 17:21:18
>>327
けつの穴がセンチ単位ってどんだけ拡張してんだよ、フリスクどころじゃねー。
331デフォルトの名無しさん:2007/10/18(木) 17:22:30
GetSystemInfo(ASS_HOLE,ASS_DEPTH);
332デフォルトの名無しさん:2007/10/18(木) 19:13:33
すごく・・・・・おおきいです・・・
333デフォルトの名無しさん:2007/10/18(木) 19:18:56
つまんね古いからか?
334デフォルトの名無しさん:2007/10/18(木) 19:30:35
質問者よきたれ!
互いの嫌なところを指摘できずに感情が篭ったりすることのない、
みんなが遠慮せず心内をぶちまけ合えるアットホームな雰囲気スレだよ!
335デフォルトの名無しさん:2007/10/18(木) 19:35:09
>>334
嘘すぎてうけたw
336デフォルトの名無しさん:2007/10/18(木) 21:26:56
.NETで開発したアプリの初回実行が遅く、またそれ以降の実行にも少し遅さを感じたので、
これに対処するためにVC++2005でFrameworkがなくても実行できるものにしてみようと思っています。

そこで質問なのですが、Win32のコンソールアプリケーションと、
CLRのWindowsフォームアプリケーションのどちらでも、Frameworkを使わないアプリができるんでしょうか?

CLRのWindowsフォームアプリケーションで始めると、直感的にフォームを操作できて馴染み易いんですが・・・
なにかアドバイスをお願い致します。

それと、今はまだXP辺りが主流だと思うので、.NETでFrameworkを使ったものよりも、
VC++で作った方が、パフォーマンスが良いと思うんですが、(ユーザー側にFrameworkがなくても動くことも踏まえ)
Vistaが主流になってくると、Framework3.0?が標準で入っているようですし、そのころになると
.NETでの開発がお手軽で、尚且つ、VC++と同じくらい高速なアプリになったりするんでしょうか?
337デフォルトの名無しさん:2007/10/18(木) 21:37:54
>>336
最終的に何が目的なんだい?
CLRは使うのに.NETは使わないとか、VC++の方が.NETよりパフォーマンスが良いとか壮大な釣りか
338デフォルトの名無しさん:2007/10/18(木) 21:38:21
>>336
作るのは.netの100倍大変だけどいいの?
多少遅いくらい我慢しる!
339デフォルトの名無しさん:2007/10/18(木) 21:39:41
>>336
ユーザー側だとかそんなにあほなのに公開してんの?
340デフォルトの名無しさん:2007/10/18(木) 21:44:44
>>337
VC++は知らんが、少なくともC++は.NETより高速なはず。
341デフォルトの名無しさん:2007/10/18(木) 21:47:59
>>337
最終的な目的は「起動速度を早くしたい」です。正直なところ、Win32APIやCLRなど、よく理解していません・・・
ただ「Frameworkを使わなければ、この起動速度の遅さは何とかなる」というのを理解しているレベルです。

>>338
それほど大変なんですか・・・
OSの主流がVistaなどに移って、Framework3.0などが一般的になってきたとしても、
この遅さは変わらないんでしょうか?

>>339
公開はしていません。ユーザー側〜というのは、単なる要因のひとつとして挙げたまでです。
342デフォルトの名無しさん:2007/10/18(木) 21:56:46
>>341
ここを見てやる気をなくしてくれ
http://www.kumei.ne.jp/c_lang/index_sdk.html
343デフォルトの名無しさん:2007/10/18(木) 22:18:33
今更だけど、CLRアプリケーションはようするに.NET Frameworkを使う。

初回の遅さはともかく、それ以降の遅さはがロジック部分のコードに起因するなら、
そこだけVC++でネイティブコードとして書くという手もあると思う。
344デフォルトの名無しさん:2007/10/18(木) 22:25:19
>>342
>当ホーム・ページの一部または全部を無断で複写、複製、転載あるいはコンピュータ等のファイルに保存することを禁じます。

なんで?ブラウザのキャッシュもダメ?
345デフォルトの名無しさん:2007/10/18(木) 22:38:34
ブラウザのキャッシュは知らんが、一部を無断で転載(引用)している>>344は確実にダメだな。
346デフォルトの名無しさん:2007/10/18(木) 22:41:53
>>345
テラ理不尽wwww
347デフォルトの名無しさん:2007/10/18(木) 22:46:38
>>345
クソワロタwwwww
348デフォルトの名無しさん:2007/10/18(木) 22:49:42
法的には引用なんて問題ないだろ。
粂井の感情は知らないが。
349デフォルトの名無しさん:2007/10/18(木) 23:24:17
十年前ならいざ知らず、これだけ情報が溢れてる今日にこの文面は寒いよな。
350デフォルトの名無しさん:2007/10/18(木) 23:25:16
WriteFileで書き込んだファイルをReadFileで読み込むと文字化けするんだが、どうすればいいんですか?
351デフォルトの名無しさん:2007/10/18(木) 23:27:54
早く昔のWin32APIスレに戻ってくれないかな・・・
352デフォルトの名無しさん:2007/10/18(木) 23:30:33
>>350
改行とか大丈夫?
353デフォルトの名無しさん:2007/10/18(木) 23:30:53
>>350
fwrite/freadを使う。
354デフォルトの名無しさん:2007/10/18(木) 23:31:39
どうしてこんな事になってしまったのだろうか・・・
355デフォルトの名無しさん:2007/10/18(木) 23:35:00
>>352
改行とかってどういうことですか?
エディットボックスからの保存なのでCR/LF?を\nに変換してるのですが・・・。

>>353
ReadFileを使わないとだめって言われたんですよ;;
356デフォルトの名無しさん:2007/10/18(木) 23:42:57
>>355
君にはReadFileを使う能力がないからfwrite/freadを使わないとだめ。
357デフォルトの名無しさん:2007/10/18(木) 23:54:26
>>355
>エディットボックスからの保存なのでCR/LF?を\nに変換してるのですが・・・。
変換しないで書き込んでみろよ

>>356
おいw

>>349
約十年前の文みたいだから問題ないw
358デフォルトの名無しさん:2007/10/18(木) 23:57:20
>>357
fm。でもエディットといってもアドレス帳みたいのを作ってるんで、できれば保存データには改行されないようにしたいんですよ^^;
もしかして改行のコードを変えているから文字化けするのですか?
359デフォルトの名無しさん:2007/10/19(金) 00:02:25
>>357
文字エンコード?をすればできるのか??
360デフォルトの名無しさん:2007/10/19(金) 00:26:14
 
361デフォルトの名無しさん:2007/10/19(金) 00:27:53
(絶句)
362デフォルトの名無しさん:2007/10/19(金) 00:46:27
>>358
>fm。でもエディットといってもアドレス帳みたいのを作ってるんで、できれば保存データには改行されないようにしたいんですよ^^;
とりあえずやってみろw

あとWriteFileとReadFileの部分のコードを晒せ
363デフォルトの名無しさん:2007/10/19(金) 00:47:48
相手が電波では、さすがに付き合いきれん・・・
364デフォルトの名無しさん:2007/10/19(金) 01:42:09
>>350
文字列全体が化けるわけ?
それとも一部だけ?
365デフォルトの名無しさん:2007/10/19(金) 01:59:20
昔、猫でもわかるのアーカイブ買ったな。
まさかネット常時接続が当たり前になるとは。

まだページ残ってた。
ttp://www.kumei.ne.jp/c_lang/sw.htm
366デフォルトの名無しさん:2007/10/19(金) 02:50:18
変なポインタ書き込んでるんじゃねーの
367デフォルトの名無しさん:2007/10/19(金) 12:41:39
>>345
引用は、法律で認められた権利なので、無断かどうかに関わらず白ですよ。
ダメなのは転載
368デフォルトの名無しさん:2007/10/19(金) 12:45:20
>>367
どうちがうの?
369デフォルトの名無しさん:2007/10/19(金) 12:46:14
引用は本文に対して従の関係となるレベルの利用
転載は本文に対して従の関係を超えた利用
370デフォルトの名無しさん:2007/10/19(金) 12:57:29
引用元を明記してないからどっちにしても>>344はダメだけどね。

ただし、>>344にあるような簡単な注意書きのようなものが著作物の
一部と判断されるかどうかは不明。
371デフォルトの名無しさん:2007/10/19(金) 13:11:56
無駄話だな
372デフォルトの名無しさん:2007/10/19(金) 13:30:06
>>369
その判断はだれがするの
373デフォルトの名無しさん:2007/10/19(金) 13:35:51
行き着くところは裁判所
374デフォルトの名無しさん:2007/10/19(金) 13:39:49
他所でやれ><
375デフォルトの名無しさん:2007/10/19(金) 15:25:39
http://ja.wikipedia.org/wiki/引用
http://www.medbooks.or.jp/forauthor/QUOT-2.html
引用禁止とか、ローカル保存禁止とか、とんでもない規約を書くサイトって多いよね。本当に。
376デフォルトの名無しさん:2007/10/19(金) 15:42:38
法律房って何処にでもいるけど、絶対しつこいんだよな。
377デフォルトの名無しさん:2007/10/19(金) 16:14:30
WIN32APIと関係ない件
378デフォルトの名無しさん:2007/10/19(金) 16:14:40
法律を知っておいて損は無いよ
記憶していなくてもAPIのリファレンスから必要な情報をすぐ引っ張れるように法律も引っ張れるようにしておくといい
プログラムに関係の深い著作権法なんかは特に
379デフォルトの名無しさん:2007/10/19(金) 16:49:50
>>378
スレ違い
380デフォルトの名無しさん:2007/10/19(金) 16:50:54
× スレ違い
○ 板違い
381デフォルトの名無しさん:2007/10/19(金) 17:25:22
法律を知らないとGPLを真に受ける人がたくさん出る
382デフォルトの名無しさん:2007/10/19(金) 19:51:44
>>362
学校にデータがあるので月曜日になってしまいます。。。OTL
とくにデータには文字コードとか指定せずにそのままリストビューから値をもってきて、保存する感じです。
CStringのやつに代入して最後にまとめて保存みたいな感じだったとおもいます。

>>364
英語は大丈夫ですが、日本語が化けます

383デフォルトの名無しさん:2007/10/19(金) 19:53:01
マルチうざい
384デフォルトの名無しさん:2007/10/19(金) 20:00:37
学校の課題なら自分で何とかしろよ
385デフォルトの名無しさん:2007/10/19(金) 20:07:28
>>384
学校の課題ではないです^^;。
386デフォルトの名無しさん:2007/10/19(金) 20:12:06
嘘吐き死ね
387デフォルトの名無しさん:2007/10/19(金) 20:16:43
なんで嘘って分かるんですか?
あ、自分がエスパーだって自信があるんですかw
388デフォルトの名無しさん:2007/10/19(金) 20:18:02
>>386
嘘ではないんですが・・・。宿題だったらできる人にソースうつさせてもらいますよ。
389デフォルトの名無しさん:2007/10/19(金) 20:18:26
自演乙
^^;←これといいアホのくせになめすぎ
390デフォルトの名無しさん:2007/10/19(金) 20:28:45
>>389
てめえそれはZUNに対する冒涜か
391デフォルトの名無しさん:2007/10/19(金) 20:30:23
>>389
顔文字使って何が悪い
392デフォルトの名無しさん:2007/10/19(金) 20:31:05
>>390
住人を冒涜してる分際で何言うてますのん
393デフォルトの名無しさん:2007/10/19(金) 20:32:18
>>391
顔文字使って悪いとは誰も書いてない
もっと頭使えよ
394デフォルトの名無しさん:2007/10/19(金) 20:33:57
いやぁアットホームなスレだなぁ
まるでお前ら思春期の兄弟みたいだ
395デフォルトの名無しさん:2007/10/19(金) 20:41:33
邪魔。顔文字はAA板に東方厨は半虹に帰れ
無駄話するなら黙ってろ
396デフォルトの名無しさん:2007/10/19(金) 20:43:22
>>378
法律にバグが無いと思ってる時点で板杉
397デフォルトの名無しさん:2007/10/19(金) 21:04:38
「法律にバグが無い」って言いたかった事だけはすごく伝わって来た。
398デフォルトの名無しさん:2007/10/19(金) 21:06:19
別に伝わってこないけど
399デフォルトの名無しさん:2007/10/19(金) 21:14:57
うひひ
400デフォルトの名無しさん:2007/10/19(金) 21:19:09
アホが10人住み着いてしまったら、それは嵐ではない。
むしろ出ていけと言う方が嵐なんだろうな。このスレオワタ\(^o^)/
401デフォルトの名無しさん:2007/10/19(金) 21:24:54
自分がアホじゃないとでも?>>400のがオワテル
402デフォルトの名無しさん:2007/10/19(金) 21:25:36
ずいぶん過敏な反応だな。
まともな質問が来るまで暇な奴が馴れ合ってるだけだろ。
403デフォルトの名無しさん:2007/10/19(金) 21:55:30
意外とこの状況を楽しんでる邪道な俺がいる
404デフォルトの名無しさん:2007/10/19(金) 22:14:17
このスレの荒れ具合見てるとWin32APIの終焉が近づいてるのがよく分かる。
405デフォルトの名無しさん:2007/10/19(金) 22:32:04
自然の摂理だ。自分のブログでも書いてろカス
406デフォルトの名無しさん:2007/10/19(金) 22:32:25
おれとしては今は質問ないけど、
他の人が質問・回答してるのをROMってるだけで結構勉強になったんだ
407デフォルトの名無しさん:2007/10/19(金) 22:46:19
結局どんな世界でも自分の視点だけでしか物事を捉えられない
人間は害悪でしかないんだよ
408デフォルトの名無しさん:2007/10/19(金) 22:49:07
>>407
なら死ねよ害悪
409デフォルトの名無しさん:2007/10/19(金) 23:00:53
>>408
ん?自覚があるって捉えていいのかな?
410デフォルトの名無しさん:2007/10/19(金) 23:01:20
>>407
氏ね
411デフォルトの名無しさん:2007/10/19(金) 23:08:01
|ω^)
412デフォルトの名無しさん:2007/10/19(金) 23:18:58
|ω^) <408とか410とか
413デフォルトの名無しさん:2007/10/19(金) 23:21:30
|ω^) <407とか411とか
414デフォルトの名無しさん:2007/10/19(金) 23:23:50
|ω^) <412とか413とか
415デフォルトの名無しさん:2007/10/19(金) 23:26:53
(^ω|ω^)
416デフォルトの名無しさん:2007/10/19(金) 23:32:35
|ω^) <>>408>>410は同一人物で誰にも必要とされてない可燃ゴミ
417デフォルトの名無しさん:2007/10/19(金) 23:34:35
勘弁してくれよ…
418デフォルトの名無しさん:2007/10/19(金) 23:40:29
419デフォルトの名無しさん:2007/10/19(金) 23:41:17
>>416
残念でした
420デフォルトの名無しさん:2007/10/19(金) 23:44:52
>>419
図星突かれて涙目wwwww
421デフォルトの名無しさん:2007/10/19(金) 23:46:14
勘弁してくれよ。他所でやってよ頼むから
422デフォルトの名無しさん:2007/10/19(金) 23:46:26
>>418が確実に>>409>>410であることは分かった
423デフォルトの名無しさん:2007/10/19(金) 23:47:54
>>421
ごめんね
最近イライラすることばっかで気持ちがすさんでたんだ
もうこんな低レベルな人間は相手にしないよ
424デフォルトの名無しさん:2007/10/19(金) 23:48:36
>>420
バカじゃねぇの?w
俺は408,415で410ではない

人間は害悪と言っておきながら他人だけゴミ扱いする>>407は障害者
425デフォルトの名無しさん:2007/10/19(金) 23:49:40
以上、>>407=423の自作自演でした
426デフォルトの名無しさん:2007/10/19(金) 23:50:13
>>421
m9(^Д^)プギャー
427デフォルトの名無しさん:2007/10/19(金) 23:50:18
>>424
改行の位置が招いた悲劇であることはよく分かった
428デフォルトの名無しさん:2007/10/20(土) 00:16:56
EnumやChangeのDisplaySettingを使わないで
フルスクリーンの真似事をしてみようとやってみたのですが
ウィンドウの下部が一定以上下がらなくなるんです

単純にウィンドウ作成時の大きさ指定を
マイナス使って指定してるんですがやっぱりこれはまずいんでしょうか?
429デフォルトの名無しさん:2007/10/20(土) 00:29:13
うん
430デフォルトの名無しさん:2007/10/20(土) 03:22:58
Winformsで作ったウインドウをOpacityプロパティの値を1.0未満にして半透明化すると
ウインドウをぐりぐりドラッグしたときの負荷は下がるのですが
Win32APIのSetLayeredWindowAttributes関数を使ってウインドウを半透明化するとむしろ負荷は上昇しました
半透明化によってオフスクリーン部分を書き換える処理がなくなって負荷は下がると踏んでいたのですが
どういう違いがあるんでしょうか?
431デフォルトの名無しさん:2007/10/20(土) 05:35:00
元から半透明処理は重い
つか重なってる他のウィンドウのDC取得して転送してアルファブレンドなんかしてれば
普通は重くなって当然

UpdateLayeredWindow使うとシステムが極力再描画を抑えてくれるから多少早い
その代わりWM_PAINTとか飛んでこなくなる
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.aspx
432デフォルトの名無しさん:2007/10/20(土) 09:18:31
LayeredWindowってDirectX処理じゃなかった?
433デフォルトの名無しさん:2007/10/20(土) 09:24:21
そんなの気にしてもどうにもならん
434デフォルトの名無しさん:2007/10/20(土) 15:44:01
>>431
回答ありがとうございます
元から重かったんですね、確かに軽くなるなら皆使ってますよね
Winformsが特別なのかな…
>その代わりWM_PAINTとか飛んでこなくなる
試しに使ってみたら見事に重なってる他のウインドウの一部をコピーしてくれました
435デフォルトの名無しさん:2007/10/21(日) 16:40:35
MSDNのオフライン版をインストールしたのですが、
日本語のWin32APIのリファレンスが「日本語の技術文書」という階層に
他の大量の文書と一緒にまとめて放り込まれており、非常に見にくいです。

これはどうにもならないのでしょうか。
436デフォルトの名無しさん:2007/10/21(日) 17:42:55
日本語版が見にくいなら、英語版を見ればいいじゃない。
437デフォルトの名無しさん:2007/10/21(日) 20:07:52
日本語版は情報が古い上に嘘だらけで見るだけ時間の無駄
MSKKの社員って何してるんだろうね
438デフォルトの名無しさん:2007/10/21(日) 20:19:11
>>437
MSDNの日本語版は、MSKKが作成しているわけでありません。
439デフォルトの名無しさん:2007/10/21(日) 20:22:20
何もしないのをやめて作成しろよ
440デフォルトの名無しさん:2007/10/21(日) 20:44:40
Win32APIを翻訳する暇があったら、
C/C++言語の日本語リファレンスを復活させてほしい。
441デフォルトの名無しさん:2007/10/21(日) 21:26:23
サポート技術情報の翻訳もやめちゃったしな。
今の機械翻訳のは、英文よりも読みにくいw
442デフォルトの名無しさん:2007/10/21(日) 21:42:40
>>441
KBは、フィードバック(ページの下の方にある)を入れてください。
フィードバックが多くあったものは、日本語訳になります。
443デフォルトの名無しさん:2007/10/21(日) 21:45:36
KBの日本語訳もアレじゃんよ
444435:2007/10/21(日) 22:27:37
あきらめて英語版を読むのが得策のようですね…
ありがとうございました。
445デフォルトの名無しさん:2007/10/22(月) 00:48:55
start dexplore /helpcol ms-help://MS.TECHART.v10.ja
446デフォルトの名無しさん:2007/10/22(月) 07:33:33
ウィンドウ上にエディットコントロールを配置しているのですが、
全角で入力すると画面が真っ白になって、今まで描画していたものがすべて消えてしまいます。

どうすれば画面が消えずにすみますか?
447デフォルトの名無しさん:2007/10/22(月) 07:44:29
マルチ乙
448デフォルトの名無しさん:2007/10/22(月) 08:08:41
>>446
フォント取ってみろ
449デフォルトの名無しさん:2007/10/22(月) 08:08:48
>>446
お前が消えればおk
450デフォルトの名無しさん:2007/10/22(月) 08:53:49
>>446
フォント設定関連じゃないかな。。
ソース見てみないとなんとも言えないけど。。
451デフォルトの名無しさん:2007/10/22(月) 12:22:21
>>446
マルチ氏ね。
452デフォルトの名無しさん:2007/10/22(月) 14:47:18
最近はwin32API使わないでguiを作ると聞いたのですが、
win32APIをうまくラッピングしたようなライブラリでもあるんでしょうか?

他の板の、自称プロの人が言ってたのですが。。
453デフォルトの名無しさん:2007/10/22(月) 14:58:13
.NETでもJavaでもお好きなのをどうぞ。
454デフォルトの名無しさん:2007/10/22(月) 14:59:04
>>452
win32APIが使えないアホの為にある
455デフォルトの名無しさん:2007/10/22(月) 15:09:15
>>453
C/C++で作れるのが見てみたいので
「Microsoft .NET Framework」というヤツを調べればいいんでしょか。
dです。

>>454
win32APIより早く作りたいものが作れるとしたら、それでいいじゃないですか。
できるかは知りませんが。。
456デフォルトの名無しさん:2007/10/22(月) 19:16:07
MFCがいいお
457デフォルトの名無しさん:2007/10/22(月) 21:45:27
ま、.NETでいいとは思うけどな。
.NETで不満が出てきたらWin32APIを覚えればいいし。
458デフォルトの名無しさん:2007/10/22(月) 22:05:32
何使っても下の方ではAPIの兄貴が頑張ってる事を忘れないでください
459デフォルトの名無しさん:2007/10/22(月) 23:07:20
Vistaで縁の下から追い出す計画はとん挫したからな
460デフォルトの名無しさん:2007/10/22(月) 23:13:41
前に.NETからのネイティブAPIアクセスをサポートするって言ってた気がするんだけど、
未だに.NETからは面倒な手続きを踏まないと呼べない。
手動のメモリ管理から解放されると思って早一年。いまだにC++に縛られております。
461デフォルトの名無しさん:2007/10/22(月) 23:21:24
C++/CLI使えばいいんじゃね
462デフォルトの名無しさん:2007/10/23(火) 16:32:24
質問です。
レジストリみてみると↓のようなキー名がいっぱいあります。

{4D36E96B-E325-11CE-BFC1-08002BE10318}

Win32のサンプルソースでも重複しては困る場合等に指定してるのがたまにみるけど
やっぱ命名規則あるのかな?
463デフォルトの名無しさん:2007/10/23(火) 16:40:42
464デフォルトの名無しさん:2007/10/23(火) 16:41:09
GUID
465デフォルトの名無しさん:2007/10/23(火) 18:25:13
GUIDって確かNICのMACアドレス見てたよな
古いNICとかでMACアドレスが衝突してたらどうなるのかな
466デフォルトの名無しさん:2007/10/23(火) 18:41:14
APIからネットワークアダプタのDHCP有効・無効とか
IPアドレスの手動構成の設定とか変更したいんだけど
どうやったらいいの?
467デフォルトの名無しさん:2007/10/23(火) 19:30:46
>>466
好きにすればいいよ
468462:2007/10/23(火) 19:32:29
>>463-464
dです。
GUIDGENで生成できました。
469デフォルトの名無しさん:2007/10/23(火) 20:21:01
>>466
iphlpapiでググれば解説サイトが見つかる
470デフォルトの名無しさん:2007/10/23(火) 21:31:00 BE:37029877-2BP(6)
質問なんですが、SDKでHWNDウインドウそれぞれについて別々のデータをもたせるため、
HWND変数をキーにデータのポインタを登録・取得できる関数があったと思うんですが、
何でしたでしょうか?
471デフォルトの名無しさん:2007/10/23(火) 21:36:23 BE:54411089-2BP(6)
GetPropでした、自己解決しました。
472デフォルトの名無しさん:2007/10/23(火) 21:38:57
千葉工業大学情報科学部情報工学科3年。
473デフォルトの名無しさん:2007/10/23(火) 23:52:09
CALLBACK ってどういう意味なんですか?
呼び出し規則とかなんですか?

自分でEnumウンタラ関数みたいなのを作ろうとして、壁にぶつかってまったんですが・・
Enumウンタラ関数ってよく自前で用意する関数に処理をさせますよね・・EnumウンタラProcって感じの名前でSDKに
でてますけど(名前は自由に付けてもいいらしいんですが・・)

これと同じようなものをしたいというわけDS。
WEBページ(HTMLファイル)を走査して、ハイパーリンクを見つけるたびに
自作のコールバック関数を呼び出して、何らかの処理をさせる

EnumHyperLinks(szHtmlSrc, EnumLinksProc, 0); //こういう感じで呼び出せる関数を作りたい

で、一応下のような実装にしてみたんですが、

BOOL EnumHyperLinks(LPCTSTR szSrc, BOOL (* lpfn)(LPCTSTR, LPARAM), LPARAM lParam)
{ //szSrcで指定されるソースファイルに含まれるハイパーリンクを引数に、lpfnで指定される
//アプリケーション内で定義されるコールバック関数を呼び出す
//lParamには付加情報を与える(必要ならば)
LPTSTR lpStrPos;
TCHAR szBuffer[MAX_PATH];

lpStrPos = (LPTSTR)szSrc;

while(lpStrPos = StrFromStr(lpStrPos, TEXT("<a href=\""), TEXT("\">"), FALSE, FALSE, szBuffer)) //ここでリンク先のアドレスを取得
lpfn((LPCTSTR)szBuffer, lParam); @
//EnumHyperLinks((LPCTSTR)szBuffer, lParam); A

return TRUE;
}
474デフォルトの名無しさん:2007/10/23(火) 23:53:37
一応ここではこういうコールバック関数(意味がよく分からんけど、そういうらしいので)
BOOL EnumLinksProc(LPCTSTR szLink, LPARAM lParam)
{
MessageBox(NULL, szLink, TEXT("リンク先のアドレス"), MB_OK);
return TRUE;
}

かなり簡略化して書きましたけど、大体こういう感じです。
だけど、なぜか毎回クラッシュしてしまう。
@のところをAにして、EnumHyperLinks(szHtmlSrc, NULL, 0);とやるとうまくいくんだけど、これは普通の
関数呼び出しだよね?
どこがおかしい?
475デフォルトの名無しさん:2007/10/23(火) 23:54:53
スミマセヌ

Aの部分は EnumLinksProc((LPCTSTR)szBuffer, lParam); です。
476デフォルトの名無しさん:2007/10/24(水) 00:11:04
リファレンスでいうところのコールバックは、プログラム制御とは直接関係のないタイミングで、
Windowsの中の人が登録元スレッドに割り込みかけてコールバック関数を実行させる。
関数ポインタと引数はこれだから、あとはよきに計らえ、という感じ。
間違ってたら突っ込みよろしく><

で、CALLBACKはなんかの呼び出し規約のtypedefだった気がする たぶん __stdcall
用語の意味にこだわらない、作り方としてならその実装はごく普通で問題なく思う でも何で落ちるのかはシラネ 
477デフォルトの名無しさん:2007/10/24(水) 00:15:12
#define CALLBACK    __stdcall
478デフォルトの名無しさん:2007/10/24(水) 00:26:21
こういう時は、逆アセで追いかけるのが一番。
479デフォルトの名無しさん:2007/10/24(水) 01:21:56
x64では呼び出し規約が1つだけになったから
呼び出し規約用マクロの使い方がルーズになるかも
480デフォルトの名無しさん:2007/10/24(水) 02:42:47
え?cdecl一本になった?
481デフォルトの名無しさん:2007/10/24(水) 04:28:52
レジスタ
482デフォルトの名無しさん:2007/10/24(水) 13:26:54
MSGraph.Chart(Officeについてくるグラフコンポーネント)をウィンドウに張り付けたいんですが、どうすればいいですか?
MFCのCWnd::CreateContorlをいじってみましたが、うまくいかないです(´・ω・`)
483デフォルトの名無しさん:2007/10/24(水) 14:58:07
>>482
ATL使え
484482:2007/10/24(水) 15:34:48
>>483
ありがとうございます。
だがしかし、ATL使用禁止なんです(´;ω;`)MFCイヤダ…
485デフォルトの名無しさん:2007/10/24(水) 15:41:18
c++は使用禁止が多いね
ライブラリ意味ねえ
大笑い
486デフォルトの名無しさん:2007/10/24(水) 16:04:56
>>482
MFCスレで訊け。
何がどううまくいかないのかも書いておくこと。
487デフォルトの名無しさん:2007/10/24(水) 17:13:19
ATL使用禁止の理由は?
そのうちWin32API禁止とかの心配はしなくていい?
488482:2007/10/24(水) 17:15:04
>>485
゚・(ノД`)ウワーン STLも使いたい。

>>486
(σ_σ)ゞ イエッサー!!
489482:2007/10/24(水) 17:34:18
>>487
使用禁止の理由は謎…
Win32API禁止('A`)
490デフォルトの名無しさん:2007/10/24(水) 17:39:28
.NETベースのアプリだとWin32API禁止ってのも無いことはないけどな
491デフォルトの名無しさん:2007/10/24(水) 17:40:43
MFCスレ逝ったんじゃねぇのかよ
謎々は一人でやってろや
492デフォルトの名無しさん:2007/10/24(水) 20:43:07
>>484
ここのひとがなんとかしてくれるかも
http://pc11.2ch.net/test/read.cgi/tech/1059196520/

493デフォルトの名無しさん:2007/10/24(水) 23:13:40
>>473
もしかして (*lpfn)((LPCTSTR)szBuffer, lParam);
494デフォルトの名無しさん:2007/10/25(木) 01:37:34
どうでもいい質問。
WindowsはUTF-16で文字を扱ってると思いますが、
UTF-16と決まったとき(いつか知りませんが、TextOutW等の関数は95でも使えるらしいので、1994年頃?)は、
サロゲートは考えられていなかった(全ての文字を2バイトにするはずだった)時代ですか?

いつまでUTF-16を使い続けるつもりですか?
495デフォルトの名無しさん:2007/10/25(木) 03:23:45
サロゲートが導入されたのは1996年のUnicode 2.0からですからそれ以前の時代です。
> いつまでUTF-16を使い続けるつもりですか?
マイクロソフトは将来の予定をころころ変えるので現時点で何か言ってたとしても
あまり意味がありません
496デフォルトの名無しさん:2007/10/25(木) 03:54:52
UTF16文字を固定長と扱った際に、サロゲートペアが具体的な問題になる事

・文字をカウントする処理で対応してるかどうかで食い違う
→文字単位からサイズを割り出す時などに文字数 * sizeof(WCHAR)が使えない
→lstrlenWなどは対応してるのか、という疑問
→ワイド文字単位のバッファサイズを返すAPIの値はどう解釈すべきか、という疑問
497デフォルトの名無しさん:2007/10/25(木) 05:00:38
全部UTF-16コードユニット単位
498デフォルトの名無しさん:2007/10/25(木) 06:36:50
Uniscribe使えよ
499デフォルトの名無しさん:2007/10/25(木) 07:26:20
Uniscribeは表示用でlstrlenWとかとは全然問題のレイヤが違う
500デフォルトの名無しさん:2007/10/25(木) 07:39:39
つーかlstrlenWがサロゲートペアなんか考慮してたら正確なバッファ長が分からなくなるじゃん
そういう目的なら最初から.netでも使えばいいと思うが・・・?
501デフォルトの名無しさん:2007/10/25(木) 09:16:24
はよUTF-32にしろ>>MS

>>500
APIスレで.NETとか言い出すなw
502デフォルトの名無しさん:2007/10/25(木) 11:35:03
APIスレの.NETの抽出件数15件
503デフォルトの名無しさん:2007/10/25(木) 12:09:39
1文字に64bitぐらい使えよ。
504デフォルトの名無しさん:2007/10/25(木) 13:19:25
宇宙言語が出てきても大丈夫そうだなwwwww
505デフォルトの名無しさん:2007/10/25(木) 14:17:32
宇宙をなめるな
506デフォルトの名無しさん:2007/10/25(木) 15:22:57
.NET時代にWin32APIを勉強しようとしてる奴ってある意味珍獣だよな
507デフォルトの名無しさん:2007/10/25(木) 15:25:49
お、変なのが紛れ込んできた。
508デフォルトの名無しさん:2007/10/25(木) 16:25:15
何を使うかは用途を決めた上で決定すべきなのに、
目的を明示しないで特定の技術のみを使うのが当たり前とか考える奴って本当に視野が狭いな。
509デフォルトの名無しさん:2007/10/25(木) 20:00:19
適材適所だろ。
510デフォルトの名無しさん:2007/10/25(木) 20:01:20
用途にマッチしたものってなかなかないよな
どれもこれも中途半端
まだまだ石器時代だよ
511デフォルトの名無しさん:2007/10/25(木) 21:55:02
>>510
原始人乙w
512デフォルトの名無しさん:2007/10/25(木) 22:12:45
おい、こっちにナウマンゾウがいたぞー!!
513デフォルトの名無しさん:2007/10/25(木) 22:26:58
つまらんよ
514デフォルトの名無しさん:2007/10/25(木) 22:37:37
正直、コードユニット単位なんて初めて聞いて勉強になった奴挙手

515デフォルトの名無しさん:2007/10/25(木) 22:57:05
(´・ω・`)
516デフォルトの名無しさん:2007/10/25(木) 23:19:40
(´・ω・`)
517デフォルトの名無しさん:2007/10/25(木) 23:24:50
( ゚,_ゝ゚)プッ
518デフォルトの名無しさん:2007/10/25(木) 23:25:00
コラコラ、おれだけかよ
519デフォルトの名無しさん:2007/10/25(木) 23:27:40
帰れ、来るのが早すぎた
520デフォルトの名無しさん:2007/10/26(金) 00:23:38
ヒープメモリ上に、BMPファイルのデータ全体があるとします。
このデータの先頭ポインタLPVOID bmpとバイト数が分かっているとき、
ビットマップハンドルHBITMAPを得るにはどうすればよいでしょうか。
521デフォルトの名無しさん:2007/10/26(金) 00:49:43
CreateDIBitmapとか
522デフォルトの名無しさん:2007/10/26(金) 00:50:43
CreateDIBSection
523デフォルトの名無しさん:2007/10/26(金) 01:05:08
>>521-522
ありがとうございます。さっそく試してみます。
524デフォルトの名無しさん:2007/10/26(金) 23:18:00
フォントの色とサイズを変えるのってどうやるんだっけ?
いちいちCreateFont関数呼び出さなきゃならんかった?
℃忘れした
525デフォルトの名無しさん:2007/10/26(金) 23:32:18
色は SetTextColor サイズはいちいちフォント作り直さなきゃだめかと
526デフォルトの名無しさん:2007/10/26(金) 23:41:22
SetTextColorでうまくいきました。 ありがとう。
でもPenみたいに、背景とのマッチング属性とかの変更はできないのか?
サイズ変更なんかも結局自分で別に関数でも作っておいたほうがいいかな
527デフォルトの名無しさん:2007/10/26(金) 23:47:43
背景のマッチング属性ってよくわからんが SetBkMode のこと?
528デフォルトの名無しさん:2007/10/27(土) 00:06:25
うーん、じゃなくって
背景が黒だったらペンは白くなって、背景が白かったら黒くなる とか
正確にどういうのかわからないけど SetROP2(hdc, R2_NOT) こういう感じの
529デフォルトの名無しさん:2007/10/27(土) 00:11:21
そういうのはなかった気がする
いったんメモリビットマップに書いて、BitBlt するしかないんじゃないかな
530デフォルトの名無しさん:2007/10/27(土) 00:14:31
>>528
縁取りするのがいいんじゃないかな
色変えて何度か書けばいい
531デフォルトの名無しさん:2007/10/27(土) 00:24:59
BitBltや縁取りがどう関係するのかよくわからん
532デフォルトの名無しさん:2007/10/27(土) 00:31:47
>>531
>>528 じゃないので推測
風景写真の上に細いフォントで字を書きたい
だが、暗い部分に黒で描画しても字が読めない

バックの色の反転した色で文字を書けば解決じゃね?(灰色の時困るが)
縁取りすれば、関係無くね?

ってことだとおも
533デフォルトの名無しさん:2007/10/27(土) 00:59:24
縁取りって字体に?
そんなことできるの?
太い白字の上に細い黒字?
俺にはようわからん
534デフォルトの名無しさん:2007/10/27(土) 02:23:31
>>528
Invert普通にやる方法があったと思うが重い打線。
グーグル先生が知っているんでね?
535デフォルトの名無しさん:2007/10/27(土) 05:16:43
GetMessageTimeで取得したミリ秒形式の時間を、普通の形式 (hh:mm:ss.mmとか) にするにはどうしたらいいすか?
536デフォルトの名無しさん:2007/10/27(土) 06:20:24
ググレ
537デフォルトの名無しさん:2007/10/27(土) 06:21:30
ククレ
538デフォルトの名無しさん:2007/10/27(土) 06:57:27
カレー
539デフォルトの名無しさん:2007/10/27(土) 09:49:50
>>535
普通に計算するしかないような

printf("%04u:%02u:%02u",t/(3600000),(t/(60000)) % 60,(t/1000) % 60)
540デフォルトの名無しさん:2007/10/27(土) 10:08:01
>>535
StrFromTimeInterval
541デフォルトの名無しさん:2007/10/27(土) 14:34:10
>>535
Boost
542デフォルトの名無しさん:2007/10/27(土) 20:39:18
>>506
Borland Delphiみたいにネイティブバイナリ作れないのが残念でならない
543デフォルトの名無しさん:2007/10/27(土) 20:42:41
>>539, >>540
なるほど、ありがとうございます。
StrFromTimeInterval こんな関数知らなかったです。

でも俺のやりたいのは、GetMessageTimeで取得した時間は
UTCっていうのかな?現在のローカル時間(システム時間でもいいけど)なんですよね。
544デフォルトの名無しさん:2007/10/27(土) 20:49:19
>>543
大丈夫か?
545デフォルトの名無しさん:2007/10/27(土) 20:54:30
時間と時刻の概念もわからんのか
546デフォルトの名無しさん:2007/10/27(土) 21:28:01
>>544-545
GetMessageTimeがシステム起動後の経過時間だから、
システム起動時刻+GetMessageTimeの値=GetMessageTimeの時刻
を取得したいって事じゃね?

システム起動時刻ならGetLocalTimeの値-GetTickCountの値、でどうにかなると思うが。
547デフォルトの名無しさん:2007/10/28(日) 04:00:20
JpegとBMP(DIB)の中のピクセルビットって、RGBの順でカラー値が含まれてるのではないの?
赤と青を入れ替えてるコードがググッたら出てきた
548デフォルトの名無しさん:2007/10/28(日) 04:12:22
bitmap については BITMAPV4HEADER を調べてみよう
549デフォルトの名無しさん:2007/10/28(日) 04:44:02
COLORREFとDIBじゃRGBの並びが逆なんだよな
なんでMSはこんな仕様にしたのかね
550デフォルトの名無しさん:2007/10/28(日) 06:10:54
エンディアンの問題でなくて?
struct rgb888 { BYTE B, G, R; }; みたいな
551デフォルトの名無しさん:2007/10/28(日) 06:17:13
結局32ビットビットマップの4バイト目って何に使うのが標準なんだ?
それとも0埋めが標準なのか?
552デフォルトの名無しさん:2007/10/28(日) 06:38:55
αでしょ
553デフォルトの名無しさん:2007/10/28(日) 06:50:47
>>551
標準では「使用されない」(The high byte in each DWORD is not used.)
従って、不定値が入っていると考える必要がある。
32-bitビットマップで抜き色転送を行う場合、ここにゴミが入っていると鬱なので注意
ただし、BITMAPV4HEADER/V5HEADERにはbVxAlphaMaskメンバがあるので、
ゼロクリアする前にこの値を見てαチャンネルかどうかをチェックした方が無難。
554デフォルトの名無しさん:2007/10/28(日) 07:58:08
boost: :timeduration でいいとおもうよ
555547だが:2007/10/28(日) 08:01:53
DIB→JPEGの変換(IJGのライブラリ使ってる)にもう二日かかりっきりだったが
結局わからんかった(涙
最後のピクセルビット読み込みでクラッシュしてるんだが、いろいろネットで調べてみたら
RGBの並びを入れ替えてるようなところが見つかった
DIBやBitmapの処理は基本的に問題ないんだが、Jpegからどうやっても変換できん
556デフォルトの名無しさん:2007/10/28(日) 08:13:02
(;゚;ж;゚; )ブッ
557デフォルトの名無しさん:2007/10/28(日) 12:31:54
ださ
558デフォルトの名無しさん:2007/10/28(日) 12:33:10
GDI+使えよ
559547だが:2007/10/28(日) 23:59:31
わからないなら書き込まないでくれ
560デフォルトの名無しさん:2007/10/29(月) 00:01:29
>>559
わからないなら書き込まないでくれ
561デフォルトの名無しさん:2007/10/29(月) 00:02:25
IJGはWin32APIじゃねーよ
お前こそ他に行ってくれ
562デフォルトの名無しさん:2007/10/29(月) 00:11:20
ソースもドキュメントも読めないヘタレは、OleLoadPictureでも使っとけ。
563デフォルトの名無しさん:2007/10/29(月) 00:22:38
だからGDI+使えと(ry
564547だが:2007/10/29(月) 01:16:04
>>559は俺じゃないぞ

>>561 いやスマン
でも余所のライブラリの使いづらさをみると、win32apiがよくできてるなぁって思うんだよな
実にわかりやすい
実に簡便


OleLoadPictureとかGDI+ってc++だろ
565デフォルトの名無しさん:2007/10/29(月) 01:28:32
GDI+はPlatformSDKだからこのスレの範疇
566デフォルトの名無しさん:2007/10/29(月) 03:48:49
VC++6.0では使えない
567デフォルトの名無しさん:2007/10/29(月) 06:39:02
ファイルマッピングの高速さに惚れたんですが、
大きいファイルをランダムアクセスするとメモリ使用量が酷い事になってしまいます。
ファイルマッピング使用時にプロセスが消費するメモリ量を抑える方法があったら教えてください。
568デフォルトの名無しさん:2007/10/29(月) 06:58:12
マップ/アンマップを繰り返せば?
569デフォルトの名無しさん:2007/10/29(月) 07:30:21
>>564
Cでも使えるようになっているぞ。両方とも。
>>566
PlatformSDK入れずに使えないって論外だろ。
MSもVC6対応最終版のSDK提供し続けているのに。
570デフォルトの名無しさん:2007/10/29(月) 08:17:32
>>567
姑息な手段だが最小化しまくる
571デフォルトの名無しさん:2007/10/29(月) 10:49:31
>>566
今時PlatformSDKを更新してない奴ってダイアルアップ接続なのか?
572デフォルトの名無しさん:2007/10/29(月) 11:08:28
ダイヤルならWindowsSDKをネカフェで焼いてくれば良いような
ISO配布だし
573デフォルトの名無しさん:2007/10/29(月) 11:35:43
ダイアナならWindowsSDKをネスカフェで焼いてくれば良いような
USO配布だし
574デフォルトの名無しさん:2007/10/29(月) 11:42:52
18/100
575デフォルトの名無しさん:2007/10/29(月) 11:56:24
9/50
576デフォルトの名無しさん:2007/10/29(月) 13:09:44
>>573
800?
577デフォルトの名無しさん:2007/10/29(月) 13:16:34
CreateFileMappingを使ったプロセス間共有メモリに対して、
Read/Write lockパターンを実装しようとしている。

Write側は単一ロックなのでMutexの所有で簡単なのだが、
Read側が難しい。(何スレッドでも同時アクセスできるが、Write前には全て
閉じているのを待つ)

プロセスが強制終了したときに困るので、自前で参照カウンタを用意して
インクリ・デクリという風にはしたくない。

なんか良い方法ないかね?
578デフォルトの名無しさん:2007/10/29(月) 13:25:28
Read側でMutex作ってWrite側でWaitSingleObjectでも使えよ
579デフォルトの名無しさん:2007/10/29(月) 13:35:42
それじゃRead側が一つしか入れないんじゃね?
580577:2007/10/29(月) 13:37:05
Readは4つでも5つでも同時に走る。
(干渉しないから)

このとき、仮にMutexを5つ開いたとすると、開いたMutexのリストを管理して、
全部に対してWaitForMultipleObjectsを実行する必要がある。

まあ、これで一応できるんだけども、Mutexのリストを管理するのがすごい面倒そうなので
もっと楽な方法ないかなと。

Mutexのリストを管理するには、
1. HANDLEはプロセスを超えられないので、自動命名した名前を保存する必要がある。
2. 保存先も当然SharedMemoryにする必要がある。
3. じゃあそのSharedMemoryも排他しなきゃ
4. 遅くね?Read/Writeパターンの意味なくね?
581デフォルトの名無しさん:2007/10/29(月) 13:41:12
Read側はMutexオブジェクト作るだけで所有しないで
Write側はCreateMutex→GetLastError=ERROR_ALREADY_EXISTSのループで待ってれば
582デフォルトの名無しさん:2007/10/29(月) 13:44:44
それじゃ同期じゃねーだろヴォケ
583デフォルトの名無しさん:2007/10/29(月) 13:49:22
Read側を有限にしてしまえwww
584577:2007/10/29(月) 13:52:30
>>581

それは考えた。結構いいアイデアと思ったんだけど、
Writeが3つ4つ重なったときに、Write自身のCreateMutexが一瞬Mutexを生成するので
ぶつかって効率悪く、下手すりゃデッドロックになりかねないなあと思って。
585デフォルトの名無しさん:2007/10/29(月) 13:53:36
悩ましいな
586577:2007/10/29(月) 13:54:27
>>583
Readは10個!とか決めてしまって、命名規則を明確にした上で
10個のMutexを作れば確かに解決するね。

いまのところ一番現実的だなあ。
587デフォルトの名無しさん:2007/10/29(月) 14:08:00
これAdvancedWindowsで読んだような気が
588デフォルトの名無しさん:2007/10/29(月) 14:31:26
>>551>>553

32bit BI_RGBの4バイト目はXPあたりからアルファを格納するのが仕様になってる模様。
DIBセクション化してUpdateLayeredWindowやIThumbnailProviderあたりでアルファ使える。
589588:2007/10/29(月) 14:33:18
>>588に捕捉だが、単にアルファ値だけ入れても正確な半透明にならない。
あらかじめアルファ値とRGB値を計算した結果をRGBAで入れる必要がある。
解りやすく計算するなら白(255,255,255)と合成した結果のRGBを入れておけばいい。
590577:2007/10/29(月) 14:55:36
よく考えたら、普通にMutexの所有で排他制御するのでも、
「所有可能か確認はするけど所有はしない」ってのは出来ないじゃん。
(WatForSingleObject以外に確認手段が無い)
一瞬でReleaseすればほとんどコストかからないと思っていいのかなー
591デフォルトの名無しさん:2007/10/29(月) 15:44:03
>>590
>「所有可能か確認はするけど所有はしない」ってのは出来ないじゃん。

こんなの論理的に不可能。
「所有可能だった(現在は不明)か確認するけど所有はしない」ならともかく。
592デフォルトの名無しさん:2007/10/29(月) 16:33:33
>>591
意味不明
593デフォルトの名無しさん:2007/10/29(月) 17:10:47
>>577
構造を作り直したほうがいいと思う。
594デフォルトの名無しさん:2007/10/29(月) 18:09:40
>>592
排他制御を基礎から勉強し直しなさい
595577:2007/10/29(月) 20:47:46
>>591
>>594

Mutexには「誰にも所有されていない状態」がある。
誰かに所有されてるか、誰にも所有されてないかを調べるのに、所有権が必要か?
596デフォルトの名無しさん:2007/10/29(月) 22:49:24
>>595
「所有されていなかった」という過去のことしかわからないよね。
597デフォルトの名無しさん:2007/10/29(月) 23:01:09
今誰が持ってるかはカーネルオブジェクトのフィルタドライバでも書かんと分からんよ
598デフォルトの名無しさん:2007/10/29(月) 23:09:38
そういうことじゃない。
「今所有されていない」というの概念自体が無意味だって話。
その今ってのは調べるためのAPI(←そういうのがあったとして)が実行された
時点の一瞬の話であって、何時まで続くかもわからないから。

APIから戻って来たときにはもう誰かが所有してるかもしれない。
他の排他オブジェクトで排他して調べれば話は別だけど。
599デフォルトの名無しさん:2007/10/29(月) 23:17:19
もうデータベース用のサーバープログラム作ったらw
600デフォルトの名無しさん:2007/10/29(月) 23:38:04
>>577
> プロセスが強制終了したときに困るので、自前で参照カウンタを用意して

MutexをReleaseしないでプロセス終了しても、自動的に排他は解除される。
で、WaitFor〜はWAIT_ABANDONEDを返す。
601デフォルトの名無しさん:2007/10/30(火) 00:19:09
色々考えていたら、何だかもう好きなように実装してくれって思えてきた。
汎用的に解決する問題ではない気がする。
602デフォルトの名無しさん:2007/10/30(火) 00:32:25
Semaphoreじゃダメなの?
603デフォルトの名無しさん:2007/10/30(火) 09:36:01
>>602
駄目
604577:2007/10/30(火) 10:38:13
>>598
>他の排他オブジェクトで排他して調べれば話は別だけど。

Read/Writeロックパターンの話をしているので、そういう状態になる。
まず、Writeロックのクリティカルセクションに入る。
この瞬間から、Readアクセスが新規に発生することは無くなる。
その上で、既に走っているReadアクセスが全て開放されるのを待つ必要がある。

ん? >>581 でいけるじゃん?おかしいなあ、昨日あんなに考えたのに。

>>600
それはもちろん知っていて、その性質を使おうという話です。
セマフォはカウンタ値なので、うまくすればいけるかもと思ったが、
プロセスが強制終了したときにOSが自動的に値を元に戻したりしてくれないのなら
自前で共有メモリ上にカウンタを持つのと同じで、今回は使えない。
605581:2007/10/30(火) 10:52:11
Write側もループで待機する直前にMutexとWaitSingleで同期しておけば問題ないはず
606605:2007/10/30(火) 10:54:59
訂正
Write側もループで待機する直前にMutexとWaitSingleで同期しておけば>>581で問題ないはず
Write待機ループに入るスレッドを一つに絞ればいいんだから

>>604
セマフォも強制終了で参照が無くなったら勝手にカウンタが増えます
607デフォルトの名無しさん:2007/10/30(火) 10:57:40
髪も増えればいいのにね
608577:2007/10/30(火) 11:10:47
>>606
そうなのか、知らなかった、dクス。

UNIX向けのコードで、セマフォを最大まで所有することでWriteロックを表現するのが
あった。
p_semaphore += SEMAPHORE_MAX;
みたいな感じだった。
Win32のセマフォも、1つのスレッドが複数所有するってできるのかな。
しかしシグナル状態の向きが逆なのでやはり使えないorz
609577:2007/10/30(火) 11:11:30
>>608
最後の一行は消し忘れ。読まないように。
610デフォルトの名無しさん:2007/10/30(火) 12:43:38
子ウィンドウを2つ横に並べた分割ウィンドウを作っているのですが
MoveWindow()後の描画領域が
CreateWindow()で設定したものから変わらなくて困っています

リージョンとかMINMAXINFOとかも試したみたのですがどうもだめで
取り合えず子ウィンドウ全部廃棄して作り直そうとしている所なんですが
もっといい方法は無いんでしょうか?
611デフォルトの名無しさん:2007/10/30(火) 12:47:44
自分でおかしなプログラムを書いているだけ。
たった一つあるいい方法は、おかしな書き方をやめることだ。
612デフォルトの名無しさん:2007/10/30(火) 12:54:00
訳文みたいな文章乙
613デフォルトの名無しさん:2007/10/30(火) 13:11:39
そもそも「描画領域」が何を意味しているのか不明
client areaかupdate regionかその他か
614デフォルトの名無しさん:2007/10/30(火) 13:11:59
>>611
ジェイムズ・ティプトリー・ジュニア乙。
615デフォルトの名無しさん:2007/10/30(火) 13:15:16
>>610
漏れが無料で日本語に訳してやる。

 MoveWindow で子ウィンドウのサイズと位置を変更したのですが、
 再描画される領域がCreateWindowで指定したものから変更されていないようです。
 取り合えず子ウィンドウ全部廃棄して作り直そうとしている所なんですが
 もっといい方法は無いんでしょうか?

答えは

 もっと良い方法がある。正しい引数を渡して MoveWindow を使え、だ。
616デフォルトの名無しさん:2007/10/30(火) 13:19:49
only one of the best solution is to give up your crazy programming
617612:2007/10/30(火) 13:21:32
俺のせいだな。すまんorz
618デフォルトの名無しさん:2007/10/30(火) 13:23:10
InvalidateRectすればいいんじゃねーの?
619デフォルトの名無しさん:2007/10/30(火) 13:51:40
説明不足な上に文章変で申し訳無い

MoveWindow()での子ウィンドウのサイズ変更自体は上手くいっていて
上手くいかないのはその子ウィンドウのクライアントの描画です
子ウィンドウが大きくなってもクライアントの描画領域自体は変わらなくて
(Eidtで作ってます)途中で文字が切れるんです
InvalidateRect()もしてみましたが結果は一緒でした

もう一度よく見直してみます
620デフォルトの名無しさん:2007/10/30(火) 14:04:06
>>619
全てのコントロールは子ウインドウですよ
あなたの言う子ウインドウがダイアログだとしたら、その中のEDITコントロール等は、ダイアログの枠の大きさを変えても勝手に移動したりはしません
ダイアログ内の各コントロールも移動したい場合は、GetDlgItemで各コントロールのHWNDを取得しそれぞれをMoveWindow()で移動させる必要があります
621610:2007/10/30(火) 16:27:59
長時間悩んでやっと分かった答えが

WM_SIZEの最後をbreak;じゃなくreturn 0;にしてた

っていうことでした
622デフォルトの名無しさん:2007/10/30(火) 16:57:50
つまり質問をした次のレスが回答だったわけだ
623デフォルトの名無しさん:2007/10/30(火) 23:45:51
プログラム中からDOSアプリケーションを実行するAPIが
あったら教えてください。引数(ファイル名)を与えてDOSアプリ
を実行し、実行が終わるまで待ちます。そのDOSアプリは
ファイルを処理して別のファイルを作成するフィルタです。
DOSアプリが終了したら、プログラムは作成されたファイル
を読み込んで使います。

今はC標準関数の system関数を使っているのですが、この方法
だとDOS窓が表示されてしまうので使いたくないのです。代わり
の方法を教えてください。
624デフォルトの名無しさん:2007/10/31(水) 00:19:51
>>623
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( STARTUPINFO ));
si.cb = sizeof( STARTUPINFO );
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
if (CreateProcess( NULL,lpCommandLine, // コマンドライン文字列
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
// スレッドハンドルは使わないので即座に開放
CloseHandle(pi.hThread);
// 起動したプロセスの終了を待つ
WaitForSingleObject( pi.hProcess, INFINITE );
// プロセスハンドルを開放
CloseHandle(pi.hProcess);
}
625デフォルトの名無しさん:2007/10/31(水) 00:55:34
si.wShowWindow = SW_HIDE;
じゃね?
626デフォルトの名無しさん:2007/10/31(水) 05:21:34
そういえばDOSアプリって使ったことないかも、、
edit.exeとかそれっぽいけど、よくわからんね
627デフォルトの名無しさん:2007/10/31(水) 08:18:43
>>607
切実だな
628デフォルトの名無しさん:2007/10/31(水) 09:51:52
>>626
cmdくらいなら使ったことあんじゃね
629デフォルトの名無しさん:2007/10/31(水) 10:27:13
俺はqbasicまでだな。
630デフォルトの名無しさん:2007/10/31(水) 10:36:04
>>628
cmdはDOSアプリじゃない。
勘違いも甚だしい。
631デフォルトの名無しさん:2007/10/31(水) 10:47:19
ipconfig.exeとか
632デフォルトの名無しさん:2007/10/31(水) 10:55:20
WindowsのコンソールアプリとDOSアプリを混同する奴ってどれだけ馬鹿なの?
633デフォルトの名無しさん:2007/10/31(水) 10:56:53
そこで>>632が華麗に解説。
634デフォルトの名無しさん:2007/10/31(水) 10:58:04
DOSアプリ != コンソールアプリケーション
だよね?

DOSアプリ ≒ 16bitアプリケーション
じゃないの?
635デフォルトの名無しさん:2007/10/31(水) 10:59:33
>>633
Win32APIって知ってる?
636デフォルトの名無しさん:2007/10/31(水) 11:03:57
>>623の言ってるDOSアプリはコンソールアプリで合ってるんじゃね
637デフォルトの名無しさん:2007/10/31(水) 11:07:02
通じるんだからいいじゃんとは思う

厳密に違いを要求するってのは未だにDOS環境使ってるから?
638デフォルトの名無しさん:2007/10/31(水) 11:08:56
通じてないだろ?
厳密も何も別物だろ?
639デフォルトの名無しさん:2007/10/31(水) 11:09:24
文意を汲めなかっただけだろ。いちいち煽んな。
640デフォルトの名無しさん:2007/10/31(水) 11:11:22
>>638
>>623の言ってるのはコンソールアプリの話だろ…
あの内容でオメーはDOSアプリだと解釈するのか?
641デフォルトの名無しさん:2007/10/31(水) 11:12:01
煽んなっつってんだろがボケが。
642デフォルトの名無しさん:2007/10/31(水) 11:14:19
当人いないのに何やってんだお前ら

          ドッカン
         ,、、  ドッカン
  ━━━━━) )=          ☆ゴガギーン
      ∧_∧ | |          /         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____     ∧_∧   <  おらっ!出てこいや>>623
     r ⌒ ̄ ノ  __.  |    (`∀´ )    \
     |   イ   |__|   |    /     \      ___________
     |    | |          .|    | |   /\\
     |    | |         .|  へ//|  |   | |
     |    | |       (\/,へ \|  |  | |
     | ∧ | |      ◎\/  \  / ( )
      | | | |.|          .|     | |
      / / / / |          .|     | |
    / / / /.| |三三三|  |     | |
    / / / /...|       |    ||
643デフォルトの名無しさん:2007/10/31(水) 11:14:40
ここまでな。このネタ終了な。

後はVIPでやれ。
644デフォルトの名無しさん:2007/10/31(水) 11:14:47
仮想DOSを呼び出したいってことかもしれないだろうが
無知が
645デフォルトの名無しさん:2007/10/31(水) 11:17:12
また荒れちゃうのか
646デフォルトの名無しさん:2007/10/31(水) 11:36:27
>>640
「喉かわいたからみじゅくれ!」と言われたら「水のことだな」と解釈するけど、
だからってそれを一般化して通じるんだから「みじゅ」でいいじゃんとは思わないな。
647デフォルトの名無しさん:2007/10/31(水) 11:41:24
間違いを指摘されたら感謝してしかるべきだろう。
言い訳するなどもってのほか。
648デフォルトの名無しさん:2007/10/31(水) 11:42:24
>>628
cmd.exeはDOSアプリじゃないよ。
# どっちかというとcommand.comの方
649デフォルトの名無しさん:2007/10/31(水) 11:47:19
9割方の人は分かってるからもう引っ張らないでいいよ
650デフォルトの名無しさん:2007/10/31(水) 12:03:50
じゃあ、俺は634に突っ込もう。

>>634
16bitウィンドウズアプリケーションも、32bitDOSアプリケーションもある。
651デフォルトの名無しさん:2007/10/31(水) 12:19:18
VisualStudioの"コンソールアプリケーション"選んで作ってるのがコンソールアプリで
LSICで作ってるのがDOSアプリだと思ってた
652デフォルトの名無しさん:2007/10/31(水) 12:50:50
32bitの「DOS」アプリってPEフォーマット使ってるの?
653デフォルトの名無しさん:2007/10/31(水) 12:57:16
>>623が言ってるのは16bitのDOSアプリだと思うが
32bitのコンソールアプリならわざわざ一時ファイル作らなくてもパイプをstdoutにすれば出力取り込めるし
654デフォルトの名無しさん:2007/10/31(水) 13:04:28
cmd.exeは
This program cannot be run in DOS mode.
と表示するDOSアプリです
655デフォルトの名無しさん:2007/10/31(水) 13:08:26
ごもっとも。
656デフォルトの名無しさん:2007/10/31(水) 13:10:51
DOSアプリだとXP x64で動かないだろうから区別した方がいい
657デフォルトの名無しさん:2007/10/31(水) 13:15:03
間違いを指摘されたら屁理屈こねる馬鹿がいるのはこのスレですか?
658デフォルトの名無しさん:2007/10/31(水) 13:30:48
侵略に脅かされ続けた国の人々は自分の非を認めない国民性を持ちます。
間違いを認めずに屁理屈をこね続けるのは、虐めにあったトラウマがある証拠なので、
暖かく接してあげてください。
659デフォルトの名無しさん:2007/10/31(水) 13:38:39
フランスの事か
660デフォルトの名無しさん:2007/10/31(水) 13:44:36
>>657
間違いを指摘されたら屁理屈だと言い張る馬鹿はいるかも
661デフォルトの名無しさん:2007/10/31(水) 13:48:14
>侵略に脅かされ続けた国の人々は自分の非を認めない国民性を持ちます。
それじゃ、南朝鮮の国は該当しないわけですね。
662デフォルトの名無しさん:2007/10/31(水) 13:51:15
>>660
上げるなカス
663デフォルトの名無しさん:2007/10/31(水) 13:53:58
>>661
歴史の勉強が足りない
664デフォルトの名無しさん:2007/10/31(水) 13:56:43
>>661
朝鮮戦争を内戦と考えると建国後に侵略を受けた事は無いかもね
逆に日本の竹島を武力侵攻したけど
665デフォルトの名無しさん:2007/10/31(水) 13:57:38
>>663
南朝鮮の国が、「侵略に脅かされ続けた」史実はどこですか?
666デフォルトの名無しさん:2007/10/31(水) 13:57:39
お前ら邪魔。
667デフォルトの名無しさん:2007/10/31(水) 14:00:50
DOSアプリかどうかは、エクスプローラを開いて種類のところを見れば書いてあるだろ。
ここまで明確なのにいつまでも屁理屈をこねる奴って、失敗から何も学ばないんだろうね。
668デフォルトの名無しさん:2007/10/31(水) 14:03:18
スレチだから他でやれって言ってるんだが

そこら辺を学んでくれると非常に助かる
669デフォルトの名無しさん:2007/10/31(水) 14:04:52
>>667
DOSアプリとコンソールを含むWINDOWSアプリはたがいに排他なものではなく
バイモーダルバイナリも作成可能なのでその認識は間違い
670デフォルトの名無しさん:2007/10/31(水) 14:06:29
移動先

スレ立てるまでもない質問はここで 86匹目
http://pc11.2ch.net/test/read.cgi/tech/1193556424/
671デフォルトの名無しさん:2007/10/31(水) 14:06:43
少しぐらい脱線しても勉強になる話なら賛成。
672デフォルトの名無しさん:2007/10/31(水) 14:07:32
>>668
m9(^Д^)プギャー
673デフォルトの名無しさん:2007/10/31(水) 14:09:03
>>671
あげんなカス
674デフォルトの名無しさん:2007/10/31(水) 14:10:16
>>671
今になってDOSプログラムを作る必要性がわからん
どう考えてもトリビアの世界だろ
675デフォルトの名無しさん:2007/10/31(水) 14:11:19
>>669
よしうpれ
676デフォルトの名無しさん:2007/10/31(水) 14:11:31
>>673
指図するな。
677デフォルトの名無しさん:2007/10/31(水) 14:12:49
お前ら邪魔ー。
678デフォルトの名無しさん:2007/10/31(水) 14:12:57
>>676
「指図するな。」と指図するな
679デフォルトの名無しさん:2007/10/31(水) 14:13:41
UZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
680デフォルトの名無しさん:2007/10/31(水) 14:15:04
    __ _________
      r | |――┐  r――  ヽ    すいません、ちょっと轢きますよ・・・
      L.! !__./⌒ヽ Li__   \
       ._| | / ´_ゝ`) ||____    \_              (~ヽ       .. .
     (_| | |   /⊃⌒ヽ i     \)         /⌒ヾ .\\_   :・:∵:
        \ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄"''' - ..,,  人 /⌒ヾ / \\ヽ∴: >>○○○
      _  \_/⌒ヽ________/⌒ヽ  て   / ノテ-ヽ( 。Д。)二二つ
        ヽ      _ノ r―――─―――┐ _ノ ドカッ/ / /   ∨ ̄∨
         |  ____| 三三三三三三三.|__l__    / / | |
      | ._|--[_______________] / __) ノ )
     ノ.|  |    ===========[___]======='   ー'    し'
   ヽ_ノ_ノ               ヽ__ノ_ノ
681デフォルトの名無しさん:2007/10/31(水) 14:18:35
>>680
こんなバカこそ要らんだろう常識的に考えて。
682デフォルトの名無しさん:2007/10/31(水) 14:21:22
スレチはスレチだ。続けるならスレ荒らし以外のなんでもない。
683デフォルトの名無しさん:2007/10/31(水) 14:21:56
>>676
真似するな。
684デフォルトの名無しさん:2007/10/31(水) 14:24:29
>>681
お前の方がもっとバカだから要らないんだぜ?常識的に考えて。
685デフォルトの名無しさん:2007/10/31(水) 14:33:00
>>684
非常識な厨房だ。
686デフォルトの名無しさん:2007/10/31(水) 14:34:00
UZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
687デフォルトの名無しさん:2007/10/31(水) 14:34:07
>>685
非常識な厨房だ。
688デフォルトの名無しさん:2007/10/31(水) 14:34:39
ってか誰とは言わんがこれは釣りじゃねーのか?
しばらく放置しとけば居なくなると思うぞ
689デフォルトの名無しさん:2007/10/31(水) 14:35:25
↑ここまで自演でした

↓はい次
690デフォルトの名無しさん:2007/10/31(水) 14:36:10
626 :デフォルトの名無しさん :sage :2007/10/31(水) 05:21:34
  そういえばDOSアプリって使ったことないかも、、
  edit.exeとかそれっぽいけど、よくわからんね

628 :デフォルトの名無しさん :sage :2007/10/31(水) 09:51:52
  >>626
  cmdくらいなら使ったことあんじゃね
691デフォルトの名無しさん:2007/10/31(水) 14:36:18
>>685
お前学習能力ないの?
自分が全て正しいと思ってる?
692デフォルトの名無しさん:2007/10/31(水) 14:39:27
>>691
放っておけ
693デフォルトの名無しさん:2007/10/31(水) 14:42:20
>>691
放置な。

694デフォルトの名無しさん:2007/10/31(水) 14:43:19
>>691
思ってる
695デフォルトの名無しさん:2007/10/31(水) 14:43:45
>>653
え? 16bit-DOSアプリからはパイプ経由でstdoutを取り込めないの?
696デフォルトの名無しさん:2007/10/31(水) 15:48:32
ShellExecute(NULL, "find", "C:\\", NULL, NULL, SW_SHOW);
で起動できるファイル検索ウインドウの探すファイルなどを
指定する方法がありましたら教えてください。

お願いします。
697デフォルトの名無しさん:2007/10/31(水) 16:14:35
検索ウィンドウを自作する。
698デフォルトの名無しさん:2007/10/31(水) 18:26:52
どうも、他スレから流されてきました。

Win32環境+VS2005で開発を行っています。
ダブルクリックでファイルを開く処理に対応させようと頑張っていた所
Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。
(でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く)

そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?

699デフォルトの名無しさん:2007/10/31(水) 18:29:05
InitInstanceの時点でスレ違い
700デフォルトの名無しさん:2007/10/31(水) 18:40:34
まずはWin32APIとその他のライブラリの区別ぐらいできる程度の脳味噌が必要。
701623:2007/10/31(水) 21:07:38
>>624
コピペでうまくいきました。自力でやったらすごく時間
がかかっていただろうと思います。ありがとうございます。

>>その他大勢
DOSアプリではなくてコンソールアプリと言うべきだったようです。
僕がDOSアプリと呼んだものはVisual C++でプロジェクトを新規作成する
ときに'Win32 Console Application'を指定して作ったものです。

ところで、Visual C++でビルドボタンを押すとcl.exeやlink.exeなどの
フィルタが呼び出されますが、これらのプログラムはDOSプロンプトの
コマンドラインからも実行することができます。これらはコンソール
アプリケーションなのでしょうか?
702デフォルトの名無しさん:2007/10/31(水) 21:11:45
DOSプロンプトはWindows9x系以前にしかないが、
いまだにそんな環境を使っているのか?
703デフォルトの名無しさん:2007/10/31(水) 21:11:56
bitbltで画像Charaを画像Backに重ねる場合、
リソースとしてマスクを用意して置くしかないのですか?
自作関数や別のライブラリを使わずに、リアルタイムで画像Charaのマスクを作れる関数、
もしくは透明色を指定できる関数はないでしょうか
704623:2007/10/31(水) 21:18:48
>>702
Windows Meです。最近のWindowsにはコマンドプロンプト
がないんですか!?
705デフォルトの名無しさん:2007/10/31(水) 21:19:03
>>701
おまいはなんでそんなにDOSにこだわるんだ?
2k以後のwindowsで使われるプロンプトは一般的にはコマンドプロンプトと呼ばれることぐらい調べりゃすぐわかるだろ。
ただでさえお前がきっかけで荒れてるんだから、ちっとは自重しろ。
706デフォルトの名無しさん:2007/10/31(水) 21:25:59
2000ではなくNTからだろ、いい加減な情報を流すな。
707623:2007/10/31(水) 21:27:21
>>705
なるほど。分かりました。
708デフォルトの名無しさん:2007/10/31(水) 21:30:32
>>702
それをDOSプロンプトとは呼ぶかどうかは意見が分かれると思うけど、
COMMAND.COMならx86のNT系にも搭載されている。
709デフォルトの名無しさん:2007/10/31(水) 21:42:33
710デフォルトの名無しさん:2007/10/31(水) 21:52:27
未だにWindowsMeなんか使ってる馬鹿はほっとけ。
711デフォルトの名無しさん:2007/10/31(水) 22:07:10
昔のSDKに、9x用cmd.exeもどきみたいなのが入っていた記憶があるな。
いつの間にか消えたけど。

>>703
イメージリストならカラーキー指定の透過描画ができる。
マスクを作るなら、2値ビットマップへのBltを利用する。
パレットへうまくカラーキーを割り当てるのがコツ。
712デフォルトの名無しさん:2007/10/31(水) 22:17:24
>>703
DirectDrawのサーフェイスへBitBltして、
カラーキーを設定すればお望みの動作になるかと。
713デフォルトの名無しさん:2007/10/31(水) 22:21:22
っ TransparentBlt
714デフォルトの名無しさん:2007/10/31(水) 23:11:07
>>711-713
ありがとうございます
715デフォルトの名無しさん:2007/11/01(木) 06:42:41
GDI+のImageオッブジェクとのGetWidth()メドッソがうまく動かない
自分でBMPのヘッダーから取得した情報やJpegファイルから取得した情報と
Imageオブジェクトに画像を選択して取得した情報が全山違う
何故か?理由がまるで分からない
716デフォルトの名無しさん:2007/11/01(木) 07:14:52
オッブジェクと
メドッソ

寝ぼけてるのか?酔ってるのか?
717デフォルトの名無しさん:2007/11/01(木) 08:59:53
想像するにTwip単位なんじゃね

リファレンス見てないが
718デフォルトの名無しさん:2007/11/01(木) 09:01:38
>>715
キムチのにおいがするレスですね。
719デフォルトの名無しさん:2007/11/01(木) 09:12:35
質問です
GetCurrentDirectoryなどでパスを取得する場合、何バイトのバッファを用意すれば「確実にフルパスが取得できる」のでしょうか?
Win95時代あたりは _MAX_PATH あれば足りたような覚えがあるのですが、今はその制限がとっぱらわれたかと思います
720デフォルトの名無しさん:2007/11/01(木) 09:13:51
>Image::GetWidth Method

>The GetWidth method gets the width, in pixels, of this image.

普通に単位Pixelだぞw

変なイメージ渡してるんじゃないの?
FromFileでイメージオブジェクト作って試してみたら
721デフォルトの名無しさん:2007/11/01(木) 09:15:05
>>717
Unicode型の関数なら32767文字ぐらいだったような
722デフォルトの名無しさん:2007/11/01(木) 09:27:04
CreateFileの説明から

lpFileName
[in] A pointer to a null-terminated string that specifies the name of an object to create or open.
In the ANSI version of this function, the name is limited to MAX_PATH characters.
To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path.
For more information, see Naming a File. For information on special device names, see Defining an MS-DOS Device Name.

ANSI版はMAX_PATH文字まで、UNICODE版は"\\?\を頭に付けて32767文字まで
null-terminated stringって書いてあるから実際に使えるのは32766文字か
723デフォルトの名無しさん:2007/11/01(木) 10:45:27
>>722
思いのほか長いですね
みなさんXPとかに対応する場合、64KBのテンポラリバッファに取得しているのでしょうか?
その後wstringに突っ込むみたいな感じで。
724デフォルトの名無しさん:2007/11/01(木) 10:56:29
気にしたことが無いな〜
書き込まれた文字列の長さ=バッファサイズだったらエラーにして弾いてしまう

ファイル名とディレクトリ名は最大255文字だから255階層くらいないと3万文字も行かないものw
725デフォルトの名無しさん:2007/11/01(木) 10:57:16
間違えた。127階層かorz
726デフォルトの名無しさん:2007/11/01(木) 11:08:25
>>719
MSDN嫁
727デフォルトの名無しさん:2007/11/01(木) 11:12:27
GetCurrentDirectory(0,NULL);

で必要なバッファサイズを返す( #^ω^)
728デフォルトの名無しさん:2007/11/01(木) 11:57:11
他のスレから誘導されてきました。

初心者です。
VisualC++2005 win32なんですが
ディスプレイ画面のいわゆる拡大鏡のプログラムを作っています。

マウスカーソルの座標を読み込んで
その周囲の100*100くらいのピクセル値を
GetDC(0)とGetPixelで読み込んで配列に格納。
そのピクセル値の中央のあたりをを拡大した値をまた配列に入れて、
それをGetDC(0)とSetPixelで
現在のマウスカーソルの位置の周りに表示させてます。
それで拡大はできてるんですが、動作が遅いのか、
カクカクと点滅するようにしか表示されません。

フリーソフトとかである拡大鏡みたいに
スムーズに表示させるにはどうしたらいいんでしょうか?
そもそもこのやり方より別の方法使ったほうがいいでしょうか?
729デフォルトの名無しさん:2007/11/01(木) 12:04:09
>>728
1ピクセル毎にGDIを呼び出すなら遅くて当然
DIBなどでまとめて処理するべし
730デフォルトの名無しさん:2007/11/01(木) 13:02:56
ストレッチとかは?
731デフォルトの名無しさん:2007/11/01(木) 13:08:50
StretchBlt じゃだめなん?
732デフォルトの名無しさん:2007/11/01(木) 14:07:46
StretchBltは止めたほうがいいと思う。
実装がドライバ依存なんで特定倍率以上にすると失敗するようなタコ実装が存在。
拡大鏡みたいな用途には不向き。
733732:2007/11/01(木) 14:08:18
VistaではGDI実装がWindows側になったんで動作は安定したようだけどね。
734デフォルトの名無しさん:2007/11/01(木) 14:16:06
>実装がドライバ依存なんで特定倍率以上にすると失敗するようなタコ実装が存在。
こういう情報を流す場合にいつも具体的な製品名がうやむやになるんだが、
存在すると明言する以上、どの製品なのか当然知っているんだよね?
735デフォルトの名無しさん:2007/11/01(木) 14:30:50
都市伝説
736デフォルトの名無しさん:2007/11/01(木) 14:38:51
ttp://www.google.co.jp/search?hl=ja&q=StretchBlt+%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90&btnG=%E6%A4%9C%E7%B4%A2&lr=
よくは知らないけれど、ドライバ依存だってことじゃね
そのくらいは無視していいと思うけど
737728:2007/11/01(木) 14:54:50
参考になりました。いろいろ試してみたいと思います。
ありがとうございました。
738デフォルトの名無しさん:2007/11/01(木) 15:04:04
>>734
StretchBltのバグは結構有名じゃないか?
著名なとこだとMatrox系が結構おかしい
739デフォルトの名無しさん:2007/11/01(木) 15:09:15
9x系のNVIDIAドライバは高倍率で失敗になった気がする
740デフォルトの名無しさん:2007/11/01(木) 15:12:23
ちなみにWindowsに付属している拡大鏡はexeファイルを覗くと分かるけど、
StretchBltがインポートされている。

>拡大鏡みたいな用途には不向き。
へぇ不向きなんだ。
MSは自ら不向きな物を使ってるんだね。


で、>>732はいい加減なことを言うのはやめにしないか?
741デフォルトの名無しさん:2007/11/01(木) 15:13:02
そういえばMatroxなんてメーカーもあったなぁ
742デフォルトの名無しさん:2007/11/01(木) 15:13:52
>>740
お前の性格が悪いのだけはよくわかった
743デフォルトの名無しさん:2007/11/01(木) 15:14:40
性格が悪いというよりただ単にきもいだけだろう
744デフォルトの名無しさん:2007/11/01(木) 15:16:56
すまん、俺が悪かったorz
どうか、どうか俺にめんじて言い争いをやめてくれ
745デフォルトの名無しさん:2007/11/01(木) 15:17:01
StretchBltはDIB間だけで処理すればいいんじゃね?
746デフォルトの名無しさん:2007/11/01(木) 15:17:14
また荒れるだろ馬鹿
747デフォルトの名無しさん:2007/11/01(木) 15:18:08
あるといいつつ製品名もドライバのバージョンも不明。
気がするだけで自分では検証もしていないし、プログラムの書き方も不明。
748デフォルトの名無しさん:2007/11/01(木) 15:18:09
StretchBltなんて信用ならないのは16bit時代からコード書いてりゃ常識だろうよ。
シーラスのだったか、勝手に補間拡大してくれちゃうのもあったんだぞ。
SDK付属のZoominなんか使った日には悲惨なことになってた。
749デフォルトの名無しさん:2007/11/01(木) 15:19:36
また荒れればいいだろ
750デフォルトの名無しさん:2007/11/01(木) 15:20:29
734=740=747なのか?
とりあえず、おまえさんはStretchBltを使うことを推奨するのかしないのかはっきりしようぜ
751デフォルトの名無しさん:2007/11/01(木) 15:22:58
>>748
補間拡大騒ぎがあったのは当時のnVidia?だったような・・・
そんなもんバージョンなんて覚えてないけど。
752デフォルトの名無しさん:2007/11/01(木) 15:24:43
あのね、

ttp://support.microsoft.com/kb/111865/ja

言い争う前にコレ見たら?
753デフォルトの名無しさん:2007/11/01(木) 15:25:17
ちなみにこのAPI失敗しても NOERROR で戻るし、
当然 GetLastError もゼロという凶悪さw
754デフォルトの名無しさん:2007/11/01(木) 15:27:43
Vistaにはこんなのもあるな

ttp://support.microsoft.com/kb/940145

「使わない方がいい」は明確だろうよ。
755デフォルトの名無しさん:2007/11/01(木) 15:32:15
>>752
それSDK3.1とか書いてあるし16bit用のだな。
ただ32bitでも似た問題が起こるのは3年くらい前に客からの報告で見かけてる
756デフォルトの名無しさん:2007/11/01(木) 15:32:43
>>752-754
とりあえず、お前がStretchBltに悩まされたのだけはよくわかった
757デフォルトの名無しさん:2007/11/01(木) 15:39:03
「自分と違う考えを持つ人たちを全員同一の人物とみなす」って奴か・・・

ページ印刷とかで高解像度ビットマップへの拡大描画とかやれば、
結構頻繁に出会えるバグなんだけどなぁ。
758デフォルトの名無しさん:2007/11/01(木) 15:42:05
16bit時代しかコード書いてなきゃ常識だろうよ。
759デフォルトの名無しさん:2007/11/01(木) 15:51:03
どうでもいいけど、喪前ら>752みたいな日本語でよく読めるな。
--
GDI がこれらの呼び出しをシミュレートする必要があるので、独自のそれらのディスプレイ ドライバがほとんど StretchBlt()または StretchDIBits()を実装しません。 GDI シミュレーション一部には、 64 K 限られる一時的な作業バッファを割り当てるのが含まれます。
作業バッファのサイズが 64 K より大きいために、計算される場合、 64 K 未満になるまで、元とコピー先の四角形の高さが次に halve されます。
GDI がバッファを取得するための(2) 2 未満 64 K で高さを分割するのを続行する必要があると、問題は、 1 つのスキャン行にソースまたは送信先高さが最終的に到達できることです。 サブユニットへのスキャン行が分割できないので、呼び出しが時点で失敗します。

StretchBlt()と StretchDIBits()が無制限な伸縮するのを提供するよう設計されていません。 デザイン制限以上の少し途中でただし、失敗することがあります。
--
Most display drivers do not implement their own StretchBlt() or StretchDIBits() so GDI must simulate these calls. Part of the GDI simulation involves allocating temporary work buffers, which are limited to 64K.
If the size of the work buffer is calculated to be greater than 64K, then the height of the source and destination rectangles are halved until they are less than 64K.
The problem is that if GDI must continue to divide the height by two (2) to get a buffer less than 64K, the source or destination height could eventually reach one scan line.
At this point, the call fails because it cannot break up a scan line into subunits.

StretchBlt() and StretchDIBits() are not designed to provide unlimited stretching. However, they may fail a bit more prematurely than their design limitation.
--
一体どこの機械翻訳なんだか。
760デフォルトの名無しさん:2007/11/01(木) 16:00:08
>>759
エキサイト翻訳してみた。

>ほとんどのディスプレイドライバがそれら自身の StretchBlt()を実装しないか、またはGDIがこれらをシミュレートしなければならなくて、 StretchDIBits()は呼びます。
>GDIシミュレーションの一部が、臨時の仕事バッファを割り当てるのを伴います。(バッファは64Kに制限されます)。
>仕事バッファのサイズが64K以上になるように計算されるなら、ソースと目的地長方形の高さはそれらが64K未満になるまで半分にされます。
>問題はGDIが、バッファを64K未満得るために2(2)に高さを割り続けなければならないなら、ソースか目的地の高さが結局1つのスキャン系列に達するかもしれないということです。
>スキャン系列を「副-ユニット」に終えることができないので、ここに、呼び出しは失敗します。

>StretchBlt()と StretchDIBits()は、無制限なストレッチングを提供するように設計されません。
>しかしながら、それらは彼らの設計上の制限より早まって、失敗するかもしれません。
761デフォルトの名無しさん:2007/11/01(木) 16:00:29
gdi.dllを丸ごと自前のに置き換えて高速化なんて芸当をしてたのはCanopusだったか?
今じゃ考えられないな。
762デフォルトの名無しさん:2007/11/01(木) 16:11:26
StretchBltがバグ持ちかどうかはひとまず置くとしても「重い」ってのは間違いないだろう。
>>728はDIBのメモリ操作とかそういう方法で高速化を模索したほうがいいよ。

ちなみにVistaで重いってんなら話は変わる(GetDC()の問題)けど。
763デフォルトの名無しさん:2007/11/01(木) 16:18:03
Vistaの拡大鏡はあの軽さからするとGetDCじゃないよな・・・と思って見てみたらMILCORE.DLLをインポートしてる。
このへん使うとできるのか?
764デフォルトの名無しさん:2007/11/01(木) 16:20:16
それはひみつのアッ子ちゃん
765デフォルトの名無しさん:2007/11/01(木) 16:26:19
766デフォルトの名無しさん:2007/11/01(木) 16:27:36
そんなに速度が必用ならDirect3Dで実装すればいい。
拡大縮小どころか回転もアルファブレンドもGPU側で処理できる。
767デフォルトの名無しさん:2007/11/01(木) 16:33:49
未だにWindowsXP登場以前のビデオカードをサポートしようとしている人って、
いったい何のためにやってるの?
768デフォルトの名無しさん:2007/11/01(木) 16:57:50
769768:2007/11/01(木) 16:59:32
768の過去ログで話題になってるのは508あたりね
770デフォルトの名無しさん:2007/11/01(木) 17:03:45
>>767
Win32sは諦めた
771デフォルトの名無しさん:2007/11/01(木) 17:25:18
c言語で、マイクからの入力レベルを表示できるインジケータ?みたいなものを作りたいと思っています。

調べてみたところ、waveIn系の関数が使えるのかと思ったんですが、入力レベルを知るような関数は見当たりませんでした。

最悪、入力レベルを知ることまでしないまでも、音声の入力があったら(喋ったら)
なんらかの通知を受けられるようにしたいんですが、何かいい実装方法があれば教えてください。
772デフォルトの名無しさん:2007/11/01(木) 17:30:25
レベルは自分で計算する。勉強しろ。
773デフォルトの名無しさん:2007/11/02(金) 01:08:27
>>763
Vistaになって拡大鏡専用のAPIができた。
特定のウィンドウのみを表示/非表示にしたり、
拡大縮小・回転・色変換をかけられたりする。
ttp://d.hatena.ne.jp/NyaRuRu/20061226

このAPIを使うと、
WPFアプリのベクタ画像がベクタ的に拡大される。
ttp://d.hatena.ne.jp/NyaRuRu/20070728/p1

Leopardにも似たような機能があるし最近の流行っぽい。
ttp://d.hatena.ne.jp/t_yano/20071027/1193515705
774デフォルトの名無しさん:2007/11/02(金) 01:38:25
MSがMILCORE.DLLのAPIを公開すれば済むのに
そこまでして.netを普及させたいのかねぇ・・・
775デフォルトの名無しさん:2007/11/02(金) 09:45:27
さあ早く自力でヘッダーを書くんだ
776デフォルトの名無しさん:2007/11/02(金) 09:52:03
もう書いた
777デフォルトの名無しさん:2007/11/02(金) 10:07:26
うp
778デフォルトの名無しさん:2007/11/02(金) 18:22:36
リストボックスでキーを押すとその文字で始まる項目が勝手に選ばれるけど、この機能無効にできないの?
779デフォルトの名無しさん:2007/11/02(金) 18:24:24
サブクラスしてWM_KEYFIRST〜WM_KEYLASTをブロック
780デフォルトの名無しさん:2007/11/02(金) 22:04:51
>>779
サンクス
781デフォルトの名無しさん:2007/11/02(金) 23:11:49
ところでブロックってこうでいいんだよね?
一応うまく動いてはいるんだけど。
if((WMS<=Msg)&&(Msg<=WME)) return 0; //合致したらブロック
return WP(hWnd, Msg, wParam, lParam); //しなかったらかえす
782デフォルトの名無しさん:2007/11/03(土) 09:39:46
EDITの特定エリアだけ入力できないようにするにはどうしたらいいんでしょうか。
↓の1列目(2列目)の4文字番目8番目12番目・・・見たいな感じです。

AAA BBB CCC
AAA BBB CCC
783デフォルトの名無しさん:2007/11/03(土) 12:26:21
C++でDLLを作っています。

http://msdn.microsoft.com/library/ja/jpdllpro/html/_win32_DllMain.asp
によると、下記のように書いてありました。

> TLS、オブジェクト作成、ファイル関数以外の Win32 関数を呼び出すと、診断しにくい問題が発生する可能性があります。

今まで、グローバルなC++クラスのインスタンスを用意して、
そのコンストラクタでWin32関数を呼ぶようなプログラムを書いていたのですが、
そのような場合もまずいのでしょうか?
784デフォルトの名無しさん:2007/11/03(土) 12:38:07
kernel32.DLL以外のDLLに含まれる関数使うのはマズかったような
俺も忘れた誰か教えて
785デフォルトの名無しさん:2007/11/03(土) 13:42:47
DllMain 内で色々やると呼び出しがループして
デッドロック発生するかもしれんから、
最小限にしとけってことでしょ
786783:2007/11/03(土) 14:40:15
>>784-785
レスありがとうございます。

グローバルなオブジェクトのコンストラクタはDllMain時に呼ばれるので、
その中ではkernel32以外の関数を使わないほうが良さそうですね。
787デフォルトの名無しさん:2007/11/03(土) 14:50:12
明示的にイニシャライズしなきゃならないDLLとかはやばそうだな
788デフォルトの名無しさん:2007/11/03(土) 14:57:42
>>782
入力位置を取得して「特定エリア」内ならWM_CHARを潰す
789デフォルトの名無しさん:2007/11/03(土) 17:49:28
ATLにCWindow::IsParentDialog()ってあるけど、これみたいにある特定のウィンドウをダイアログウィンドウって判定するにはどうしたらいいのかな。
DS_MODALFRAMEとかウィンドウスタイルから判定するしかないのかな?
790782:2007/11/03(土) 18:10:12
>>788
どうもです、調べてやってみます。
791デフォルトの名無しさん:2007/11/03(土) 18:10:16
クラス名
792デフォルトの名無しさん:2007/11/03(土) 18:14:33
>>789
ATLならソース見れば分かるだろうが
793デフォルトの名無しさん:2007/11/03(土) 18:30:12
>>792
それはそうなんだが、あれってソースにある内容をみてそのまま使ってもライセンス的に問題ないのかな。
サンプルはなるべくWineのATLWIN.Hとかで済ましてるんだけどさ。
794デフォルトの名無しさん:2007/11/03(土) 18:33:46
WINEの方がGPL感染しないか?
795デフォルトの名無しさん:2007/11/03(土) 19:08:15
>>794
すっかり忘れていた・・・
まあ、Wineからはまだ実際にコード使わせてもらってからセーフか。
796デフォルトの名無しさん:2007/11/03(土) 22:32:14
GPL氏ねと葉っぱ社員が申しております
797デフォルトの名無しさん:2007/11/03(土) 23:09:13
なんという逆ギレ
798デフォルトの名無しさん:2007/11/04(日) 00:45:00
一時的にスクリーンセーバー等を無効にする関数があったと思うのですが、忘れてしまいました。
誰か教えてください。
799デフォルトの名無しさん:2007/11/04(日) 00:50:16
SetThreadExecutionState
800デフォルトの名無しさん:2007/11/04(日) 00:52:00
ってダメじゃん
> This function does not stop the screen saver from executing either.
801デフォルトの名無しさん:2007/11/04(日) 00:52:59
関数じゃないけどスクリーンセーバーの起動を止めたい間
WM_SYSCOMMANDに応答すればいいらしい
http://support.microsoft.com/kb/403844/ja
802798:2007/11/04(日) 01:09:29
>>799-801
すばやい回答感謝です
803デフォルトの名無しさん:2007/11/04(日) 02:07:25
NTFSのアクセス権で、「属性の読み取り」ってあるけど、
この権限が無いとどうなるんでしょうか??
GetFileAttributes()が失敗するわけではないみたい...
804デフォルトの名無しさん:2007/11/04(日) 03:34:33
.WAV(というかRIFF?)のフォーマットを見たんですが、
ファイルやデータサイズがDWORDで書かれてると言うことは、4GB以上は全く扱えないということですか?
805デフォルトの名無しさん:2007/11/04(日) 03:40:30
http://ja.wikipedia.org/wiki/WAV
4GBどころか2GBまでです
806デフォルトの名無しさん:2007/11/04(日) 04:42:46
そもそも4GBのWAVなんて何に使うんだ?
AVIはAVI 2.0なんてのがあるし、他のRIFFなファイルで2GB超えるような物あるか?
807デフォルトの名無しさん:2007/11/04(日) 05:13:42
192kHz 32bit-float 6(5.1)ch
808デフォルトの名無しさん:2007/11/04(日) 07:51:15
オレの HDD 6GB しかなくて、3GB も使ってないが、豪気な話もあるんもんだ。

たまに access err になるんで、SD カードとかで代替できないか、考えたり
している。安くなってきたよね。スレ違いになるが、SD カードで boot でき
ないんだろうか。
809デフォルトの名無しさん:2007/11/04(日) 09:11:22
windows7が発売するのを待て
810デフォルトの名無しさん:2007/11/04(日) 11:37:26
>>808
CFtoIDE使え
811デフォルトの名無しさん:2007/11/04(日) 16:07:36
デバイスコンテキストのハンドルってプロセス違うと使えない?
812デフォルトの名無しさん:2007/11/04(日) 16:18:37
OS依存
確か9xならGDIハンドルは共有されてたがNTはプロセス毎に独立してたはず
813デフォルトの名無しさん:2007/11/04(日) 18:31:40
Win2000以降の環境で、プロセスが生成されたこと/終了したことを通知してくれる
(FindFirstChangeNotification のような)ユーザーモードのAPIってないんでしょうか?

カーネルモードには用意されているようなのですが
ユーザーモードのプログラムで代替する方法があれば教えていただきたいです
814デフォルトの名無しさん:2007/11/04(日) 18:48:38
列挙して差分を検出汁
815デフォルトの名無しさん:2007/11/04(日) 19:37:35
そのものズバリなAPIはないかー
どうしてもユーザーモードやるってのなら、やっぱり列挙で似非監視するしかなさそうだね 
ありがとう
816デフォルトの名無しさん:2007/11/04(日) 20:45:09
>プロセス生成
現在起動している全プロセスのCreateProcessInternalWをフック

>プロセス終了
現在起動している全プロセスに対してWaitForMultipleObjects

じゃ駄目なのか?
817デフォルトの名無しさん:2007/11/04(日) 21:14:41
>>816
泥臭すぎてむしろ面白いね
詰めて考えてないからわからないけど、それでも一応できる気もします

けど選択肢としてドライバを許すなら、ドライバで実装したほうが明らかに楽なんで
ユーザーモードは諦めます さんくす
818811:2007/11/04(日) 22:08:45
非表示状態のウィンドウを別のプロセスで書き換えたいんだけど、スマートな方法ない?
プロセス間でデバイスコンテキストが共有されてればメッセージでデバイスコンテキスト渡して・・・とかやろうと思ったんだけど。
でもウィンドウハンドルはプロセス違っても共通なんだっけ?
819デフォルトの名無しさん:2007/11/05(月) 00:58:20
非表示状態のウィンドウに何書いても無視されるだけだぞ?
820デフォルトの名無しさん:2007/11/05(月) 02:05:25
あの…すいません。
パソコンにconnAPIDOLLがない〜と書かれているんですが
意味がわかりません。どうすればいいのでしょうか?
821デフォルトの名無しさん:2007/11/05(月) 02:38:56
板違い
822デフォルトの名無しさん:2007/11/05(月) 06:11:37
円(ellipse)をクライアント領域に描画したいんだが、Ellipse関数を使うと円の枠線が黒くひょうじされてしまう。
白いペンをデバイスコンテキストに選択しても、今度は白い枠線が別の円と重なる部分で目立ってしまう。
円の内部の色は、ランダムな色のブラシで塗られることにしてるんだが
FillRectが矩形内部のみブラシで塗るみたいに円の内部だけ塗るようにするにはどうすればよい?
823デフォルトの名無しさん:2007/11/05(月) 06:17:22
すいません
自己解決しました。
CreatePenの引数にPS_NULLを指定すれば、NULLPENができました。
こんなものGetStockObjectで選択できるようにしとけばいいのに
824デフォルトの名無しさん:2007/11/05(月) 07:01:52
GetStockObjectにNULL_PENがあるだろ
825811:2007/11/05(月) 07:23:41
>>819
書き換えられる側のプロセスは非表示ウィンドウの画像に処理をしてメインウインドーに表示します。
826デフォルトの名無しさん:2007/11/05(月) 07:48:18
> こんなものGetStockObjectで選択できるようにしとけばいいのに
827デフォルトの名無しさん:2007/11/05(月) 10:28:30
>>825
操作側はDIBデータをファイルマッピングオブジェクトにマップして
対象プロセスはマップされたデータからDIBを作って読み書きすればいい

仲介の非表示ウィンドウなんていらん
828デフォルトの名無しさん:2007/11/05(月) 10:38:35
あるプロセスの、消費したCPU時間を取得するのはどのAPIですか?
829デフォルトの名無しさん:2007/11/05(月) 11:01:37
GetProcessTimesなんじゃね
やっぱり('A`)
830デフォルトの名無しさん:2007/11/05(月) 11:18:02
ねーねーCRT関数ってWin32APIと似たようなのが多いけど
基本Win32APIを直で使った方がいいのん?
たとえばCRTのstrcpyとか脆弱性に対応したstrcpy_sとか
色々バージョンアップされてるみたいだけどWin32APIのはずっとそのままだよね?
どっちがいいのー教えて。
831デフォルトの名無しさん:2007/11/05(月) 11:36:49
StringCchCopyでおk
832デフォルトの名無しさん:2007/11/05(月) 11:37:23
脆弱性に対応したっつーかエラー検出手段を設けたってだけだから
使いたい方を使ってなさい
833デフォルトの名無しさん:2007/11/05(月) 11:39:48
834デフォルトの名無しさん:2007/11/05(月) 21:57:52
strchr << StrChr
835デフォルトの名無しさん:2007/11/05(月) 22:22:06
マルチスレッドのこと考えなくていい?
836デフォルトの名無しさん:2007/11/05(月) 23:10:57
シングルスレッドで動かすならね。
837デフォルトの名無しさん:2007/11/05(月) 23:11:36
>>830
strcpyは脆弱でもなんでもないNULLやバッファサイズのチェックを
関数の外でやるか中でやるかの違い
セキュリティ強化版と言いなさい
838デフォルトの名無しさん:2007/11/06(火) 02:15:21
Win32 APIはすべてマルチスレッド対応
CRTも最近はシングルスレッド版ライブラリ廃止されてなかったっけ
839デフォルトの名無しさん:2007/11/06(火) 02:20:27
たとえばグローバル変数は、自分のプログラムで同期の面倒を見ないといけない。
あたりまえだけど、これはAPIとかCRTがマルチスレッド対応、とは別の話だよね。
840デフォルトの名無しさん:2007/11/06(火) 02:31:12
当たり前
841デフォルトの名無しさん:2007/11/06(火) 02:33:23
友達なら
842デフォルトの名無しさん:2007/11/06(火) 03:06:10
うぃーっきー
843デフォルトの名無しさん:2007/11/06(火) 03:06:42
あるしんど
844デフォルトの名無しさん:2007/11/06(火) 03:16:17
>>833
このリスト古杉
mallocがGlobalAllocってw
845デフォルトの名無しさん:2007/11/06(火) 04:18:23
>>844
95時代の資料だからな

>この資料は以下の製品について記述したものです。
>Microsoft Win32 Application Programming Interface を以下の環境でお使いの場合
>Microsoft Windows NT Advanced Server 3.1
>Microsoft Windows NT 4.0
>Microsoft Windows NT 3.51 Service Pack 5
>Microsoft Windows 95
846デフォルトの名無しさん:2007/11/06(火) 04:51:38
少し愚痴っていいか?いや愚痴らせてくれ

ツールチップを作成しTTM_ADDTOOLでLPTOOLINFO構造体を渡す
これで通常はツールチップが使える
しかしVC++8で作成すると何故かツールチップが出ない
徹底的にチェック勿論ミスはない
ヘッダ覗いてTOOLINFO構造体みてみると
#if (_WIN32_WINNT >= 0x0501)
void *lpReserved;
#endif
こんなの発見
なんとなくこいつのせいかと思い_WIN32_WINNTを0x0501未満した結果ツールチップが出た
でもこれじゃ納得が行かない_WIN32_WINNTを0x0501に戻し再度挑戦やっぱり出ない
そして今まで試行錯誤のすえ原因解明
XPStyleを適用させないとツールチップが出ないことが判明
つまりmanifestを使わないとツールチップが出ない、解かってしまえば簡単な事だった
お前ら知ってたか?

つー訳で今から寝る、おやすみ
847デフォルトの名無しさん:2007/11/06(火) 05:05:10
>>846
m9(^Д^)プギャー
848デフォルトの名無しさん:2007/11/06(火) 06:35:20
そんな日もあるだろう
849デフォルトの名無しさん:2007/11/06(火) 06:52:21
安易にsizeofせずにTTTOOLINFO_V1_SIZEみたいな奴を使えって事だろ
850デフォルトの名無しさん:2007/11/06(火) 06:55:59
Reservedなんだから消してしまえ
851デフォルトの名無しさん:2007/11/06(火) 07:12:32
てか当たり前の話じゃね?
852デフォルトの名無しさん:2007/11/06(火) 07:13:53
manifestがないとコモンコントロールv5が使われるから
_WIN32_WINNT >= 0x0501な構造体に対応していないわけだな
853デフォルトの名無しさん:2007/11/06(火) 07:16:06
>>851
俺は知らなかった
854デフォルトの名無しさん:2007/11/06(火) 07:18:35
そんな人も居るだろう
855デフォルトの名無しさん:2007/11/06(火) 07:21:21
そんな人は必要ない
856デフォルトの名無しさん:2007/11/06(火) 07:34:00
>>852
WIN2000未対応で
SetWindowTheme(hwn,NULL,NULL);
なんて事したら_WIN32_WINNT >= 0x0501な構造体は使えないって事?
857デフォルトの名無しさん:2007/11/06(火) 07:48:28
2000未対応の癖にUxTheme.dllは使えんのか?
858デフォルトの名無しさん:2007/11/06(火) 07:52:00
859デフォルトの名無しさん:2007/11/06(火) 07:53:57
XP以降対応なら使えるだろ
860デフォルトの名無しさん:2007/11/06(火) 07:55:34
856が的外れな気がするんだが気のせいか。
861デフォルトの名無しさん:2007/11/06(火) 07:59:55
そのバージョンの構造体が利用可能かどうかは読み込まれてるDLLによる
使ったっていいけど失敗するだけだとおも
862デフォルトの名無しさん:2007/11/06(火) 08:00:32
そうでもない
要は_WIN32_WINNT 0x0501ビルドしたソフトで
SetWindowTheme(hwn,NULL,NULL);こいつを使うと
>>846的な事は起こるのかって事だろ
863856:2007/11/06(火) 08:12:15
>>862
その通りです
WIN2000未対応なんて書き方が悪かった
864856:2007/11/06(火) 08:35:44
>>861
スマン普通にスルーしてた
つまりSetWindowThemeでNULLを使いたかったら_WIN32_WINNT < 0x0501で作らないといけないって事かぁ
865デフォルトの名無しさん:2007/11/06(火) 10:45:10
VC8ってデフォが_WIN32_WINNT 0x0501になってんの?
866デフォルトの名無しさん:2007/11/06(火) 11:07:35
なてない
867デフォルトの名無しさん:2007/11/06(火) 12:15:49
そもそもWINVERや_WIN32_WINNTを必ず自分で定義する癖をつければそんな無駄な心配は不要
868デフォルトの名無しさん:2007/11/06(火) 12:55:34
WS_THICKFRAMEを持ったウインドウを作っているのですが、
キャプションのあるときとない時でフレームの幅が変わってしまいます。

XPでやるとわかりやすいのですが、キャプションがあると青枠でないとグレーの枠
このときグレーの枠の方が1ピクセル細いので、

ClientWidth + GetSystemMetrics(SM_CXSIZEFRAME)*2;
ClientHeight + GetSystemMetrics(SM_CYSIZEFRAME)*2 /* + GetSystemMetrics(SM_CYCAPTION) */;

でウインドウを作ると、キャプションのない時のクライアントサイズが幅高さともに2ピクセル広くなってしまいます。
クライアントサイズ決め打ちで正しくリサイズするには、枠ありのときとなしのときの差分を元にリサイズしないといけないのでしょうか?
869デフォルトの名無しさん:2007/11/06(火) 12:57:08
×枠ありのときとなしのときの差分を元に
○現在のクライアントのサイズと、キャプションありなしそれぞれの時の枠のサイズを測って
870デフォルトの名無しさん:2007/11/06(火) 13:02:54
結構、このスレ見るけど、みんなどうやってそこまで知識を蓄えたか
知りたくなる。猫でものページ見て、「なんだ、このキャスト」
「なんなんだよ、この定数、どっから見つけてくるんだよ」
「SemdMessageのLPARAM,WPARAMの値何を送れば良いんだよ」
っていつも思う。SDK見ると英語で、なんとか訳してコメントでソースに
説明文つけたり。LPARAM,WPARAMも調べてコメント付けたり。
なんとなく定数でもなんとなく意味合いが少しわかってきたりするけど。
win32apiリファレンス読んでも、重要なところはSDKで調べてね。
てな感じだし。
ほんと、ここのスレ見てるとすげーな〜って思う。
871デフォルトの名無しさん:2007/11/06(火) 13:09:59
872デフォルトの名無しさん:2007/11/06(火) 14:03:22
クライアントサイズを目的のサイズにするためには、
一度表示した後、目的のサイズになるまでリサイズを繰り返すしかない。
その他の方法は結局当てにならないというのが結論。
873デフォルトの名無しさん:2007/11/06(火) 14:23:43
>>870
語るも涙の話がみ〜んなあるんだ。
874デフォルトの名無しさん:2007/11/06(火) 14:24:43
ねぇよ。うぜぇ
875デフォルトの名無しさん:2007/11/06(火) 15:36:49
さすがに10年以上Win32と付き合ってりゃ知識も付くよ。
876デフォルトの名無しさん:2007/11/06(火) 19:15:18
>872
それだと無限ループにおちいるかも
877デフォルトの名無しさん:2007/11/06(火) 19:41:45
スレとは関係ないんだけどさ、これ本当?

>LeopardでIMは独立したアプリで、1つのプロセスが全てのアプリの変換を行う様になった。
>こいつが無限ループに陥った場合、他のアプリに切り替えると、切り替えたアプリがIMに通信に行く。
>IMは無限ループ中なので、返事が出来ず、そのアプリも沈黙。切り替えるたびに沈黙...

たぶんインプットメソッドのことね。
設計おかしいだろ、それ
878デフォルトの名無しさん:2007/11/06(火) 19:42:49
本気で関係ねぇよw
879デフォルトの名無しさん:2007/11/06(火) 21:55:36
>>867
自分で定義してるさ
自分専用のソフト作るときは他の環境なんか気にしないし
余計な#define書くのもめんどいんで自分の環境に合わせてる
manifestの有無がDLLのバージョンを決めてるのは知らなかった
作ったときに決まってると思ってたよ
880デフォルトの名無しさん:2007/11/06(火) 22:27:11
DLLのバージョンを指定するのがmanifestの第一の目的。
881デフォルトの名無しさん:2007/11/06(火) 23:03:17
なんかXPが出たあたりからSDKの WINVER と _WIN32_WINNT と _WIN32_IE の使い方が曖昧になってる気がする。
これとか。
#if (_WIN32_WINNT >= 0x0501)
#define COMCTL32_VERSION 6
#else
#define COMCTL32_VERSION 5
#endif

そもそもが_WIN32_IEじゃなくて_WIN32_SHELLと_WIN32_COMCTLにすべきだった気もするが。
882デフォルトの名無しさん:2007/11/07(水) 00:14:42
>>881
コモンコントロールを配布していたのが、IEだったから。
883デフォルトの名無しさん:2007/11/07(水) 00:40:01
かなり基本的なことなのですが、質問させてください。
アイコンをデフォルトのものから変えたいのですが、タスクバーとexeファイルのアイコンは指定したアイコンになるものの、
タイトルバーとalt+tabを使用したときに出てくるアイコンはデフォルトのままでアイコンが変更されません。
どのようにしたらアイコンを変更できるでしょうか?
環境はXP Home SP2、Visual Studio 2005 Academic Editionです。
↓はプロジェクトファイル含めたすべてのファイルです。
http://kossie.net/up/src/kos1066.zip
以下はソースの一部です。
WNDCLASSEX wcex; /* ウインドウクラス登録用の構造体 */

/* ウィンドウクラスの登録 */
wcex.cbSize =sizeof(WNDCLASSEX);
wcex.style =0;
wcex.lpfnWndProc =WindowProc;
wcex.cbClsExtra =0;
wcex.cbWndExtra =0;
wcex.hInstance =hInstance;
wcex.hIcon =LoadIcon(hInstance, _T("IDI_ICON"));
wcex.hCursor =LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName =NULL;
wcex.lpszClassName=_T("Haribote");
wcex.hIconSm =LoadIcon(hInstance, _T("IDI_ICONSM"));

//IDI_ICONは,32*32のicoファイル
//IDI_ICONSMは16*16のicoファイル
884デフォルトの名無しさん:2007/11/07(水) 00:52:46
アイコンがかわいいな

MAKEINTRESOURCE( IDI_ICONSM) 
ちゃんとデバッガでhIcon とかの戻り値確認汁
885デフォルトの名無しさん:2007/11/07(水) 01:25:06
1個の .ico ファイルに 32x32 と 16x16 の両方を格納できるから、そうしたほうがいいんでない
886デフォルトの名無しさん:2007/11/07(水) 02:28:58
正直、こういうのって猫に LoadIcon(hInst, "MYICON") とか書いてあるのが問題な気がする。
リソースIDに文字列なんて実際ほとんど使うこと無いし。

あのサイトはWin32API勉強中だった頃は多少は世話になったが今見るとサンプルとしての質が悪いなと思った。
887デフォルトの名無しさん:2007/11/07(水) 02:39:37
問題はないだろ
#defineで定義してない場合はそれであってるんだから
作り手側の問題だろ
888デフォルトの名無しさん:2007/11/07(水) 03:05:32
ありがとうございました。無事表示することができました
>>884
ありがとうございました。

デバッカについては、一応みていたものの、戻り値が16進数の数字だったり、他の正常なWNDCLASSEXのメンバも「エラーです、式を評価できません」だったりで、
今回はデバッカじゃ何も分からんと決め付けてググることに勤しんでました
なるほど、16進数でもよくみてみれば、0x00000000と、何も入ってない?ことが分かりそうなものですね
…うーん、すいません、やっぱりちょっとこの値から異常に気づくのは難しいです
>>885
16*16のアイコンデータがicoに入ってないことが、表示できないことが、表示されない原因だと最初は思っていました
(それも原因ではあったのですが、)32*32と16*16のアイコンデータをicon.icoに埋め込んでも症状の解消ができなかったので、
2つのicoファイルに分けて、WNDCLASSをWNDCLASSEXに拡張してみた、と試行錯誤したときの名残です(苦笑)
アドバイスに従いまして、うまく表示できたついでに、その点も修正してみました。

蛇足ですが、以下が修正したソースの一部です
/* ウィンドウクラスの登録 */
wcex.cbSize =sizeof(WNDCLASSEX);
wcex.style =0;
wcex.lpfnWndProc =WindowProc;
wcex.cbClsExtra =0;
wcex.cbWndExtra =0;
wcex.hInstance =hInstance;
wcex.hIcon =LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
wcex.hCursor =LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName =NULL;
wcex.lpszClassName=_T("Haribote");
wcex.hIconSm =NULL;
889デフォルトの名無しさん:2007/11/07(水) 06:18:55
>>886-887
漏れは >>886 の意見に同意
判ってて鑑賞する分には問題ないんだが
初心者が参考にするお手本としては最悪
こんなので勉強して悪い癖がついたら大変
890デフォルトの名無しさん:2007/11/07(水) 06:56:33
>>889
悪い癖ってなんだよ
猫を何だと思ってんだ
猫だけじゃなく他の似たようなサイトも含めMSDNじゃ無いんだぜ
あくまでサンプルソースだろ勉強する上での一例にしか過ぎない
891デフォルトの名無しさん:2007/11/07(水) 07:00:53
猫は初心者のバイブルでつ
892デフォルトの名無しさん:2007/11/07(水) 07:01:36
MSDNが一番ひどい件
893デフォルトの名無しさん:2007/11/07(水) 07:08:56
よく理解もせずソースをそのまま使って>>883みたいに
うまく表示出来ませんなんて
さて悪いのはソースを公開した方それとも作り手側どっち
894デフォルトの名無しさん:2007/11/07(水) 07:15:35
猫か、学び始めに見ていた記憶があるな。
こんなコードがあった気がする

char *ptr = TEXT("Hello,world") ;
895デフォルトの名無しさん:2007/11/07(水) 07:15:44
猫のサンプルは実用性が無さ過ぎる
せいぜいMSDNの日本語版的に見るぐらいで初心者の為になるとも思えない
896デフォルトの名無しさん:2007/11/07(水) 07:28:23
初心者のサンプルなんてあんなもの
関数の詳細が知りたいならMSDNを使えと言っている
897デフォルトの名無しさん:2007/11/07(水) 07:37:40
>>894
そいつをUnicodeでコンパイルしてエラー
そして調べる理解する
勉強になるじゃねぇかw
898デフォルトの名無しさん:2007/11/07(水) 07:41:56
文字列リテラルはconstにすべきじゃね?
899デフォルトの名無しさん:2007/11/07(水) 07:52:45
constでもstaticでもご自由に
900デフォルトの名無しさん:2007/11/07(水) 09:06:20
MSDNも日本語版は役に立ってるのか立ってないのか分からん
どーういう立場だあれは
901デフォルトの名無しさん:2007/11/07(水) 09:19:16
悪いのは間違える頭の悪い初心者に決まってる
902デフォルトの名無しさん:2007/11/07(水) 09:48:49
>>895
実用性ってTipsみたいなのを言ってるのか?
お門違いだろ
903デフォルトの名無しさん:2007/11/07(水) 10:07:56
おまえら優しいな
>>883なんか初心者以前の問題
アイコン、アイコンと連呼しているくせにどうしてLoadIconを調べないのか不思議
俺ならこんな奴はスルーだけどな
904デフォルトの名無しさん:2007/11/07(水) 10:20:03
猫より能力が低かったというだけの話だな
905デフォルトの名無しさん:2007/11/07(水) 18:30:51
なんだかんだで皆ねこ好き
906デフォルトの名無しさん:2007/11/07(水) 18:35:12
んなこたーない
907デフォルトの名無しさん:2007/11/07(水) 23:34:15
Win32APIは泥臭くさくてナンボ
908デフォルトの名無しさん:2007/11/07(水) 23:39:45
泥臭いのと質が悪いのは違うw
909デフォルトの名無しさん:2007/11/08(木) 10:34:20
INVALID_HANDLE_VALUEが帰ってくるのが一番納得いかない
NULLでいいじゃないか
どうせエラーはGetLastErrorなんだし。
910デフォルトの名無しさん:2007/11/08(木) 14:10:49
だって0は「空ハンドル」だもの。
911デフォルトの名無しさん:2007/11/08(木) 14:35:02
俺は逆にハンドル関係の関数は全部INVALID_HANDLE_VALUEで良いようなと思った
912デフォルトの名無しさん:2007/11/08(木) 14:42:06
Unixだと0は正当なfile descripterだったりするから……てのはあるのかも
Win32なら0で良さげに思えるねえ
913デフォルトの名無しさん:2007/11/08(木) 14:53:57
成功で0、失敗でそれ以外ってのも何だかなー
どうせGetLastError呼ぶからー
914デフォルトの名無しさん:2007/11/08(木) 15:15:33
失敗した時のファイルハンドルはINVALID_HANDLE_VALUEで、ファイルマッピングハンドルはNULLってのがややこしい

それより設計の悪さつったらやっぱこれだろ
(HBRUSH)(COLOR_WINDOW + 1);

なぜCOLOR_***定数を1からスタートしなかったのか理解に苦しむ
915デフォルトの名無しさん:2007/11/08(木) 17:51:20
それよりも、そういう定数をHBRUSHにキャストして使えるという設計もどうかと思う。
中身はこうでもなんでもいいから、きちんとDLL関数として括り出せよと言いたい。
HBRUSH WINAPI GetSysColorBrush(UINT c)
{
return c < COLOR_MAX ? (HBRUSH)(c + 1) : 0;
}
916デフォルトの名無しさん:2007/11/08(木) 18:38:29
>>915
GetSysColorBrushならAPIにあるじゃん
余計なAPI呼び出しのオーバーヘッドを減らす為にHBRUSHにキャストしてるだけだろうし
917デフォルトの名無しさん:2007/11/08(木) 22:16:40
すみません。
MessageBoxで開いたメッセージボックスをコードで閉じる方法あるでしょうか?
SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, ?);
なんかでいけるかと思ったのですが、だめでした。
918デフォルトの名無しさん:2007/11/08(木) 22:38:24
>>916
ところで本物のGetSysColorBrushって一体何やっているんだろう。
915みたいな作りだったら、ウィンドウ背景に使うななんて書かれるはずがないし。
919デフォルトの名無しさん:2007/11/08(木) 23:44:58
デバッガで追えば判る話だけど
reactos ttp://www.reactos.org/generated/doxygen/d9/dc7/user32_2windows_2draw_8c.html#a12
wine ttp://source.winehq.org/source/dlls/user32/sysparams.c#L2945

>>909
HANDLEの戻り値が2種類ある理由はTHE OLD NEW THINGに書いてある
ファイルを開くためにCreateFileを呼ぶ理由はTHE OLD NEW THINGに書いてある
GetCurrentDirectoryとGetSystemDirectoryの引数の順序が違う理由はTHE OLD NEW THINGに書いてない
920デフォルトの名無しさん:2007/11/09(金) 00:00:45
WMPはバックグラウンドでもVK_MEDIA_PREV_TRACKとかに反応するけど、どういう処理してるの?
921デフォルトの名無しさん:2007/11/09(金) 00:31:23
>>917
ハンドルまで取得できているなら
簡単な話しだ
922デフォルトの名無しさん:2007/11/09(金) 03:01:00
ttp://pc.nikkeibp.co.jp/article/NPC/20070308/264269/?ST=pc_column_print
に「図3 Vistaから導入されたタイトル付メッセージボックス」とあるのですが、
これはどのAPIの機能なのですか?
user32.dllをのぞいてもMessageBox系に新しいAPIは見つからず
923デフォルトの名無しさん:2007/11/09(金) 03:20:26
924917:2007/11/09(金) 08:55:17
>>921
たぶん、ハンドルが取得できないんだと思います。
メインのウインドウのハンドルhWndからGetWindow(hWnd, GW_CHILD)を使って
取れるかと思ったら、違うのかもしれません。
教えてください。
925デフォルトの名無しさん:2007/11/09(金) 09:17:28
オーナーウィンドウと親ウィンドウの違いを理解した方が早い
メッセージボックスは子ウィンドウじゃない
926デフォルトの名無しさん:2007/11/09(金) 09:57:01
>>918
HBRUSH WINAPI GetSysColorBrush(int nIndex)
{
  return nIndex < COLOR_MAX ? g_hbrSysColor[nIndex] : NULL;
}

>>924
MessageBoxを呼ぶ直前にWH_CBTフックを仕掛ける
クラス名#32770のウィンドウが生成されたらそれがMessageBoxのウィンドウ

プログラムから閉じるなら
SendDlgItemessage(上の方法で取得したウィンドウ, IDOK, BM_CLICK, 0, 0);
のようにすればいい。IDOKをIDYESなどに変えれば以下略
927デフォルトの名無しさん:2007/11/09(金) 11:58:23
初心者なんですが質問です。
メモリデバイスコンテキストにディスプレイの状態を保存して
それの一部を拡大したものを表画面に描写したいんです。
以下のようなプログラムを作成したのですが画面に変化がありません。
なにがおかしいのでしょうか?よろしくお願いします。


//メモリデバイスコンテキストを作る
hdc=GetDC(0);
iWidth=GetDeviceCaps(hdc,HORZRES); /* 画面の大きさ取得 */
iHeight=GetDeviceCaps(hdc,VERTRES);
hBitmap=CreateCompatibleBitmap(hdc,iWidth,iHeight);
hMemDC=CreateCompatibleDC(hdc);
ReleaseDC(0,hdc);
SelectObject(hMemDC,hBitmap);
DeleteObject(hBitmap);

//メモリデバイスコンテキスト内で一部を拡大
SetStretchBltMode(hMemDC , COLORONCOLOR);
StretchBlt(
hMemDC , po.x-150 , po.y-150 , 300 , 300 ,
hMemDC , po.x-(150/2) , po.y-(150/2) , (150/2)*2 , (150/2)*2 , SRCCOPY
);
//表画面へ
BitBlt(hdc,0,0,iWidth,iHeight,hMemDC,0,0,SRCCOPY);
928デフォルトの名無しさん:2007/11/09(金) 12:00:57
>DeleteObject(hBitmap);

これじゃねえの
なんでここでDelete?
929デフォルトの名無しさん:2007/11/09(金) 12:06:51
ついでにこれが一つのイベント中の描画だとしたら
7行目のReleaseDCでhdcが無効になってるから、最後の行のBitBltは確実に失敗してるだろう
930デフォルトの名無しさん:2007/11/09(金) 12:09:11
拡大する前にhMemDCにhdcBitBltからしないと
メモリデバイスコンテキストが真っ黒な気がするんだけど。
931デフォルトの名無しさん:2007/11/09(金) 12:09:38
>メモリデバイスコンテキストにディスプレイの状態を保存して

保存するコードがないような
932デフォルトの名無しさん:2007/11/09(金) 12:14:42
こいつにプログラム教えた奴ちょっと出て来い( #^ω^)
933デフォルトの名無しさん:2007/11/09(金) 12:33:12
LoadLibrary(DLLファイル名A)
やって、
FreeLibrary(ハンドル)
やってから、
DeleteFile(DLLファイル名A)
やっても、ファイルが削除されない。エクスプローラーから見える。
で、開こうとすると「他のアプリが使ってる」って出る。
プロセスを終了させると、自動的にファイルが消えるんだ。
これって仕様っぽいけど、なんとかDLLファイルを削除できない?
934927:2007/11/09(金) 12:35:09
↓のような感じに直してみたんですが、やはりできません。
まだ他におかしいところはありますでしょうか?
何度も申し訳ありません。

//メモリデバイスコンテキストを作る
hdc=GetDC(0);
iWidth=GetDeviceCaps(hdc,HORZRES); /* 画面の大きさ取得 */
iHeight=GetDeviceCaps(hdc,VERTRES);
hBitmap=CreateCompatibleBitmap(hdc,iWidth,iHeight);
hMemDC=CreateCompatibleDC(hdc);
SelectObject(hMemDC,hBitmap);

BitBlt(hMemDC,0,0,iWidth,iHeight,hdc,0,0,SRCCOPY);
//メモリデバイスコンテキスト内で一部を拡大
SetStretchBltMode(hMemDC , COLORONCOLOR);
StretchBlt(
hMemDC , po.x-150 , po.y-150 , 300 , 300 ,
hMemDC , po.x-(150/2) , po.y-(150/2) , (150/2)*2 , (150/2)*2 , SRCCOPY
);
//表画面へ
BitBlt(hdc,0,0,iWidth,iHeight,hMemDC,0,0,SRCCOPY);
935デフォルトの名無しさん:2007/11/09(金) 12:40:06
>>933
>プロセスを終了させると、自動的にファイルが消えるんだ。
>これって仕様っぽいけど、なんとかDLLファイルを削除できない?
「自動的にファイルが消える」=「DLLファイルが削除された」だと思うのだが、何が不満なのかね。
936デフォルトの名無しさん:2007/11/09(金) 12:41:51
描写とか言ってる時点で(ry
937927:2007/11/09(金) 12:46:37
すいません、無事に動作しました。
プログラムのほかの部分が原因でした。
ありがとうございました。
938デフォルトの名無しさん:2007/11/09(金) 12:57:54
>>935
だからプロセスを終了させない間は、ファイルが消えないから
その間に同じファイル名で、CreateFileするとエラーになるんだよ
939デフォルトの名無しさん:2007/11/09(金) 13:16:04
何かから参照を受けている

これ以外の理由は無い
940デフォルトの名無しさん:2007/11/09(金) 13:17:59
そもそも起動中にDLL削除して再作成するってどういう理由なんだ?
シェアウェアのプロテクトか何かか?
941デフォルトの名無しさん:2007/11/09(金) 13:21:29
>>940
だから多分、Win32で動的コードを規制する為か何かでやってんだと思うんだ。
だから隠しAPIで可能だと思うのだよ君。
942デフォルトの名無しさん:2007/11/09(金) 13:38:37
プロテクトなら予め暗号化しておいたマシン語コードを必要時にメモリ中に展開して実行とかでいいんじゃね?
>>941にそのスキルがあるかどうかは知らんが

何れにしろそんなOS依存しそうな事するぐらいならソフトの完成度上げてろと思う
943デフォルトの名無しさん:2007/11/09(金) 13:47:43
>>938
別プロセスでLoadLibraryしておいて、
違う名前でCreateFileしとけばいいじゃん。
で、別プロセスが死んでから名前を変えればOK。
944デフォルトの名無しさん:2007/11/09(金) 13:56:25
LoadLibraryじゃなくてもマップする方法は色々ある品
945デフォルトの名無しさん:2007/11/09(金) 14:28:10
>>938
試しに作ってみたがエラーにならねぇぞ?
DeleteFileで即座にDLLが消えてるし
他の部分に原因があるのだろ
946デフォルトの名無しさん:2007/11/09(金) 14:45:14
LoadLibrary,FreeLibraryの呼び出し回数と(2回以上やってるとか…)
成功,失敗を調べてみれば?
947デフォルトの名無しさん:2007/11/09(金) 14:53:42
その前に実際にはファイルは消えてるのにエクスプローラ上で見えてるだけとかじゃないだろうな
948デフォルトの名無しさん:2007/11/09(金) 17:54:26
アンチビールスアプリとかその他CreateRemoteThread等面倒なフックや
インジェクション等するものが動いてるとその辺の動作は変わりそうだなぁ。
949デフォルトの名無しさん:2007/11/09(金) 18:33:48
>>917
変に複雑な実装するより、メッセージボックスに似せたダイアログボックスを定義して使ったほうがいいと思うよ。
950デフォルトの名無しさん:2007/11/09(金) 19:09:03
MessageBoxは一見すればシンプルだが内部では相当ややこしいことやってるぞ。
余談だがMessageBox表示中にCtrl+Cでタイトルやテキストをコピーできることは知られてるんだろうか。
951デフォルトの名無しさん:2007/11/09(金) 19:11:22
たまに話題になるよねそれ
952デフォルトの名無しさん:2007/11/09(金) 19:16:22
>>950
Windowsを使い始めて10年以上経つが今初めて知った。
たぶん言われなければ一生気付かなかったと思う。
953デフォルトの名無しさん:2007/11/09(金) 19:28:45
>>950
俺も今初めて知った
954デフォルトの名無しさん:2007/11/09(金) 19:38:10
IEのページのプロパティや検索などのダイアログがCtrl+Pで印刷できることは?
955デフォルトの名無しさん:2007/11/09(金) 20:03:15
IEのダイアログはHTMLベースだからな
956デフォルトの名無しさん:2007/11/09(金) 20:18:21
>>945
原因は、デバッガのようだった。
デバッガ使わないで実行さしたら、即座に消えた。
困るなデバッガ
957デフォルトの名無しさん:2007/11/09(金) 21:48:26
>>956
頭悪いくせにデバッガのせいにするな
958デフォルトの名無しさん:2007/11/09(金) 22:24:58
>>954-955
印刷ダイアログを印刷しようと思ってCtrl+P押しても反応しないんだけど

959デフォルトの名無しさん:2007/11/09(金) 22:43:00
それはHTMLベースじゃないんだね
960デフォルトの名無しさん:2007/11/09(金) 23:16:27
印刷や開くはコモンダイアログだろ
961デフォルトの名無しさん:2007/11/10(土) 01:04:02
>>912
Win32のHANDLEも0は有効な値になりうる
だからこそINVALID_HANDLE_VALUEは-1なんだが
962デフォルトの名無しさん:2007/11/10(土) 02:18:45
>>961
全てのHANDLEの失敗値を統一してくれればNULLでもINVALID_HANDLE_VALUEでも構わないんだけどな

File, Find, Mailslot, PipeはINVALID_HANDLE_VALUEだが
Mutex, Event, Semaphore, FileMapping, ThreadはNULLだったりするし

閉じる時は同じCloseHandleを使うのになんでこんな事になってるのかねぇ
963デフォルトの名無しさん:2007/11/10(土) 02:54:58


カーネルオブジェクトはNULLハンドルが無いのか
964デフォルトの名無しさん:2007/11/10(土) 02:59:47
TrackMouseEventとWM_MOUSELEAVEについて質問です

マウスボタンを押したままウィンドウ外に出たとき、
同スレッドの他のウィンドウに出たときはWM_MOUSELEAVEが来るんですが
他のプロセスや他のスレッドで走ってるウィンドウ上に直にでると来ません。
(マウスボタンを押してないときは正常です。キャプチャ廻り?)

ウィンドウ外にでたのを感知してドラッグドロップを開始したいんですが
どういった対処方があるでしょうか。
965デフォルトの名無しさん:2007/11/10(土) 03:07:41
SetCaptureでググってみる
966デフォルトの名無しさん:2007/11/10(土) 03:07:57
マウスをキャプチャしといて WindowFromPoint で調べればいいんじゃない
967デフォルトの名無しさん:2007/11/10(土) 14:42:27
キャプチャされてると
ウィンドウ外でもWM_MOUSEMOVEが来るんですね(;´Д`)
フラグがごちゃごちゃしそうですがなんとかできました。
ありがとうございました。
968デフォルトの名無しさん:2007/11/10(土) 17:09:04
あのさ、これってWin32の質問板のここでいいかどうか分かんないけど、
いつもここで聞いてるから、質問させてもらって悪いけど(スマヌ
立方体とか3次元の図形を描画する関数ってどこかにあるんでしょうか?
たとえば2Dの図形なんかだと、Rect関数で矩形を、Ellipseで楕円を、その他諸々
GDIとして実装されてますよな?
プラットフォームSDKのOpenGLには2Dの関数しか載ってないし・・

MersenneTwisterとRandの比較っていうの?よく教科書に載ってる感じのな
ああいうのをやろうと思ったんだけど、立方体をどうやってつくろうかなって

おバカな質問ですまんけど、自分で描けとかいうのは無しで頼む
OpenGLとかDirectXになるんでしょうか?
969デフォルトの名無しさん:2007/11/10(土) 17:19:08
>>968
テキストで出力して
3D のビューワで見ればいいんじゃないだろうか?
970デフォルトの名無しさん:2007/11/10(土) 18:11:52
>>968
そのためにあるんだから、OpenGLかDirectX使うべし
使いたくないなら自分で描くしかない
971デフォルトの名無しさん:2007/11/10(土) 18:27:13
高校レベルの数学で余裕で座標計算できるだろ。
どんだけ脳が小さいんだyo
972デフォルトの名無しさん:2007/11/10(土) 18:54:20
中学生だからまだ習ってないのだろ
973デフォルトの名無しさん:2007/11/10(土) 19:27:41
これや
http://www.vector.co.jp/soft/win95/net/se222092.html
これって
http://www.vector.co.jp/soft/win95/util/se332635.html
本来のそのアプリでのマウスのクリックイベント処理を書き換えてるんですよね?
そういった操作をするためのWin32API関数名を教えてください
974デフォルトの名無しさん:2007/11/10(土) 19:59:59
>>962
「なんで」は>>919によるとoldnewthingに書いてるらしい
未見だけど
975デフォルトの名無しさん:2007/11/10(土) 20:12:08
>>974
これか
ttp://blogs.msdn.com/oldnewthing/archive/2004/03/02/82639.aspx

じゃあなんでOpenFile/_lopen/_lcreatは失敗時に-1を返すんだよ
って疑問に変わっただけだな
976デフォルトの名無しさん:2007/11/10(土) 20:21:26
POSIXのopen/creatをベースにしてるからじゃね?
これらはエラー時に-1を返す。
OpenFileは単にそれらに合わせただけかな。
977デフォルトの名無しさん:2007/11/10(土) 20:34:27
Bitmapをボタンにすることって出来ますか?
978デフォルトの名無しさん:2007/11/10(土) 20:40:52
BS_BITMAPなりBS_OWNERDRAWなり好きにどうぞ
979デフォルトの名無しさん:2007/11/10(土) 20:46:21
.NETのProcess.MainWindowHandleでいうプロセスのメインウィンドウとは、
どういう条件のものでしょうか?
980デフォルトの名無しさん:2007/11/10(土) 21:10:42
Win32的にはそういう概念は無いと思う。
.NETレベルで適当に管理してるんじゃないかな。
981デフォルトの名無しさん:2007/11/10(土) 21:24:29
>>979
Reflctorでみたところ
スレッドのウィンドウでオーナーのない可視ウィンドウを見てるみたいだね
982デフォルトの名無しさん:2007/11/10(土) 21:28:53
誰か
一万年と二千年前から次スレ立てて
983デフォルトの名無しさん:2007/11/10(土) 21:42:15
>>976
つかWin32のOpenFile/_lopen/_lcreatは内部でCreateFileを呼び出すだけの
実装じゃなかったっけ
984デフォルトの名無しさん:2007/11/10(土) 22:33:24
人の話をよく聞けよって言われない?
985デフォルトの名無しさん:2007/11/10(土) 22:41:56
>>983
普通はそう実装するだろうし、それがINVALID_HANDLE_VALUEの理由かと。
あくまでHFILEとHANDLEの一対一対応を目指したのだと思う。
……反対にCreateFileの中で振り分けられている可能性も無きにしも非ずだが。
986デフォルトの名無しさん:2007/11/10(土) 22:43:07
>>973
SetWindowsHookEx

Win32API質問箱 Build59
http://pc11.2ch.net/test/read.cgi/tech/1194701996/
987デフォルトの名無しさん:2007/11/10(土) 22:47:03
ここでグダグダ言ってる奴ってまともにプログラム組めるのか?
APIのリターンコードに文句付けてる暇があったら、自分好みのコードを返すようなラッパー
でも作ったほうが早いんじゃないの?
988デフォルトの名無しさん:2007/11/10(土) 22:47:54
それはくだすれでやるべきと思われ
989デフォルトの名無しさん:2007/11/10(土) 22:51:53
趣味でやってる時はどうでもいいけど仕事だったら
API のリターンコードのためだけに自作ライブラリを持ち込まないで
調べるの面倒だから

   ヵチヵチ  ,!ヽ、
  ー‐─-_,..._,:,  '^`;
  ⌒⊂ソー-ャぃ ’  ノ <面倒だニャ
      r‐'"~ ` `i
      ` ゙̄~"^
990デフォルトの名無しさん:2007/11/10(土) 23:33:18
HANDLEでINVALID_HANDLE_VALUEだったりNULLだったり
BOOLで0または0以外
BOOLで0、0以外または-1 (GetMessage)
BOOLで返値をUINTにキャスト (TrackPopupMenuなど)
LONG (レジストリAPIなど)
HRESULT (COM系)
DWORD_PTRで返値をHIMAGELISTにキャスト (SHGetFileInfo)

こんな酷い設計だと文句の一つも言いたくなるだろ
991デフォルトの名無しさん:2007/11/10(土) 23:37:51
>>986
ありがとうございます
992979:2007/11/10(土) 23:57:06
>>980 >>981
.NET方言でしたか。ありがと
993デフォルトの名無しさん
>>990
HINSTANCEで整数型へキャスト (ShellExecute)
NTSTATUS(NTネイティブ関数)

最近になって追加された関数は(NTSTATUS系を別として)HRESULTで統一されているみたいだけどね。