Win32API質問箱 Build46

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2デフォルトの名無しさん:2006/09/25(月) 13:21:06
3デフォルトの名無しさん:2006/09/25(月) 13:23:02
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
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デフォルトの名無しさん:2006/09/25(月) 13:24:28
>>1
5デフォルトの名無しさん:2006/09/25(月) 13:25:15
6デフォルトの名無しさん:2006/09/25(月) 13:34:33
>>1
7デフォルトの名無しさん:2006/09/25(月) 13:49:22
>>1
O2
8デフォルトの名無しさん:2006/09/25(月) 13:56:23
勝手に追加

MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
http://msdn.microsoft.com/library/
http://msdn2.microsoft.com/en-us/library/

おまけ;Windows SDK for Windows Vista RC1の文書。
http://windowssdk.msdn.microsoft.com/en-us/library/
9デフォルトの名無しさん:2006/09/25(月) 15:26:14
>>1 乙
10567:2006/09/25(月) 17:06:55 BE:382270638-2BP(0)
567が10get
567がお礼に質問に答えるよ
11デフォルトの名無しさん:2006/09/25(月) 17:30:09
WindowsVistaで動作するアプリケーションを作成しています。
アプリケーションが動作している最中に権限の昇格を行いたいのですが、方法
がわかりません。例えばエクスプローラのようにファイルをコピーする際に権
限昇格を問うダイアログを表示させたいのです。
どなたか方法をご存知の方はご教授願います。
12567:2006/09/25(月) 18:24:25
あーそれは知らんな
13デフォルトの名無しさん:2006/09/25(月) 20:38:58
Vistaはやったことないけど
LogonUser
CreateProcessAsUser
あたりと思う
14デフォルトの名無しさん:2006/09/25(月) 22:37:17
残りメモリを取得できるAPIとかってありますか?
15デフォルトの名無しさん:2006/09/25(月) 23:06:41
>>11
多分このへん?

Windows Vista の User Account Control
http://blogs.wankuma.com/jitta/archive/2006/05/24/27760.aspx

翻訳元文書(の上位パッケージ)
Running with Special Privileges
http://windowssdk.msdn.microsoft.com/en-us/library/ms717802.aspx
16デフォルトの名無しさん:2006/09/25(月) 23:10:14
>>15はAPI的に超かいつまんで言うと、こんな感じのことが書いてある。

PrivilegeCheck
CredUIPromptForCredentials
ImpersonateLoggedOnUser
AdjustTokenPrivileges
17デフォルトの名無しさん:2006/09/25(月) 23:15:22
BITMAPファイルを読むプログラムを書いてます
BITMAPFILEHEADの次の
・BITMAPCOREHEADER
・BITMAPINFOHEADER
・BITMAPV4HEADER
・BITMAPV5HEADER
のどれかの構造体のメンバの先頭のsizeでこの4つの構造体の区別をしています。

で質問なのですが、sizeの次のメンバ(Width,Height)の情報を読むときに
if(sizeで判断){
BITMAPCOREHEADERの場合
}else{
BITMAPINFOHEADER,BITMAPV4HEADER,BITMAPV5HEADERの場合
}

としています。先頭のメンバはこの4種類の構造体の相対的に同じアドレスに配置されるのは
わかるのですが、2番目、3番目のWidth,Heightもした3つの場合、相対的に同じアドレスにあると考えても
問題ないのでしょうか?構造体のメンバの間に隙間が入ったりしないのでしょうか?
18デフォルトの名無しさん:2006/09/25(月) 23:27:41
同じ型同じ並びなら隙間が入っても同じだろ…
19デフォルトの名無しさん:2006/09/25(月) 23:32:10
>>15-16
UAC環境下でrunasしてもやっぱりUACで制限されたアカウントしか得られないんだけど。
昇格のダイアログをプログラムから呼び出すことってできないの?
requireAdministratorを指定したマニフェストを付けたexeを起動するしかない?
exeに署名してないとダメらしいんだが。
20デフォルトの名無しさん:2006/09/25(月) 23:54:22
>>19
MSいわく、管理者権限が必要な場合は
その処理だけ別のプログラムに分離して
requireAdministratorを指定しろ、とのこと。

署名はなくても昇格ダイアログは表示される。
ユーザーがどう感じるかは別として…。

署名が必要なのは、昇格していないアプリから昇格しているアプリに
Windows メッセージを投げられるようにするやつ(uiAccessだっけ?)。
こっちは昇格ダイアログが表示されないので、署名が必須ってことらしい。
21デフォルトの名無しさん:2006/09/26(火) 00:01:17
>>19
このへんで同じようなこと嘆いている奴がいるな。
> There really needs to be an API that will prompt the user to move the application to an elevated privilege status.

http://blogs.msdn.com/uac/archive/2006/01/13/512776.aspx
22デフォルトの名無しさん:2006/09/26(火) 00:05:50
>>11
自分のやりたいタスクを別モジュール化して、CreateProcessAsUserで別ユーザーで呼び出しましょう。
そのときに、特権レベルを偽装してあげると、UACが働くので、ダイアログが表示される。
ただし、UACダイアログで入力したユーザー情報を取ることは不可能。
23デフォルトの名無しさん:2006/09/26(火) 03:18:17
> ただし、UACダイアログで入力したユーザー情報を取ることは不可能。
CreateProcessAsUserに渡すトークンはどうやって作るの?
CredUIPromptForCredentialsと昇格ダイアログで
パスワード2回入力させる必要があるってこと?
つーかSE_ASSIGNPRIMARYTOKEN_NAMEとSE_INCREASE_QUOTA_NAME
なんて昇格しないと持ってねーよ。
昇格したいから呼び出してるんだっつーの
24デフォルトの名無しさん:2006/09/26(火) 05:04:33
結局エクスプローラのコンテキストメニューの「管理者として実行」と同じことを
するにはどうしたらいいわけ? Microsoftだけが非公開APIでマニフェストで明示
されていないプログラムでも出したいときにUACのダイアログを出せるの?
SymantecのEUへの申し立てはむちゃくちゃだと今まで思ってたけどその通りなら
一理あるかもと思い始めてきた。
25デフォルトの名無しさん:2006/09/26(火) 09:30:03
INITCOMMONCONTROLSEXが、

INIT COMMON CONTROLS EXじゃなくて

INIT COMMON CONTROL SEXに見えるのは折だけか?
26567:2006/09/26(火) 09:33:46 BE:668972467-2BP(0)
やっと答えられる質問キタ
>>25
S と L に隙間があるように見えるかという質問ですね
たしかに見えるような気がします
27デフォルトの名無しさん:2006/09/26(火) 09:39:29
>>26
おまいって香具師はwwww
28デフォルトの名無しさん:2006/09/26(火) 10:08:20
>>24
>20 じゃダメなのか?

 マニフェスト付きの別 EXEにせずに、マニフェストも無いEXE内のコード
(DLL injection されたものやプラグインかもしれない)から UAC ダイアログを
出して昇格なんかできたら UAC の意味はほぼ全て失われるような気がする。

IE の脆弱性を利用してシステムにいたずらするコードが "Internet Exproler"を
名乗る UAC ダイアログを出して昇格するとか簡単にできちゃう。
2911:2006/09/26(火) 11:54:44
ご教授ありがとうございました。
権限昇格して行う処理を別EXEにするしかないんですね。
Visut対応は大変だ・・・orz
30デフォルトの名無しさん:2006/09/26(火) 18:58:47
やっぱVistaのソフトってXP以前のWindowsと下位互換性ないの?
XP以前のために作られたソフトはもちろんVistaでも動きますよね?
31デフォルトの名無しさん:2006/09/26(火) 19:00:46
物によっては動かないのもあるだろ
常識的に考えて
32デフォルトの名無しさん:2006/09/26(火) 19:07:08
セキュリティ面で厳しくなっているようなので、
そこの作りが甘いソフトには嬉しくないかもしれない。
33デフォルトの名無しさん:2006/09/26(火) 19:09:48
いや、そのへんを細かく制御してるソフトのが逆に動かなくなる可能性大。
34デフォルトの名無しさん:2006/09/26(火) 19:47:11
何で自分のPCで動かすソフトでセキュリティ云々と叱られにゃならんのか
最近のOSは糞すぎる
35デフォルトの名無しさん:2006/09/26(火) 19:50:55
なんかユーザ側から、このソフトは信頼できる的な設定とかできねーの?
自分用ツールとかも結構影響受けそうでブルーだ…
36デフォルトの名無しさん:2006/09/26(火) 19:52:41
そんな設定作ったら自滅だな
37デフォルトの名無しさん:2006/09/26(火) 20:44:42
>>28
自己解決しますた。
ShellExecute(hWnd, "runas", filename, param, NULL, nCmdShow);
でUACのダイアログが出ますた。
当然
ShellExecute(hWnd, "runas", "rundll32", " unsigned.dll,DoWhateverEvil", NULL, nCmdShow);
とか
ShellExecute(hWnd, "runas", "msiexec", "/i malware.msi", NULL, nCmdShow);
とかも余裕でできちゃって青緑のUACダイアログが出ます
(rundll32.exeやmsiexec.exeはMicrosoftの署名が付いてるから)。
これは「仕様」なのだそうです。
http://blogs.wankuma.com/jitta/archive/2006/07/19/33020.aspx
ShellExecuteの先で何やってるのか相変わらず謎なのが気にくわないですが、
当初の目的(エクスプローラと同じことをやる)は達成できたのでまた暇なときにでも
調べてみます。
38デフォルトの名無しさん:2006/09/26(火) 20:45:36
どうせみんなAdminで動かすだろ
39デフォルトの名無しさん:2006/09/26(火) 21:04:10
どうも今晩は、質問させてください

ListViewの左端何列かを固定して、残りの右側を
通常通り横スクロールできるようにしたくて
色々調べてたんですが無理っぽいので
ListViewを左右2つ作って、スクロールを連動させるようにしようと思いました。
で、ListView自体にスクロールバーがついてると、ListViewが二つあることがばれてしまう(?)ので
スクロールバーを非表示にして、スクロールバーコントロールを追加して制御しようと思いましたが
ListViewのスタイルにLVS_NOSCROLLをセットしてもスクロールバーが表示され
しかもヘッダの部分の表示がおかしくなってしまいました
マイクロソフトのサイトで調べてみても
ttp://support.microsoft.com/default.aspx?scid=kb%3Bja%3B137520
こんな感じでなんか日本語じゃなかったのでよくわかりませんでした

ListViewで列固定を実装する方法は無いでしょうか
よろしくお願いします
40デフォルトの名無しさん:2006/09/26(火) 21:38:46
>>38
VistaではAdminで動かしてもデフォルトで権限は標準ユーザーと同じ。
せめて「どうせみんなUAC切るんだろ」と言ってくれ
41デフォルトの名無しさん:2006/09/26(火) 22:40:37
>>37
権限昇格が必要なメニューとかボタンには、
Vistaのシールドアイコンをキャプションの隣に付加させるべし、
というガイドラインもある。
アイコンを付加するためのAPIもあるから調べてみて。

もっとも、内輪で使うだけならアイコンはなくてもいいかもしれないけど…。

しかしそういうVista用の処理が入ったアプリを2000やXPで動かすことができるのかね?
自分では試したことがないので知らないんだけど、誰か経験者いる?
42デフォルトの名無しさん:2006/09/26(火) 22:43:20
>しかしそういうVista用の処理が入ったアプリを2000やXPで動かすことができるのかね?
ハァ?
43デフォルトの名無しさん:2006/09/26(火) 22:46:41
IEでサブメニューの名前を付けて保存を選択した時の
ダイアログFolderViewのLMV_INSERTITEMWを殺したいのですが
やり方を教えてください。
44デフォルトの名無しさん:2006/09/26(火) 23:04:00
>>41
> しかしそういうVista用の処理が入ったアプリを2000やXPで動かすことができるのかね?
IDI_SHIELDの取得に失敗したら自前のを使う(か無視する)だけでしょ。
Button_SetElevationRequiredの正体は単に新メッセージを送るマクロだから
古い環境では無視されるだけだし。

ちなみに>>37をXPや2000で実行すると「別のユーザーとして実行」のダイアログが
現れる。
45デフォルトの名無しさん:2006/09/27(水) 03:42:42
IEの警告とか、ドライバインストール時の未署名の警告みたいに、
Readme.txtにUAC無効にしろって書いてあるソフト出てきそうだな。
46デフォルトの名無しさん:2006/09/27(水) 08:33:33
そもそもバージョンや環境により実装されてない可能性のあるAPI使う場合はインポートライブラリ使わずにLoadLibrary/GetProcAddress使って呼び出すだろ
47デフォルトの名無しさん:2006/09/27(水) 12:49:04
決め打ちでインポートして非対応環境では起動すらできないタコなコードの方が多いよ
48デフォルトの名無しさん:2006/09/27(水) 13:06:18
非対応環境だし。
49デフォルトの名無しさん:2006/09/27(水) 18:44:48
非対応だとうたっているなら問題ないようなw
50デフォルトの名無しさん:2006/09/27(水) 19:00:41
僕のアプリはすべての環境において非対応(^O^)
5143:2006/09/27(水) 19:01:54
52デフォルトの名無しさん:2006/09/27(水) 19:10:26
>>51
フックルーチンをつっこめれば、メッセージを殺すことはできるかも
53デフォルトの名無しさん:2006/09/27(水) 19:23:34
>>43
殺すとはどういうことをいってるの?
自分デメッセージ処理したらいいだけちゃうの?
54デフォルトの名無しさん:2006/09/27(水) 19:32:38
先生!質問です!!

dllmainさえ蹴ってくれれば勝手に動くよ系のdllがあったとして
あるプロセスがそのdllをloadlibraryしたあとfreelibraryとかまったく何もせずに
そのままexitprocessしちゃったら もしかしてメモリリークでプギャーですか?
それとも勝手に解放してくれるから気にしなくてもおk?
55デフォルトの名無しさん:2006/09/27(水) 19:39:26
>>54
まずは君に日本語ランゲージパックをインストールしないと駄目なようだ。
56デフォルトの名無しさん:2006/09/27(水) 19:53:55
>>51
フックオチンチンをつっこめれば、ソーセージを殺すことはできるかも
5743:2006/09/27(水) 19:57:09
>>53

ダイアログをサブクラス化して、非表示にして
POPUPメニューで保存先を選択してるのですが
選択フォルダにファイルが一杯あると、表示されるまで時間がかかるので
フォルダ内にファイルがあっても、空の状態で表示したいのですが
58デフォルトの名無しさん:2006/09/27(水) 20:01:14
ヒント: 糞仕様・糞設計
59デフォルトの名無しさん:2006/09/27(水) 20:01:57
そうですか
60デフォルトの名無しさん:2006/09/27(水) 20:24:41
>>54
>dllmainさえ蹴ってくれれば勝手に動くよ
それなんかヤバげ。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp
>The entry-point function should perform only simple initialization or termination tasks.
>Calling functions that require DLLs other than Kernel32.dll may result in problems that are difficult to diagnose.
>For example, calling User, Shell, and COM functions can cause access violation errors,
>because some functions load other system components.
61デフォルトの名無しさん:2006/09/27(水) 20:31:12
日本語でおk
62デフォルトの名無しさん:2006/09/27(水) 20:34:57
63デフォルトの名無しさん:2006/09/27(水) 20:45:09
CreateProcessで別のプロセスを起動させてるとか?
64デフォルトの名無しさん:2006/09/27(水) 20:51:36
>>60レスサンクス

いま考えてるdllのつかいかたとしては
dllmainでお爺様のお脳をファックするだけで終わりで
あとはいい感じにボケた爺様に呼ばれるまで待って
適当に介護する感じのあれを想定してるので
その件については多分おそらく大丈夫っぽいような気がなんとなくします。ありがとう
65デフォルトの名無しさん:2006/09/27(水) 21:21:40
コミュニケートする気が無いようだ。
6639:2006/09/27(水) 21:42:33
どうも今晩は。

やっぱり説明が下手で質問の内容すら伝えられなかったようなのであきらめました。
どうもありがとうございました。
67デフォルトの名無しさん:2006/09/27(水) 21:45:42
>>57
なんでわざわざダイアログをサブクラス化したりしてるのか謎い。
IEをつかわせつつ、IEの機能を限定してるとかって事?

だったら、create系メッセージから全力でメッセージ殺しまくればいいんじゃね?
要はダイアログが自分の初期化してるから、カレントディレクトリとか読んで重くなるってことだろ?
初期ディレクトリをファイルのないダミーディレクトリにして初期化させるとかって手もあるかも。
というか、保存先は自分が解ってるのに、なんでダイアログを初期化させてんの?
ますます解らん。w
根本の思想が理解できないし、そもそも何やりたいのさ。
68デフォルトの名無しさん:2006/09/27(水) 22:04:55
質問してる奴も言葉足らずなのばっかりだけどさ
読めない読めない言う奴って何がしたいの?
つーか読めないなら黙ってればいいじゃん。いやマジで。

読めないから質問を変えろ、俺が読めないから諦めろ、みたいな事いう奴もいるし
俺様が回答できる質問以外は人類未踏とでも言わんばかりのキチガイっぷり晒してる事にいい加減気付け
6957:2006/09/27(水) 22:22:05
>>67

元々は、IEの名前を付けて画像を保存などを選択した時に
保存しようとしているファイルのパスを取得して
独自の保存先選択POPUPメニューで保存したかったのですが
パスの取得が出来なかったので
現在は、IEの保存ダイアログを利用して独自POPUPメニューでダイアログに保存先をセットして
ダイアログのOKボタンを自動で押して保存しています

IEの保存ダイアログの、ディレクトリを表示前に変更出来るんですか?
70デフォルトの名無しさん:2006/09/27(水) 22:33:30
要するに究極的にはIEの保存ダイアログをやめて
自前のポッポアッポ型インターフェースに置き換えたいって事だよね

インポテーブルをハクってゲトズザーじゃだめなのかな
7157:2006/09/27(水) 23:36:18
>>70
ありがとう
調べながらやってみます。
72デフォルトの名無しさん:2006/09/27(水) 23:55:28
>>57->>71
69の目的ならIEの右クリックメニュー自体を拡張してしまうってのはどうなのかな?
例えば、↓見たいな感じで。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;177241
ttp://www.rocaz.net/rclick/howtomenu.html
ttp://www.ava-soft.com/products/srie/help/iemenuref.htm

ググればもっと情報があるし、サンプルも沢山あるよ。
もしかしたら69の目的そのもののサンプルも見つかるかも。
7357:2006/09/28(木) 00:29:19
>>72
試したことがあるんですが、
HPによっては正確に取得できない場合があったので
やめました。
IHTMLDocumentからの取得もやったのですが
IEにやってもらうのが、一番正確で楽だったので
この方法でやってます。
74デフォルトの名無しさん:2006/09/28(木) 03:13:23
WindowsXPでマイコンピュータをクリックして出るウィンドウ。
一番下にネットワークドライブの欄がありますよね。
ここに「切断されたネットワークドライブ」とあるのをクリックすると、
切断状態が解除され接続状態になりますけど、
これらの操作をAPIで行うのはどうやればいいのでしょうか?

ネットワークドライブのリストアップと、見つかったドライブのうち
なんらかの方法で接続状態に持っていく方法がわかればと思っています。
75デフォルトの名無しさん:2006/09/28(木) 03:33:13
WNetEnumResources, WNetAddConnection2
76デフォルトの名無しさん:2006/09/28(木) 06:55:31
しょぼい質問で恐縮ですがよろしくお願いします。

症状:矢印キーでコントロール間のフォーカスがエディットの部分だけ動かない

リソーススクリプト抜粋
BEGIN
EDITTEXT IDC_EDIT1,4,23,117,14,ES_RIGHT | ES_AUTOHSCROLL |
WS_EX_STATICEDGE | WS_TABSTOP | WS_GROUP
EDITTEXT IDC_EDIT2,3,62,117,14,ES_RIGHT | ES_AUTOHSCROLL |
WS_EX_STATICEDGE

PUSHBUTTON "決定ボタン",IDC_BUTTON1,196,17,79,25,WS_TABSTOP | WS_GROUP
PUSHBUTTON "終了ボタン",IDC_BUTTON2,195,49,79,25

CHECKBOX    "チェック1",IDC_CHECK1,6,9,119,14,WS_TABSTOP | WS_GROUP

CHECKBOX    "チェック2",IDC_CHECK2,6,47,119,14

END

EDITTEXTのコントロール間だけ、矢印キーを押してもフォーカスが移動しません。
グループ化して矢印キーでIDC_EDIT1とIDC_EDIT2間を移動させたいのですが、どの部分が問題なのかが
判明しません。グループ化も出来ていると思うのですが‥
77デフォルトの名無しさん:2006/09/28(木) 07:06:48
そりゃ矢印キーはエディットコントロールが使うから。
78デフォルトの名無しさん:2006/09/28(木) 07:22:56
>>77
なるほど。
なんでもグループ化すればそのコントロール間で作用すると思い込んでいました。
別の方法で打開策を考えようと思います。
ありがとうございました。
79デフォルトの名無しさん:2006/09/28(木) 11:15:35
>>78
別の方法で打開しない方がいいぞ。それはWindowsの一般的な挙動だ。
普通はコントロール間のフォーカス移動はタブキーを使う。
80デフォルトの名無しさん:2006/09/28(木) 11:44:48
タブはコントロール間ではなくタブグループ間の移動だが。
81デフォルトの名無しさん:2006/09/28(木) 12:31:46
CreateFile関数の質問です。
現在こうゆう風にパラメーターを使ってます。

CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, .....);

ファイル読み込み中も他のプロセスが書き込みできるように
FILE_SHARE_WRITE付けたのですが、この場合、もしファイルを
読み込んでいる途中に他のプロセスがファイルの上書きを
始めて、そっちの方がスピードが速かったら、読み込むデータも
途中から新たに上書きされたものになってしまうのでしょうか?


例:

現在のファイルの内容:
AAAAAAAAAA

他のプロセスが上書きする内容:
BBBBBBBBBB

FILE_SHARE_WRITEを付けると、読み込むファイルがこうなる可能性がある?
AAAAABBBBB
82デフォルトの名無しさん:2006/09/28(木) 12:49:02
83デフォルトの名無しさん:2006/09/28(木) 17:12:34
>>75
ありがとうございます。
84デフォルトの名無しさん:2006/09/28(木) 18:45:55
WinMainの第一引数のHINSTANCEとGetModuleHandle(NULL)の戻り値は常に同じ?
HINSTANCEをグローバル保存しておくソースを見るんで置き換えてグローバル減らしたいんですが
85デフォルトの名無しさん:2006/09/28(木) 18:58:34
GetWindowLong( hWnd, GWL_HINSTANCE);もずっと同じ

でもその1つのグローバル変数減らしてなんか得することあるの?
g_hInstance とかで保存したほうがぱっと見て内容がわかるから使いやすいと思うんだけど。

これは人それぞれか。
86デフォルトの名無しさん:2006/09/28(木) 19:31:23
>>85
ありがとう

得することは、多分、ないですけどね…
g_hInstance は事実上不変の定数だから管理とかないし
87デフォルトの名無しさん:2006/09/28(木) 21:54:24
俺は、<windowsx.h>のGetWindowInstance派。

でもATL/WTL使い出したら、ATLが内部でグローバルにインスタンスハンドルを持っていたので、
今はそれを使っている。
88567:2006/09/28(木) 23:07:28 BE:159279825-2BP(0)
オレは両方派
main.c内では
static HINSTANCE g_hInstance;
で他のファイルでは
GetWindowLong( hWnd, GWL_HINSTANCE);

これが一番でしょ
89デフォルトの名無しさん:2006/09/29(金) 12:39:50
リッチエディットボックスで右クリックメニューが出ないんですが、
エディットボックスと同じメニューを出すにはどうしたらいいですか?
90デフォルトの名無しさん:2006/09/29(金) 13:10:42
コンボボックスの表示について質問なんですが、どうしてもコンボボックスの項目が追加できなくて困っています。

リソースで
#define IDC_COMBO1 4000

IDD_COMBO DIALOGEX 50,25,281,87
FONT 9, "MS ゴシック"
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_SYSMENU
BEGIN
COMBOBOXIDC_COMBO1,4,23,117,14,CBS_DROPDOWNLIST | WS_VSCROLL
END

ソースファイルにて
DialogBox関数でDiaProcをプロシージャとして登録し、
そのDiaProcの中で
switch( msg )
{
case WM_INITDIALOG:
      if( SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_ADDSTRING,0,(LPARAM)"test") == CB_ERR)
return FALSE;
SendDlgItemMessage( hwnd,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,1,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,2,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,3,(LPARAM)"test");
SendMessage( GetDlgItem( hwnd,IDC_COMBO1 ),CB_INSERTSTRING,4,(LPARAM)"test");
return TRUE;
みたいなことをしてなんとか文字を出そうと試みてるんですが、実行してみるとコンボボックスのみが表示されてその項目が全く表示されません。
プレークポイントを使って確認した所確かに通っているし、エラーで終わっている様子もありません。
項目追加のメッセージなどを送って文字列を表示させてるつもりなんですが‥
91デフォルトの名無しさん:2006/09/29(金) 13:15:14
88のmain.cに泣いた
92デフォルトの名無しさん:2006/09/29(金) 13:19:12
>>88
(´;ω;`)ブワッ
9390:2006/09/29(金) 13:21:58
すみません。やっと分かりました。
自分はてっきり一行の高さを設定するだけでドロップダウンが機能して全て表示できるものだとばかり思ってました。
なにげにほとんど見えない項目をクリックしたらその文字が表示されました。
ここに質問として書いてちょっと間をあけたから頭の切り替えが出来たのかもしれません。
どうもお騒がせしました。
94デフォルトの名無しさん:2006/09/29(金) 14:10:00
DLL/EXE 共用でなんとかしようとすると、グローバル変数(のようなもの) じゃないと苦しいね。
DLL 内のコードで GetModuleHandle(NULL) すると、Loadされたアプリケーション側のインスタンス返すし

# それでも初期化するのに、エントリポイントいじくったりしないと都合が悪くなることも…
95567:2006/09/29(金) 14:57:33
よぉ
96567:2006/09/29(金) 15:05:28
>>93
あー、まあいいよ俺が許す
次からは気をつけろよ
97デフォルトの名無しさん:2006/09/30(土) 14:12:34
おーい
98デフォルトの名無しさん:2006/09/30(土) 16:19:51
VisualStudio.NET 2003 の VC++ で開発してます。

CreateWindowEx() で、 dwExStyle に WS_EX_NOACTIVATE を指定してビルドしたら、
「error C2065: 'WS_EX_NOACTIVATE' : 定義されていない識別子です。」と言われてしまいました。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_createwindowex.asp
にならって Winuser.h / Windows.h の両方をインクルードしているのですが・・・なぜでしょうか?
9998:2006/09/30(土) 16:20:32
VC++インクルードディレクトリを「WS_EX_NOACTIVATE 」で検索してみたのですが、やっぱり見つかりませんでした。
10098:2006/09/30(土) 16:22:07
たびたびすみません。

>>98のMSDNを良く読むと

 WS_EX_NOACTIVATE Windows 2000:

って書いてあります。
WindowsXP上で開発してるんですが、それが原因なのでしょうか?まさか〜
101デフォルトの名無しさん:2006/09/30(土) 16:51:43
WINVERとか_WIN32_WINNTじゃねえの?知らんけど。
102デフォルトの名無しさん:2006/09/30(土) 16:57:29
PlatformSDKには入ってるようだが。
103デフォルトの名無しさん:2006/09/30(土) 19:18:36
ダイアログベースのときの話なんだけど
WM_CREATEが来た時点でメイン窓のHWNDは確定してるのに、その子コントロールのHWNDが取得できない。

多分CreateWindow終わるまでは、まだ生成されてねーよってことだと思うんだけど、
この子コントロールのハンドル取得して初期化する場合に使えるメッセージってあります?
104デフォルトの名無しさん:2006/09/30(土) 19:20:56
WM_INITDIALOG
105デフォルトの名無しさん:2006/09/30(土) 19:52:41
わかりづらくてスマン 
要するに↓なカンジの作り方した場合だね
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win89.html
WM_CREATEでGetDlgItemとかしても成功しない

WM_CREATEやWM_INITDIALOGみたいに最初に1度だけ飛んできて
かつ子供のハンドル取れるメッセージってあるのかなーと思って(´・ω・`)
106デフォルトの名無しさん:2006/09/30(土) 19:54:49
WM_CREATEのデフォルトプロシージャを呼んだ後に処理すれば?
107デフォルトの名無しさん:2006/09/30(土) 20:21:19
WM_CREATEの中で、自身へ向けてメッセージをポストしておくというのはどう?
そうしたらそれを受け取るのはメッセージループが始まった後。
108デフォルトの名無しさん:2006/09/30(土) 20:27:23
なぜWM_INITDIALOGを使わない?
同じ事をするメッセージが複数必要なのか?
109デフォルトの名無しさん:2006/09/30(土) 20:40:43
CreateDialogのプロシジャの引数にNULL渡して、メッセージ処理は登録した窓クラス使うから
WM_INITDIALOGはこないのよ
そんなに>>105なら完全なダイアログベースにしとけってことか(´・ω・`)

素直に>>107か初期化専用の関数でもCreateDialog後に置いときます
110デフォルトの名無しさん:2006/09/30(土) 20:47:48
>>107も結構問題があるから気をつけろ。
ポストしたメッセージが、コントロールが作られるより早く飛んできても文句は言えない。
111567:2006/09/30(土) 21:00:59
久々に質問したいんだけどいい?
112デフォルトの名無しさん:2006/10/01(日) 01:22:19
>>109
FALSE を返すだけのダミーのダイアログボックスプロシージャを指定すれば、
WM_CREATE と WM_INITDIALOG の両方が飛んでくるようになるよ。
113105/109:2006/10/01(日) 01:43:35
112
114105/109:2006/10/01(日) 01:44:58
送信しちまった('A`)
>>112は面白いね 勉強になります
115567:2006/10/01(日) 07:42:04
しけてんなーここ。誰か反応しろよ
116567:2006/10/01(日) 10:47:14
頼むよー、誰か相手してくれよー。
学校じゃ俺が話しかけるとみんな逃げていくし、最近親も俺から目線そらすようになって・・・
2chだけなんだよ、おれが自分でいられるのは。
117デフォルトの名無しさん:2006/10/01(日) 12:03:44
何をいきなり。
誰か反応しろと言われてもどう反応すればいいんだ?
そんな、俺は何もしないけどお前ら俺に構ってくれというような奴は
嫌われて当然じゃないのか?
118567:2006/10/01(日) 12:49:32
知りたいのはVistaでWFP回避する方法なんだよー。
あと未署名のカーネルドライバを勝手にすりこませる方法な。
実行中のIEの権限を引き上げることのできる穴もヨロシク。
119デフォルトの名無しさん:2006/10/01(日) 12:52:29
ウイルスを作ろうとしているお方が現れた。
コマンド?

→通報

120デフォルトの名無しさん :2006/10/01(日) 13:07:03
質問なんですが、みなさんはCで書いてるんですか?
それともC++で書いてるんですか?
自分は、猫でも・・の本を一通りやってうんざりして
今は、mfcってやつで色々いじってるんですが
どうなんでしょうか。
初心者なんで、mfcからで良いかと勝手に思ってるんですが。
(win32APIリファレンスの本と同じ関数も多いし)
やはりC++なら、APIをラッパにして、STL使ってって感じ
でしょうか。
まだまだC++のレベルもクズたれですが、どうもそこら辺が
気になって質問指していただきました。
API関連の書き込みでなくて、申し訳ありません。
121デフォルトの名無しさん:2006/10/01(日) 13:17:54
好きなようにすればいいと思うよ。
プログラミングスタイルなんて人によって違う。
(チーム開発だとルールを強要されるが)
122デフォルトの名無しさん:2006/10/01(日) 13:26:56
>>120
何を作りたいかによるんじゃない?
例えば、ExcelやAccessでデータ管理のツールを作りたければVBAになるんだろうし。
123567:2006/10/01(日) 13:47:08
>>119
おまえ、エスパー? ウィルスだってなんでわかったの?
カーネルドライバのウィルスって最強だと思わない?
おれにしか作れないだろ。
124デフォルトの名無しさん:2006/10/01(日) 14:12:20
>>123
あのな、>>118みたいな質問してる時点でもうお前は厨なんだよ。
125デフォルトの名無しさん:2006/10/01(日) 14:12:44
相手にする奴も同レベル
126デフォルトの名無しさん:2006/10/01(日) 14:14:32
自分でデジタル署名すればいいがな。
127デフォルトの名無しさん:2006/10/01(日) 14:39:08
見えないレス番とアンカ-が多すぎます
128デフォルトの名無しさん:2006/10/01(日) 15:12:57
ねたにまじれすかこういい
129デフォルトの名無しさん:2006/10/01(日) 15:34:02
こんばんわ
USBストレージが接続されたことを検知するにはどうすれば(どのAPI)を使えばよいのでしょうか?

よろしくお願いいたします。
130デフォルトの名無しさん:2006/10/01(日) 15:52:32
ビデオ信号を切断するAPIを探しています。
ChangeDisplaySettings
というAPIを見つけて近づいたと思ったのですが
これ以上近づけませんでした。何か良いAPIはありませんでしょうか?
131デフォルトの名無しさん:2006/10/01(日) 16:14:04
>>129
WM_DEVICECHANGE
132デフォルトの名無しさん:2006/10/01(日) 16:43:24
>>130
BideoSingouSetudan
133デフォルトの名無しさん:2006/10/01(日) 18:46:16
NTFS などのファイルシステムが持ってるファイルの CRC 値って
Win32 API 経由で取り出すことが可能ですか?
今は、自分でファイルの CRC を計算してるんですが、
ファイルシステムからとりだせれば、その分スピードがはやくなるので。
134デフォルトの名無しさん:2006/10/01(日) 18:49:18
>>133
NTFSにそんなもんがあるとは聞いたことないが、情報源は?
135デフォルトの名無しさん:2006/10/01(日) 18:51:04
ヒント:脳内
136デフォルトの名無しさん:2006/10/01(日) 19:18:01
自分で速いコードを書けばよし
137デフォルトの名無しさん:2006/10/01(日) 19:30:19
脳内から取り出すAPIが確かあったと思う
138デフォルトの名無しさん:2006/10/01(日) 19:32:22
電波を受信するAPIを探しています。
この電波というのは物理層を経由しない方の電波です。
139567:2006/10/01(日) 19:36:09
そんな糞みたいな質問構わなくていいから
さっさとオレの質問に答えろよ
140デフォルトの名無しさん:2006/10/01(日) 19:49:36
質問してくれないと答えられない。
以前質問したことをもう1度と言うのなら、悪いがもう1度書いてくれ。
141567:2006/10/01(日) 20:34:50
>>140
前に書いてるんだから探せよ
それぐらい出来ないのか、バカかおまえ
142デフォルトの名無しさん:2006/10/01(日) 20:36:01
明らかに質問者の態度じゃないことに気付いてるのだろうか?

一応釣りだと信じてる…
143デフォルトの名無しさん:2006/10/01(日) 20:36:10
バカ耐性が低いのが居るな
華麗にヌルーしとけ
144デフォルトの名無しさん:2006/10/01(日) 20:37:59
NULL-
145デフォルトの名無しさん:2006/10/01(日) 21:40:17
ヌルってるかどうかのエラーチェックは怠るべきではありません
146デフォルトの名無しさん:2006/10/01(日) 21:45:10
正常系のコードだけ書けばよい
147デフォルトの名無しさん:2006/10/01(日) 22:17:00
コーディング全般な話になるけど
エラーなら処理中断させる方法と、
if (args == NULL) return;
...続く

正常なら処理を継続させる方法があるよね
if (args) {
 ...続く
}

どっちが好きだい?
148デフォルトの名無しさん:2006/10/01(日) 22:18:40
>>147
俺は後者が癖になってるけど、後者はネストが深くなるから前者の方がいいと思ってる。
149デフォルトの名無しさん:2006/10/01(日) 22:20:19
状況によりけり。
150デフォルトの名無しさん:2006/10/01(日) 22:26:48
Cだとリソース解放のことを考えて後者にしていたけど、
C++を始めてからは、デストラクタで対処できるので前者にしている。
151567:2006/10/01(日) 22:33:01
どっちでもいいだろ、スレ違いな話はよそでやれや
152133:2006/10/01(日) 23:22:49
>>134
エクスプローラでファイルをコピーしようとするとたまに、
CRC エラーが出るので、てっきりファイルシステム内に
CRC 値が保存してあるのだとばかり思ってましたが、
違うんでしょうか?
153デフォルトの名無しさん:2006/10/01(日) 23:38:41
たぶんHDDコントローラが吐いたエラーだな。
154デフォルトの名無しさん:2006/10/01(日) 23:47:09
>>152
重要なメタデータとかならともかくファイル全体のCRCはないだろ。
CRCの計算量はそれほど大きいわけでもないが、
書き込むたびに毎回というと話は別だ。
155デフォルトの名無しさん:2006/10/01(日) 23:51:40
MMCでユーザの管理スナップインなどを追加すると
「コンピュータの選択」というダイアログが出てきますが
このダイアログを呼び出すAPIは何でしょう?そもそも共通になってない?
156133:2006/10/02(月) 00:19:55
>>153
>>154
てっきりファイルシステムがファイルのCRC値を
保存してるんだと思ってました。

ありがとうございました。
157デフォルトの名無しさん:2006/10/02(月) 01:17:07
じゃあエクスプローラが吐く
「巡回冗長(CRC)エラー」ってなんなんだろうな
158デフォルトの名無しさん:2006/10/02(月) 01:22:28
デバイスが返してくるリードエラー
159デフォルトの名無しさん:2006/10/02(月) 01:37:35
じゃあ、デバイスはどこに CRC 値を保存しているんだろう?
書き込むときにどこかに保存しているから、
読み込むときに比較が可能なのではないかと思うんだが。
160デフォルトの名無しさん:2006/10/02(月) 01:38:30
ディスクの構造を勉強してこい
161デフォルトの名無しさん:2006/10/02(月) 01:55:56
デバイスが吐くのは毎回の転送データのCRC
そもそも連中はファイルなんていう論理単位は認識してない
162デフォルトの名無しさん:2006/10/02(月) 08:51:11
「なんなんだろうな」とか「思うんだが」とか散々偉そうに煽っといて
実はそれは自分の無知だったって、すごい滑稽だな。
163デフォルトの名無しさん:2006/10/02(月) 09:31:51
プログラマならVistaに移行するよな?

GetTickCount64

Retrieves the number of milliseconds that have elapsed since the system was started.

ULONGLONG WINAPI GetTickCount64(void);

Parameters
This function has no parameters.
Return Values
The number of milliseconds.
Remarks

This function is limited to the resolution of the system timer. To obtain the system timer resolution, use the GetSystemTimeAdjustment function.

If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.
Requirements
Client Requires Windows Vista.
Server Requires Windows Server "Longhorn".
Header

Declared in Winbase.h; include Windows.h.
Library

Use Kernel32.lib.
DLL Requires Kernel32.dll.
164デフォルトの名無しさん:2006/10/02(月) 09:54:41
>>163
GetTickCount()は、さほど高い精度を要求されないところで使うものだと思うが。
ゲームだったらこれまでどおり、high-resolution timerを使うはずだし。

そもそも問題は、Vista以降でしか動かない。
しばらくは、すくなくともXPもサポートしなければならないだろうし。
165デフォルトの名無しさん:2006/10/02(月) 10:03:44
>>164
システムタイマが64ビットになったことで、

「windows起動後49日後に〜」
ってことを考慮する必要がなくなっただけでもありがたいんでない?
166デフォルトの名無しさん:2006/10/02(月) 10:11:17
>>165
まあ、たしかに64bitだったら、オーバーフローするまえにハード自体が現存してないだろうけどね。
167デフォルトの名無しさん:2006/10/02(月) 10:26:34
>>164 >>166
釣られるなって。 どう見てもまともなWin32APIの質問じゃないだろ。
「かまって君」はスルーが基本!
168デフォルトの名無しさん:2006/10/02(月) 10:57:12
前世紀から指摘されてるのに今更tick 64bit化すか
169デフォルトの名無しさん:2006/10/02(月) 11:05:04
FtpSetCurrentDirectory(hSession, "..")
とすると戻り値がFalseになるのですが
なぜでしょうか?
一応上の階層に上がっているようなのですが
戻り値だけFalseなので不思議です。
170デフォルトの名無しさん:2006/10/02(月) 11:08:41
つ GetLastError
171デフォルトの名無しさん:2006/10/02(月) 11:20:08
ラップアラウンド位プログラム側で対応しろと思わなくもない。
RTPのシーケンス番号なんか16bit&開始値が乱数だぞ。
172デフォルトの名無しさん:2006/10/02(月) 11:48:37
むしろラップアラウンドでバグるようなコード書いてる
プログラマを見てみたい。
173デフォルトの名無しさん:2006/10/02(月) 11:51:57
グローバルフックでウィンドウの表示と非表示を監視するには
WH_CALLWNDPROCでどのメッセージを見ればよいのでしょうか
174デフォルトの名無しさん:2006/10/02(月) 22:39:27
>>162
独り言?
175デフォルトの名無しさん:2006/10/02(月) 23:05:49
>>173
WM_WINDOWPOSCHANGED
176デフォルトの名無しさん:2006/10/03(火) 01:07:53
>>173
WM_KILLFOCUS
177デフォルトの名無しさん:2006/10/03(火) 08:15:13
VistaでUACってのを出して昇格したいけど、どのAPIかわからんのです。
VistaでProgram Files配下のプログラムの上書き、新しいリソースのダウンロードからの追加がしたい。
インストーラーで入れたプログラムフォルダ内に
プログラムからzip解凍してリソース展開しようとしたけど、Usersに書きこみ権限がない。
それっぽい過去ログありましたがセキュリティーホールになるから不可みたいに見えます。
178デフォルトの名無しさん:2006/10/03(火) 19:40:11
フックを使ってウィンドウの×ボタンを押しても閉じずに最小化させるプログラムを作りたくて、
とりあえず、WM_CLOSEとWM_DESTROYをフックプロシージャで
捕まえて、return TRUEのように返すようにしたのですが、
うまくいかずに閉じてしまいます。
なぜか×をクリックするとWM_DESTROYが永遠とsendされ続けるようで。

なんかアドバイスお願いします。
179デフォルトの名無しさん:2006/10/03(火) 20:07:32
外部リンクにしてる?
180179:2006/10/03(火) 20:09:43
ああカンチガイ。
自分自身のウィンドウの×ボタンか。

WM_DESTROYは捕獲しちゃいけないだる。
181デフォルトの名無しさん:2006/10/03(火) 20:27:07
いえ、自分自身ではないです。
今は、ためしにノートパッドをグローバルフックしてみてます。
「猫でもわかる」の↓を参考に。
http://www.kumei.jp/c_lang/sdk2/sdk_163.htm

WM_CLOSEを捕まえて、メッセージボックスを出すことはできるのですが
そのメッセージを破棄することができません。
それで、一応WM_DESTROYも殺そうかと思ってやってみたら、
WM_DESTROYがたくさん(次次と)来てたって感じです。

フックプロシージャで、
,,,
lp->message == WM_CLOSE ){
MessageBox(NULL , "メモ帳へWM_CLOSE","確認" , MB_OK | MB_TOPMOST );
return TRUE;
}
...

のようにしてます。
182デフォルトの名無しさん:2006/10/03(火) 20:28:57
,,,
lp->message == WM_CLOSE ){
MessageBox(NULL , "メモ帳へWM_CLOSE","確認" , MB_OK | MB_TOPMOST );
return TRUE;
}

これの何処でメッセージが殺されてるんだ
183178=181:2006/10/03(火) 20:36:22
>>182
CallNextHookExで次のフックに渡さずにTRUEを返せば、
メッセージって死ぬのではないのでしょうか。
できれば、殺し方教えてください。

キーフックのときは上記のやり方でうまくいってたのですが。
184デフォルトの名無しさん:2006/10/03(火) 20:36:45
>>181
The CallWndProc hook procedure can examine the message, but it cannot modify it.
The GetMsgProc hook procedure can examine or modify the message.

So use WH_GETMESSAGE.
185デフォルトの名無しさん:2006/10/03(火) 20:51:06
>>183
メッセージフックでメッセージを殺す場合は、メッセージの存在を消すことは出来ないので
WM_NULLに書き換えるんだよ。
186178:2006/10/03(火) 21:07:58
なぜか、WH_GETMESSAGEだとWM_CLOSEが捕まらないです。
187デフォルトの名無しさん:2006/10/03(火) 21:14:35
フック関数内でターゲットのウィンドウをサブクラス化して
乗っ取ったウィンドウプロシージャ内で破棄するという手もある。
188デフォルトの名無しさん:2006/10/03(火) 21:15:42
>>186
WH_GETMESSAGEはポストされたメッセージしか捕まらない。
送信されたメッセージはWH_CALLWNDPROC
だから>>185>>187ということだ
189デフォルトの名無しさん:2006/10/03(火) 21:20:01
>>177
>>37は見たか?
昇格のダイアログが出てユーザーに押させる必要があるのはかまわないんだよな?
なおアップデートのボタンには盾アイコンを付けるように(>>41)

無断で更新する必要がある場合は(ウィルススキャンソフトの定義ファイルとか)
初回のインストール時にサービスをインストールしてサービスから更新する。
当然そのサービスはどんな悪意のあるプログラムから呼ばれても問題のないように
設計されていなければならない。
190デフォルトの名無しさん:2006/10/03(火) 21:32:02
はじめまして。APIの質問はここでいいんですよね?
今アプリケーションからタイムゾーンのロケールを変更するプログラムを作っているのですが、
うまくいきません。
VS2005 C#でプログラムしています。
TimeZoneInformationを使えばいいですよね?
そこで、kernel32.dllを読みこんで、
struct TIME_ZONE_INFORMATION
{
public int Bias;
public string StandardName; // StringBuilder 32
public SYSTEMTIME StandardDate;
public int StandardBias;
public string DaylightName; // StringBuilder 32
public SYSTEMTIME DaylightDate;
public int DaylightBias;
}

をHP(http://custom.programming-in.net/articles/art9-1.asp?f=SetTimeZoneInformation
を参考にして書いたのですが、どうやって使うかがわかりません(恥ずかしながら)
Biasって何を格納するの?とかそんなレベルです。

どなたかわかる方教えていただけないでしょうか?
お願いします。

191デフォルトの名無しさん:2006/10/03(火) 21:37:17
まず MSDN その他で SetTimeZoneInformation と TIME_ZONE_INFORMATION を調べれ
192178:2006/10/03(火) 21:54:49
>>187
>>188
サブクラス化でできました。
ありがとうございました。

>>185
>>188
WM_NULLで書き換えてCallNextHookExでは、
>>184氏の言ってるようにうまくいきませんでした。
193デフォルトの名無しさん:2006/10/03(火) 23:24:02
>>181
WM_DESTROYはDestroyWindowを呼び出した結果やってくるメッセージだから、
握り潰してもウィンドウは削除されると俺は思っていたのだが、違うのか?
194デフォルトの名無しさん:2006/10/03(火) 23:24:56
USE接続されたデバイスが、どのデバイス識別子(A、C、Dなど)になったかを知るためには
どうすればよいのでしょうか?

よろしくお願いいたします。
195デフォルトの名無しさん:2006/10/03(火) 23:25:30
すいません、訂正します。

USEじゃなくてUSBです。
196デフォルトの名無しさん:2006/10/03(火) 23:31:11
>>193
WM_CLOSEを破棄できたってことでしょ
197デフォルトの名無しさん:2006/10/04(水) 00:18:26
195
WM_DEVICECHANGEのDBT_DEVICEARRIVALの
DEV_BROADCAST_VOLUMEのdbcv_unitmask
198195:2006/10/04(水) 00:46:03
>>197
解決しました
ありがとうございました

助かります
199デフォルトの名無しさん:2006/10/04(水) 01:47:28
class A
{
int x ;
public:
static int CALLBACK Func(...)
}

こんな感じであるときにCALLBACK関数内からint x(プライベート変数やポインタ)
を呼び出す方法はありますか?
200デフォルトの名無しさん:2006/10/04(水) 02:06:00
class A
{
int x ;
public:
static int CALLBACK Func(A* pThis)
{
pThis->x;
}
}

A a;
A::Func(&a);

とか?
201デフォルトの名無しさん:2006/10/04(水) 02:10:44
・CALLBACK 関数の引数に(void* とかの)融通が利く部分があるなら (_beginthread系)
class A へのポインタを渡して(キャスト等して)から参照

・static class A* ThisPointer; をクラスで持って
CALLBACK関数が呼びだされる前に this をセットしておき、ThisPointerから参照。

APIスレでこのケースとなると… WNDPROC系?
ウインドウハンドル と class A のポインタのマップから 無理やり該当オブジェクトポインタ得る とか
ウインドウハンドルの拡張領域 に class A のポインタを仕込むとか
202デフォルトの名無しさん:2006/10/04(水) 02:17:04
WNDPROC系なら、SetProp, GetPropとか
203デフォルトの名無しさん:2006/10/04(水) 03:28:10
>>200-202
ありがとうございます。すいませんもっとしっかり書くべきでした

static BOOL CALLBACK DialogProc(HWND hWnd , UINT mes ,
    WPARAM wParam , LPARAM lParam)

やりたいのはダイアログです。スレッドの場合は知っていたのですが
ダイアログの場合LPVOID型を持たせたりする
ところがないので悩んでました

>>201さんの2番目のやり方って
>static class A* ThisPointer;
をクラス内の変数で持っておいてコンストラクタで A* A::ThisPointer = this ;
ってやるとエラーになるんですけどどうやって初期化(定義?)したらいいんでしょうか?
204203:2006/10/04(水) 03:50:35
解決しました。static変数をよく理解してませんでした
classの関数の外で宣言しないといけないんですね。。。
205デフォルトの名無しさん:2006/10/04(水) 09:06:57
static メンバ使う場合
クラスAの派生Bの Dialog中から さらに クラスAの派生C を生成し Dialog を呼び出したりすると
期待した動作ができなくなるので注意して

# MS も CALLBACK に一通りアプリケーション作成者用の LPVOID 枠用意しとけばよかったと
# 後悔しているんだろな…
206デフォルトの名無しさん:2006/10/04(水) 09:14:25
MFCはどうやってるんだっけ?
あれも、CWndの実体をWNDPROCに渡してるよね。
207デフォルトの名無しさん:2006/10/04(水) 09:18:12
MFCはスレッド毎にHWND<->オブジェクトマップを持ってる。
ATL/WTLはサンク使ってる。
208デフォルトの名無しさん:2006/10/04(水) 16:30:50
普通のダイアログならCreateDialogParamの最後の引数で
WM_INITDIALOGのlparamにユーザーデータ渡せるので、そこでSetProp。
WM_DESTROYで、RemoveProp。
コモンダイアログなら、構造体メンバのlCustDataから同じく渡すことできる。
209デフォルトの名無しさん:2006/10/04(水) 16:33:55
それより長い期間でクラスの実体配送を機能させようとすると
WM_NCCREATE/WM_NCDESTROY の組になるね
210デフォルトの名無しさん:2006/10/04(水) 16:51:01
WM_NCCREATEの前にも何か来てたような
211209:2006/10/04(水) 17:01:42
>>210
ぐぐったら見つかった WM_GETMINMAXINFO が前に来るのかー
素で知らなかったよ
212デフォルトの名無しさん:2006/10/04(水) 20:58:49
Windowsプログラム初心者です。現在C#を使っています。

質問なのですが、現在アクティブになっているWebブラウザから、テキストを
抽出するプログラムを書きたいのですが、その実現方法にはどの様な方法が
あるのでしょうか?
(板違いだったらすいません。)
213デフォルトの名無しさん:2006/10/04(水) 21:02:42
とりあえずC#スレに行けば
214デフォルトの名無しさん:2006/10/04(水) 21:08:32
215デフォルトの名無しさん:2006/10/04(水) 21:16:40
>214
有難う御座います。この方法だと、IEオブジェクトを新規に作成することになってしまうと思うんですが、
既に開いてあるIEをオブジェクトとして扱う(新規に作成せずに)ことは可能なのでしょうか?
216デフォルトの名無しさん:2006/10/04(水) 21:26:20
GetObject
217デフォルトの名無しさん:2006/10/04(水) 22:07:24
>>216
有難う御座います。
GetObjectを用いると言うことは、ブラウザにプラグインを組み込んで
利用するといった方法になるでしょうか?
その場合、プラグインがテキスト送信先のプログラムを起動し、テキストを
送信といった流れになるでしょうか?


218デフォルトの名無しさん:2006/10/04(水) 22:15:00
GetObject GetActiveObject
219デフォルトの名無しさん:2006/10/04(水) 22:30:28
しょぼい質問ですみません。

現在VC++6.0を使ってAPIプログラミングしています。
エディットコントロール(IDC_EDIT1)に16進数(0-9,A-F)以外
入力を受け付けなくしたいんですが、どのようにやればいいでしょうか。

よろしくお願いします。
220デフォルトの名無しさん:2006/10/04(水) 23:24:29
サブクラス化でWM_CHARを見て不要なものを殺す
221デフォルトの名無しさん:2006/10/05(木) 01:31:53
SHLimitInputEdit使えね〜
使えない文字を入力したときにバルーンが出るのはいいが、
「ファイル名には次の文字は使えません」 or 「ファイル名には次の文字のみを使ってください」
ファイル名前提かよ orz
IItemNameLimits::GetValidCharactersしか呼ばれないし、訳判らん。
ES_NUMBER付きエディットコントロールのような動作を期待してたんだけどな。
222デフォルトの名無しさん:2006/10/05(木) 01:51:39
> It might be altered or unavailable in subsequent versions of Windows.
とか書いてる司法省との和解でいやいや公開系の関数だから仕方ないだろ
ShellAboutなんか強制的に「Microsoft」を頭に付けられるし
223デフォルトの名無しさん:2006/10/05(木) 11:02:58
だってVS2005のには書いてなかったんだもん(´・ω・`)
224デフォルトの名無しさん:2006/10/05(木) 11:04:46
いやいやだろうが公開する以上はちゃんとしなきゃ
225デフォルトの名無しさん:2006/10/05(木) 11:11:51
VisualStudio.NET 2003 + WindowsXP なのですが、
タイトルバーもなにもない、中身だけのウインドウをつくるにはどうすればいいんでしょうか?
dwStyleをどう設定していいもんだかわかりません。
226デフォルトの名無しさん:2006/10/05(木) 11:26:03
WS_POPUP
227デフォルトの名無しさん:2006/10/05(木) 12:20:51
>>225
できました!ありがとう!!
MSDNは文章の意味がよくわからないよ〜
がんばるよ〜
228225,227:2006/10/05(木) 12:21:28
>>227>>226さん宛でした。ありがとう!>>226!!
229デフォルトの名無しさん:2006/10/05(木) 12:29:50
意味が分からなかったら試せばいい。
230デフォルトの名無しさん:2006/10/05(木) 22:26:40
子プロセスが32bitと64bitのどちらで動作するか、起動する前に判定するには
どうしたらいいですか?
GetBinaryTypeは64bit Windows上で/platform:anyな.NETバイナリを32bitと判定
しますが、実際には64bitで動作するようです。
子プロセスを起動した後ならIsWow64Processで判定できるのですが…。
231デフォルトの名無しさん:2006/10/06(金) 08:25:28
>>189
すいません。質問内容をしくじりました。
>>37のやりかたでUACダイアログがでてます。
しかしながら、ファイルを実行していいかどうかのUACダイアログであって、
許可をしても、そのexeから、Program Filesを上書きできないという質問です。

>>37を読んでイケるとおもったんですが、実際やってみたらUACダイアログでて
許可をしても、Program Filesの内容をいじれないので、
インストール時とかにでてくるような、Program Filesをいじれるようになる
UACダイアログを出すAPIを求めているというわけです。
環境はWindowsVistaRC1です。
232デフォルトの名無しさん:2006/10/06(金) 14:45:04
233デフォルトの名無しさん:2006/10/06(金) 15:00:40
216ビット版OSにならなかっただけましかと。
234デフォルトの名無しさん:2006/10/06(金) 15:05:18
情報が6ビット分しか無いことに驚いたのかと
235デフォルトの名無しさん:2006/10/06(金) 18:36:16
絵の読み込みについて

hoge.bmpがあり

HBITMAP Bmp1, Bmp2;

Bmp1 = (HBITMAP)LoadImage(NULL, hoge.bmp, 〜 ;

とした後に、
Bmp1 の任意の範囲を Bmp2 へ
もしくは、Bmp2 へ hoge.bmp の任意の範囲を Bmp2 へ
読み込ませたいのですが、どうも何を使えば良いのかわかりません。

Bitblt だと HDC が対象になるし
LoadImage だと左上を起点とする範囲しか読めないし
ヒントだけでも良いのでよろしくお願いします。
236デフォルトの名無しさん:2006/10/06(金) 18:44:04
>>235
CreateCompatibleDC
SelectObject
BitBlt
DeleteDC
237デフォルトの名無しさん:2006/10/06(金) 18:53:32
>>236
ありがとうございます。
それらをもう一度調べ直します。
238デフォルトの名無しさん:2006/10/06(金) 19:12:37
>>236
感動した
239デフォルトの名無しさん:2006/10/06(金) 21:14:05
>>236
(((((っ・ω・)っちゃんと戻さなきゃ駄目!
240デフォルトの名無しさん:2006/10/06(金) 21:40:28
>>239
いや、必要なAPIを列挙しただけで、手順を説明したわけじゃないからw
241デフォルトの名無しさん:2006/10/07(土) 00:02:35
>>232
SCS_64BIT_BINARYが書いてないし。
やっぱりmsdn2になる前の日本語版はダメすぎだ
242デフォルトの名無しさん:2006/10/07(土) 01:14:01
>>231
>>37の方法で出したUACのダイアログから起動したexeで問題なく
Program Filesの更新ができたけど?
WRPで保護されたファイルで試して上書きできないとか思ってないよね?
更新機能を持ったサードパーティー製のアプリで試してみれ。
とりあえずFirefoxはfirefox.exeを>>37の方法経由で起動して
1.5.0.6→1.5.0.7へ問題なく更新できた。
243デフォルトの名無しさん:2006/10/07(土) 02:00:34
いちおうテストに使ったプログラムも置いとく
ttp://bebe.run.buttobi.net/up/src/be_4576.zip.html
runasでは昇格できないのでコマンドラインから昇格したくて作ったんだけど
244デフォルトの名無しさん:2006/10/07(土) 09:32:30
窓プログラミングの場合、malloc/newなんかのリーク以外にも
DCの開放ミスの危険性もあるわけですけど、
_CrtDumpMemoryLeaksのようにこれを検出する方法ってありますか?

いまは危険箇所がわかってればループ処理させてメモリ使用量とか見てるんですが大変
245デフォルトの名無しさん:2006/10/07(土) 09:58:25
>>244
タスクマネージャのGDIオブジェクトでも見ておけ。
246デフォルトの名無しさん:2006/10/07(土) 10:17:06
>>245
サンクス 単なるメモリ使用量より遥かにわかりやすいです
247デフォルトの名無しさん:2006/10/07(土) 11:24:30
別アプリケーションのウインドウのある特定の座標の
色を識別したいのですが、これをWIN32APIで実現するには、
どうすればできますか?
そのウインドウにはボタンや画像、テキスト領域が配置してあるとして。
つまり、昔のBASICでいう Color = Point(100, 150) みたいな事がやりたいのです。
これと同様の機能がUWSCというソフトにPeekColorというのがあります。

宜しくお願いします。
248デフォルトの名無しさん:2006/10/07(土) 11:29:00
GetPixel
249デフォルトの名無しさん:2006/10/07(土) 11:40:03
>>248
即レス、ありがとうございます!!
250235:2006/10/07(土) 12:09:23
すみません、降参します(´・ω・`)
251デフォルトの名無しさん:2006/10/07(土) 13:00:46
>>243-243
サンクス!試してみます。結果は後ほど。
252デフォルトの名無しさん:2006/10/07(土) 17:05:34
くだらない質問で恐縮ですが、
現在選択されているフォントの情報を、LOGFONT 構造体に取得するにはどうすればいいのでしょうか?

コモンダイアログでフォントを選択したいのですが、
現在のフォントをデフォルトとして、CHOOSEFONT 構造体の lpLogFont メンバに与えたいのです。
よろしくお願いします。
253デフォルトの名無しさん:2006/10/07(土) 17:15:06
くだらな過ぎて答える気にもならんな
254デフォルトの名無しさん:2006/10/07(土) 17:27:09
んじゃ、お前は黙ってろカス
255デフォルトの名無しさん:2006/10/07(土) 18:22:03
>>252
「現在選択されている」って、どこで選択されてるんだ?
とりあえずESPでHDCから取得ということにしてココ貼っとくけど。
ttp://forums.belution.com/ja/vc/000/364/33.shtml
256デフォルトの名無しさん:2006/10/07(土) 18:22:15
>>252
GetObject
DCに選択されている、という意味なら先にGetCurrentObject
257252:2006/10/07(土) 18:37:17
>>255-256
ありがとうございます。
リストビューが使用しているフォントを取得したいです。

LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));
HDC hDC = ::GetDC( /* リストビューのハンドル */ );
HFONT hCurFont = (HFONT)GetCurrentObject(hDC, OBJ_FONT);
::GetObject(hCurFont, sizeof(LOGFONT), &lf);

こんな感じでやってみましたが、
帰ってきたのは、System のサイズ 14 のフォントで、リストビューのフォントとは違っていました。
258デフォルトの名無しさん:2006/10/07(土) 18:44:48
>>257
WM_GETFONT
259252:2006/10/07(土) 18:48:57
>>258
ありがとうございます
フォントの設定を WM_SETFONT でやってんのになぜ俺は・・・orz
260デフォルトの名無しさん:2006/10/07(土) 21:32:50
こんばんわ

ファイルダイアログやエクスプローラーでは「画像のサムネイル表示」がありますよね。
それを自分が作ったアプリケーションに実装したいと思うのですが、
おそらくCOMのインターフェースで何かあるのではないか?と思っているのですが
実際にあるのでしょうか?

ご存知な方がいらっしゃれば助かります。
261デフォルトの名無しさん:2006/10/07(土) 21:56:01
>>260
どう見てもスレ違いです。
262デフォルトの名無しさん:2006/10/07(土) 21:57:26
IShellFolder
263デフォルトの名無しさん:2006/10/08(日) 12:41:34


USBに接続してるとデバイス情報が取得できると思うのですが。
たとえば、ベンダー情報とか製品情報など
その情報はどのAPIを使って取得すればいいのでしょうか?
264デフォルトの名無しさん:2006/10/08(日) 13:17:12
WMIとかかな?
265デフォルトの名無しさん:2006/10/08(日) 14:51:00
>>263
READ_PORT_UCHAR
266567:2006/10/08(日) 16:18:27
よぅみんな元気してたか?
267デフォルトの名無しさん:2006/10/08(日) 16:29:12
OSが日本語版かそうでないか判断する際、どのような手法で判断すれば良いのでしょうか。
268デフォルトの名無しさん:2006/10/08(日) 17:28:46
WINDOWS_WHERE_ARE_YOU_FROM
269263:2006/10/08(日) 17:51:57
USBに接続されたならWM_DEVICECHANGEが飛んできますから
デバイス情報がわかるのですが、

case DBT_DEVICEARRIVAL:
if (pHdr -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)pHdr;


元からUSBに接続されているデバイスの場合だと、WM_DEVICECHANGEが着ません。
APIから呼び出してデバイス情報を取得する方法があれば助かるのですが。
270デフォルトの名無しさん:2006/10/08(日) 19:54:13
>>269
PnP Configuration Manager
cfgmgr32でググってみれ。
271デフォルトの名無しさん:2006/10/08(日) 23:32:58
>>260
CLSID_ShellThumbnailDiskCache
IShellImageStore
Shell Image Store Object
あたりかと
272デフォルトの名無しさん:2006/10/09(月) 01:04:51
プロセスが動的にリンクしているDLLを調べるようなAPIってないですか?
273デフォルトの名無しさん:2006/10/09(月) 01:07:01
>>272
APIひとつってわけにはいかんな。
http://www.geocities.jp/i96815/windows/win09.html
http://hp.vector.co.jp/authors/VA015412/colum/pe.htm
この辺を読んで応用せよ。
274デフォルトの名無しさん:2006/10/09(月) 01:08:12
>>273
即レスどうもです。参考になりそうです。ありがとうございます!
275デフォルトの名無しさん:2006/10/09(月) 11:02:59
VB6の「DoEvents」と同じ機能を持つWinAPIはなんですか?
276デフォルトの名無しさん:2006/10/09(月) 11:06:58
MsgBox
277デフォルトの名無しさん:2006/10/09(月) 11:11:07
>>275
ありません。
278275:2006/10/09(月) 11:16:32
VB6で出来てWinAPIでできない事ってあるのですか?
279デフォルトの名無しさん:2006/10/09(月) 11:20:31
APIを用いて同等の機能を実現する事は出来ますが、同じ機能のAPIはありません。
280デフォルトの名無しさん:2006/10/09(月) 11:27:19
単純に置き換えれるならVBいらんわな
281デフォルトの名無しさん:2006/10/09(月) 11:28:08
VB諦めて、Windowsに制御を戻すAPIはありますか?
282デフォルトの名無しさん:2006/10/09(月) 11:30:16
Windows は何も制御しません。
283デフォルトの名無しさん:2006/10/09(月) 11:30:48
sleep?
284デフォルトの名無しさん:2006/10/09(月) 11:33:39
DoEventsでぐぐったらすぐに見つかったよ
"DoEvents PeekMessage"でぐぐってみ
285デフォルトの名無しさん:2006/10/09(月) 11:34:36
俺なんて一人でSEXするよ
286デフォルトの名無しさん:2006/10/09(月) 11:38:38
SAXか。俺は専らDOMだな。
つーか、MSXMLは使いにくくてしょうがない
287デフォルトの名無しさん:2006/10/09(月) 11:50:27
>>286
SchemeだとSAXの方が相性いいよ。
288デフォルトの名無しさん:2006/10/09(月) 12:42:31
>>275
まず、Windowsプログラムの仕組みから勉強すべし。
そうすれば、メッセージポンプを動かせばいい事が判る。
289デフォルトの名無しさん:2006/10/09(月) 15:26:35
ちょっとさ聞きたいんだけどさ、
C++による簡単実習3次元CG入門って本のさ、
低レベルな部分はどうやって実装されているの?
ドットを表示したりウィンドウを作成する時にさWin32Apiを
使っているようには見えないのよ。
ヘッダを見た限り。。
win.libってのも読み込んでるけど、それかなあ。
っと思ってDumpBINで調べたらそうだった。
質問する意味が無くなったから文句を言いたい。
ソースを公開しろよ。ぼけ!!小笠原祐治はケチだ。
この本の存在理由がわからない。
まあ、プログラマーにわかり易く数学を教える意味の本なのだろう。
買う価値はない。
ttp://www.morikita.co.jp/soft/84142/CG_NET.exe
290デフォルトの名無しさん:2006/10/09(月) 15:35:04
で?
291デフォルトの名無しさん:2006/10/09(月) 15:48:48
それで終わり。
292デフォルトの名無しさん:2006/10/09(月) 15:51:01
ふーん
で?
293デフォルトの名無しさん:2006/10/09(月) 15:51:56
そこからが始まり。
294デフォルトの名無しさん:2006/10/09(月) 16:02:01
>>289
っつーか、まあなんだ、あれだ、すれ違いだ
http://pc8.2ch.net/test/read.cgi/tech/1064681919/
295デフォルトの名無しさん:2006/10/09(月) 16:05:11
>>294
そうか。有難う。
向こうで書いてくるぜ
296デフォルトの名無しさん:2006/10/09(月) 17:28:41
DVDのセクタを読み出すのにはどうしたらいいのでしょうか。
CreateFile/ReadFileでハードディスクは読み出せたのですが、DVDは読み出せませんでした。
297デフォルトの名無しさん:2006/10/09(月) 18:19:56
もしかして、GENERIC_WRITEとか、GENERIC_ALLを指定してる?
298デフォルトの名無しさん:2006/10/09(月) 18:31:19
>>296
ASPI や SPTI 経由で SCSI MMC の READ CD コマンドを発行する必要がある.
これだけ特有の単語を満載したから後はぐぐればわかるだろ.
299デフォルトの名無しさん:2006/10/09(月) 19:11:30
ぐぐれって何ですか?やふったけどわかりません><
300デフォルトの名無しさん:2006/10/09(月) 19:31:01
>>272-274
EnumProcessModules
API一発だよ。
301デフォルトの名無しさん:2006/10/09(月) 20:18:34
>>299
試しにやふってみたら、普通に分かるじゃねーか。
302::2006/10/09(月) 20:41:40
303):2006/10/09(月) 23:51:05
304デフォルトの名無しさん:2006/10/10(火) 00:31:47
>>303ちょっとワロタ
305デフォルトの名無しさん:2006/10/10(火) 11:44:18
>>260
GDI+のGetThumbnailImage
IExtractImage
306デフォルトの名無しさん:2006/10/11(水) 04:45:27
LVM_SORTITEMSEXとLVM_SORTITEMSの違いって何ですか?
ヘルプ見ると同じっぽいんですけど。
307デフォルトの名無しさん:2006/10/11(水) 06:16:05
SEXかどうかじゃね?
308デフォルトの名無しさん:2006/10/11(水) 06:33:13
クソ、不覚にも笑っちまった
309デフォルトの名無しさん:2006/10/11(水) 09:13:51
bitbltって一部領域外になるマイナス座標とかセットして
転送するとドライバーによっては落ちたりしますか?
それともちゃんとクリッピングしてくれてるんでしょう?

とりあえずうち環境では落ちないんですが。そもそもマイナス座標
を使っていいかも書いてないんで。。。
310デフォルトの名無しさん:2006/10/11(水) 09:30:18
>>306
比較関数に渡されるアイテムのパラメータが違う。
LVM_SORTITEMS : LVITEM.lParam
LVM_SORTITEMSEX : 現在のインデックス

>>307
;`;:゙;`(;゚;ж;゚; )

>>309
問題無い。
マイナス座標自体、特別扱いするものではなく、
デフォルトで、偶々負の座標領域が常にクリップされる状態になっているだけ。
SetWindowOrg等を使えば、(0,0)の位置自体動かせる。
311309:2006/10/11(水) 10:31:45
>>310
ありがd
312空猫:2006/10/11(水) 23:56:03
こんにちは♪

Windows 2000 SP4上で、
VC++6.0を使いWin32プログラムを書いています。
その中でEditコントロールを使おうとしているのですが、
フォーカスが一度他のコントロールに移ると、
いくらマウスでクリックしても
Editコントロールにフォーカスを戻すことが出来なくなってしまいます。

何故、その様なことが起こってしまうのか
SPY++でメッセージを眺めたり、
MSDNを読んだりしてみたのですが、
どうしても判らず、知恵をお貸しください(汗

プログラムのソースを張っておきます。
http://skynekosky.web.fc2.com/edit/index.html
313デフォルトの名無しさん:2006/10/12(木) 00:05:40
他の兄弟ウィンドウがかぶさってるとか
314空猫:2006/10/12(木) 00:18:57
少しづつコントロールのサイズを小さくし、
移動させて重ならない様にしみましたが、
挙動は変わりませんでした。。

また、もしや同じCreateWindowが2回実行されてしまっているのではと想い、

if ( WND_CHAT::hEditResCtrl == 0 )
  WND_CHAT::hEditResCtrl = CreateWindow( ....

の様に重複して実行されないようにしてみましたが、
改善されることはありませんでした。

私は何を見落としてしまっているのでしょう。。。(汗
315デフォルトの名無しさん:2006/10/12(木) 01:26:49
SetWindowPosの所を以下のように直してみてくれ。
SetWindowPos(hwndCtrl, NULL, x, y, cx, cy, SWP_NOZORDER|SWP_SHOWWINDOW);
Z-ORDER周りを弄っているのが怪しい。
316空猫:2006/10/12(木) 01:48:32
アドバイス有難う御座います♪

仰ってくださった様に、z-order関係を変えてみたのですが、
変わらずフォーカスをEditコントロールに移すことが出来ませんでした(汗
SetWindowPos(hButtonCtrl, NULL, buttonSendRect.left, buttonSendRect.top, buttonSendRect.right-buttonSendRect.left, buttonSendRect.bottom-buttonSendRect.top, SWP_NOZORDER | SWP_SHOWWINDOW);

んぅ。。。(悩
317デフォルトの名無しさん:2006/10/12(木) 02:27:11
MDIなのかこれ。流石に素のWin32でMDIは組んだことが無いな……
とりあえず、MSDNで'Multiple Document Interface'を参照しながら頑張れ。
318デフォルトの名無しさん:2006/10/12(木) 02:38:30
俺のSDKメモ帳です
2chはこういう使い方もできるし便利だね
http://pc8.2ch.net/test/read.cgi/tech/1160580550/
319デフォルトの名無しさん:2006/10/12(木) 03:12:24
WS_TABSTOP
320空猫:2006/10/12(木) 04:07:14
>>317
このプログラムは、"MDICLIENT"や、MDICREATESTRUCTを使わないで、
MDIに似た機能を実現させているプログラム・・・でしょうか。

現在は、1種類の子ウィンドウを親フレームに表示させて居りますが、
いずれ他の機能を持つ子ウィンドウを
同一の親フレーム内に表示させたい為に、
この様な形を取ることにしました。

エディットコントロールを貼り付けるまでは順調だったのですが、
エディットコントロールだけは思うように行かずに悩んでしまい、
ここで助言を仰がせて頂いた次第です。

子ウィンドウに、
「さらに子コントロールを貼り付ける。」
という形に無理があるのでしょうか。。
321デフォルトの名無しさん:2006/10/12(木) 11:02:08
「子ウィンドウ フォーカス クリック」でググッタら出てきた。
仕様らしい。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;230587
322空猫:2006/10/12(木) 16:22:33
>>321
はにゃ、、仕様なのですか。。。。
んぅ、、何故、そんな仕様が(汗

教えてくださった皆様、
ありがとうございますっ♪
323296(299は違います):2006/10/13(金) 00:41:20
どうもありがとうございました。
アドバイスのおかげで一応何とかそれらしい手法に辿り着きました。

しかし、以下のようなコードで転送量(BUF_SIZE)をある値以上に大きくすると
素早く返ってきてScsiStatus=0になるのですが、
ある値以下にするとえらく遅く戻ってきてScsiStatus=2になります。
遅い場合、TimOutValueを5秒とかに設定していると
DeviceIoControl()がセマフォタイムアウトエラー(121)で失敗します。

いったい何が起こっているのでしょうか?
転送量が少ない方が遅いというのが謎です。
ちなみに「ある値」はコロコロ変わるようです。(0x92eだと思ったら0x7feになってた・・・)

それと、そもそもScsiStatusは0だとSS_PENDINGで結果が返ってこない状態だと思うのですが、
SPTIは同期的に働くのだというのでこれも不可思議です。
しかもSS_PENDINGなのにセクタデータはちゃんとバッファに入るようです。
またScsiStatus=2でもこれはSS_ABORTEDでエラーだと思うのですが、
これもセクタデータはちゃんとバッファに入るようです。
324296:2006/10/13(金) 00:41:52
#include <windows.h>
#include "devioctl.h"
#include "ntddscsi.h"
#include "spti.h"

main(){
  HANDLE hDev;
  hDev = CreateFileA("\\\\.\\E:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
  if (hDev == INVALID_HANDLE_VALUE){
    printf("CreateFile() failed\n");
    exit(-1);
  }
  //#define BUF_SIZE 0xc00 //素早い
  #define BUF_SIZE 0x10 //遅い
  BYTE _rgbBuf[BUF_SIZE + 0x0f];
  BYTE *rgbBuf = (BYTE *)(((DWORD)_rgbBuf + 0x0f) & 0xfffffff0);
  memset(rgbBuf, -1, BUF_SIZE);
  SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptdwb;
  memset(&sptdwb, 0, sizeof(sptdwb));
  sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
  sptdwb.sptd.CdbLength = 12;
325296:2006/10/13(金) 00:42:22
  sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_IN;
  sptdwb.sptd.SenseInfoLength = 14;
  sptdwb.sptd.DataTransferLength = BUF_SIZE;
  sptdwb.sptd.TimeOutValue = 30;
  sptdwb.sptd.DataBuffer = rgbBuf;
  sptdwb.sptd.SenseInfoOffset = (BYTE *)&sptdwb.ucSenseBuf - (BYTE *)&sptdwb;
  sptdwb.sptd.Cdb[0] = 0xbe; // Read CD
  sptdwb.sptd.Cdb[8] = 1;
  sptdwb.sptd.Cdb[9] = 0x10;
  BOOL bRes;
  DWORD dwResCnt;
  printf("rgbBuf[0] = %02X\n", rgbBuf[0]);
  bRes = DeviceIoControl(hDev, IOCTL_SCSI_PASS_THROUGH_DIRECT, &sptdwb, sizeof(sptdwb), &sptdwb, sizeof(sptdwb), &dwResCnt, NULL);
  if (!bRes){
    printf("DeviceIoControl() failed\n");
    exit(-1);
  }
  printf("rgbBuf[0] = %02X\n", rgbBuf[0]);
  printf("sptdwb.sptd.ScsiStatus = 0x%08X\n", sptdwb.sptd.ScsiStatus);
}
326デフォルトの名無しさん:2006/10/13(金) 05:13:01
ドライブに対してセクタ単位以外の転送要求を出してうまくいくほうがおかしい
327デフォルトの名無しさん:2006/10/13(金) 12:02:55
ファイル名を指定して実行で、ディレクトリを実行すると
("C:\Program Files" みたいな)
エクスプローラが表示されますが、
ほかのプログラムを実行することはできませんか。
APIを使ってどうにかできることではないのでしょうか。
328デフォルトの名無しさん:2006/10/13(金) 12:51:16
>>327
それは多分無理っぽいな

入力で
Myapp.exe C:\Program Files
見たいな事はもちろん出来るんだけど
329デフォルトの名無しさん:2006/10/13(金) 12:53:36
レジストリで関連付け変えればできるがAPIでは無理かもしれんな
330デフォルトの名無しさん:2006/10/13(金) 14:00:12
バッチファイル使えよ
331デフォルトの名無しさん:2006/10/13(金) 14:32:02
LineTo()で線を引きたいんですが、色を変えることって出来ないんでしょうか?
332デフォルトの名無しさん:2006/10/13(金) 14:36:30
>>331
:LineToのMSDN記述より
直線は現在のペンで描画されます。
ペンがジオメトリックペンである場合、現在のブラシで描画されます。
ペンの詳細については、CreatePen 関数とそれに関連する各構造体を参照してください。

:CreatePen
HPEN CreatePen(
int fnPenStyle, // ペンのスタイル
int nWidth, // ペンの幅
COLORREF crColor // ペンの色
);
333デフォルトの名無しさん:2006/10/13(金) 16:21:21
レジストリですか。
すれ違いぽいのでさようなら。
ありがとうございました
ノシ
334デフォルトの名無しさん:2006/10/13(金) 16:21:51
>>333
糞だな。もうくんなはげ
335デフォルトの名無しさん:2006/10/13(金) 18:22:33
勘だけで書くと>>327はシェルまわりのプログラミングになるのか、
ファイル名を指定して実行ダイアログのAPIかメッセージを横取りとか?
336デフォルトの名無しさん:2006/10/13(金) 21:55:33
エクスプローラに引数を与えて起動させるだけじゃないのか?
337デフォルトの名無しさん:2006/10/13(金) 23:27:57
IShellExecuteHook
338デフォルトの名無しさん:2006/10/14(土) 02:01:46
ウインドウプロシージャで動的に確保したポインタを
WM_DESTROYのところで解放して大丈夫ですかね?
switch文の外だから末尾で解放するのと、
どちらが正解なんでしょうか?
あ、関数ではなくnewの場合です。
339デフォルトの名無しさん:2006/10/14(土) 02:58:33
ソースup
もしくは日本語でおk
340デフォルトの名無しさん:2006/10/14(土) 03:31:20
というかWindows API関係ないだろ・・・
341デフォルトの名無しさん:2006/10/14(土) 05:24:19
リストビューがレポートスタイルで表示されているときに、リストビューのウィンドウハンドルから
特定のセルの値を抽出したいのですが、ウィンドウハンドルを取得した後
どうすればいいのか分かりません。

例えばx行y列のセルの値を取得した場合はどのようにすればよいのでしょうか。
よろしくお願いします。
342341:2006/10/14(土) 05:35:49
すいません。分かりました。
343デフォルトの名無しさん:2006/10/14(土) 14:51:47
>>322
> はにゃ、、仕様なのですか。。。。
> んぅ、、何故、そんな仕様が(汗

ウィンドウのフォーカスがキーボード入力の可否を示すと同様に、
ウィンドウのアクティブはマウス入力の可否を示す。
キャプション付き子ウィンドウが非アクティブならマウスは来ない。
344デフォルトの名無しさん:2006/10/14(土) 18:51:14
質問です

48×48なアイコンをSHGetFileInfoやExtractAssociatedIconのようにして
実行ファイル等から取得する事は可能ですか?
345デフォルトの名無しさん:2006/10/14(土) 18:53:00
試しにやってみて出来たら可能。
出来なかったら不可能。
346デフォルトの名無しさん:2006/10/14(土) 21:03:44
スレッドのサスペンドカウントを取得したい場合、
SuspendThread/ResumeThreadで実際にサスペンド/レジュームさせて、
戻り値を見るしかないのでしょうか??
347デフォルトの名無しさん:2006/10/14(土) 21:24:11

ボタンウィンドウ表示したとき高速で画像更新(FPS20ぐらい)
するとボタンがチラチラすのは仕様?
348デフォルトの名無しさん:2006/10/14(土) 22:06:51
そこでバッファリングがダブルですよ
349デフォルトの名無しさん:2006/10/15(日) 00:30:01
>>346
俺の知ってる限りそれしかない
350デフォルトの名無しさん:2006/10/15(日) 00:41:08
だな
351デフォルトの名無しさん:2006/10/15(日) 09:35:07
なんか、妙な質問かもしれないですが・・
ポップアップメニューから送信されるメッセージは
どのようにフックすればイイのでしょうか?

spyで見ようとしても、「指定のウインドウはスパイできません。」等と
言われ、困っております・・。

何がしたいかと言うと、右クリック -> メニューにて
表示されるコマンド(例えばプロパティとか)をフックして
キーバインドさせたいのですが。
352デフォルトの名無しさん:2006/10/15(日) 09:51:14
>>346
フックを仕掛けて、呼び出した回数を常に別のところに保管しておくという方法も。
353341:2006/10/15(日) 12:41:35
別アプリケーションのリストビューから列名を取得しようとして以下の
コードを書いているのですが、うまく取得できません。
何が足りないのでしょうか???

GetWindowThreadProcessId(hWnd, &dwProcessID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);

dwSize = sizeof(LVCOLUMN) + 128;
plvcClient = (LVCOLUMN *)VirtualAlloc(NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
plvcServer = (LVCOLUMN *)VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

plvcClient->mask = LVCF_TEXT;
plvcClient->pszText = (char *)(plvcServer + 1);
plvcClient->cchTextMax = 128;

WriteProcessMemory(hProcess, plvcServer, plvcClient, dwSize, &dwNumberOfBytes);
SendMessage(hWnd, LVM_GETCOLUMN, (WPARAM)1, (LPARAM)plvcServer);
ReadProcessMemory(hProcess, plvcServer, plvcClient, dwSize, &dwNumberOfBytes);

VirtualFreeEx(hProcess, plvcServer, dwSize, MEM_DECOMMIT | MEM_RELEASE);
VirtualFree(plvcClient, dwSize, MEM_DECOMMIT | MEM_RELEASE);
CloseHandle(hProcess);
354デフォルトの名無しさん:2006/10/15(日) 12:59:50
ちなみにSendMessageの戻り値はTRUEで帰ってきます。
また、widthを取得しようとするとうまく取得できています。
355デフォルトの名無しさん:2006/10/15(日) 14:25:37
plvcClient->pszTextの値に惑わされている予感。
356353:2006/10/15(日) 14:30:03
>>355
まさにその通りでした。ちゃんと取れてました。
あとVirtualFreeExとVirtualFreeのサイズに0を指定しなければ
ならないのにdwSizeを指定してしまい、解放できていませんでした。
ご迷惑おかけして申し訳ありませんでした。
357デフォルトの名無しさん:2006/10/15(日) 16:10:48
質問です

ファイラーのようなものを作りたいと考えているのですが、
アプリケーション外の領域に対するファイルのドラッグ&ドロップの挙動を
Windows標準のエクスプローラと同じものにする簡単な方法はありませんでしょうか。
358デフォルトの名無しさん:2006/10/15(日) 16:15:08
だったらエクスプローラを拡張するソフトを作れば?
既に腐るほどあるけどさ。
359デフォルトの名無しさん:2006/10/15(日) 16:20:44
ラッパーちゃん重いお
360デフォルトの名無しさん:2006/10/15(日) 16:24:13

http://gamdev.org/up/img/7841.gif
画面の描写が崩れる・・・・    どこに描写してるんだ!


最初は普通、使っているうちに。
DIB関係で問題起こしてるんかもなぁ〜
画面は常に手前にセット
361デフォルトの名無しさん:2006/10/15(日) 16:26:13
精神的ブラクラ注意
362デフォルトの名無しさん:2006/10/15(日) 16:38:43
この立体視なにが見えるか分かる方いますか?
http://www.vipper.org/vip357562.gif

363デフォルトの名無しさん:2006/10/15(日) 16:43:50
>>362
せめて拡張子変えとけばいいのに。。。。
364デフォルトの名無しさん:2006/10/15(日) 16:53:29

ここは何のスレだ?
365デフォルトの名無しさん:2006/10/15(日) 18:09:43
すみません、ウィンドウが表示されているかどうかを取得するにはどうしたらいいんでしょう?
設定するには ShowWindow でいいのですが、取得方法は、
GetWindowInfo、GetWindowLongPtr などを調べても見つからなかったです。
Windows XP です。
366デフォルトの名無しさん:2006/10/15(日) 18:14:28
俺は
if(GetWindowLong(hWnd, GWL_STYLE) & WS_VISIBLE)
でやってるが自己流なんでなんかマズいかもしれん
367デフォルトの名無しさん:2006/10/15(日) 18:14:36
IsWindowVisible
368デフォルトの名無しさん:2006/10/15(日) 18:16:59
おまえあたまいいな
369365:2006/10/15(日) 18:47:42
>>366-367
ありがとうございます!解決しました。
370351:2006/10/15(日) 20:44:48
>>351
なんとかならんとですか?

1件見つかったんだけど、メニューへの挿入方法で
微妙に違うし、ソース公開されてなかったし・・('A`)
#32768に、なにか送りつけても意味なさげのようで。
371デフォルトの名無しさん:2006/10/15(日) 21:04:02
>>370
リソースエディタで見てわからんか。
リソースとして埋め込んでない場合もあるけど。
372デフォルトの名無しさん:2006/10/15(日) 22:29:49
>>366
親が最小化されている等の理由で見えないときでもWS_VISIBLEは落ちないけど
IsWindowVisible()はFALSEを返す
>>370
WH_SYSMSGFILTER?
373351:2006/10/15(日) 22:37:21
>>371
埋め込んでなさげです。
>>372
トンクス。
ちょっと試してみますです。
374デフォルトの名無しさん:2006/10/16(月) 12:30:15
スレッドA : GetMessage() ループしている Windowなスレッド
スレッドB : 窓を持たない 非Window なスレッド
として、
スレッドB から スレッドA内で生成された Window に対しての SetWindowText() / SendMessage() は
スレッドA が動いていない場合には スレッドB内でブロックされるのでしょうか?
375デフォルトの名無しさん:2006/10/16(月) 12:36:57
何故試さない?
376374:2006/10/16(月) 12:47:28
デバッガではブロックされているように見えるんだけど
仕様なのかどうかわからないので質問してみました
377デフォルトの名無しさん:2006/10/16(月) 12:59:23
仕様
378デフォルトの名無しさん:2006/10/16(月) 13:07:28
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp
>f the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure.
ウィンドウメッセージはそのウィンドウが所属するスレッドで処理される。
よって、スレッドAがsendされたメッセージを処理できない状態なら、スレッドBはブロックされる。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp
>Note that the receiving thread need not yield control explicitly; calling any of the following functions can cause a thread to yield control implicitly.
>DialogBox, DialogBoxIndirect, DialogBoxIndirectParam, DialogBoxParam, GetMessage, MessageBox, PeekMessage, SendMessage
379374:2006/10/16(月) 13:15:54
>>377-378
ありがとうございます。 仕様ということで理解しました。
スレッド設計見直しか…

スレッドB が定期的に SendMessage してて、スレッドA の WM_CLOSE をきっかけに
スレッドB を停止させようとしてた(停止用 event をsignalにして theaed handle が signal まで待つ)のですが、
そこでデッドロックしていたと…
380デフォルトの名無しさん:2006/10/16(月) 13:26:55
>>379
かつて俺が遭遇した状況と同じだぁ
381デフォルトの名無しさん:2006/10/16(月) 17:40:09
すいません質問させて下さい。
ファイルを保存する際に、コモンダイアログボックスを呼び出した場合
デフォルトでファイル名の場所に、文字列を入れるにはどうしたら良いのでしょうか。
よろしくお願いします。
382デフォルトの名無しさん:2006/10/16(月) 18:07:04
印刷設定ダイアログを開いてWindowsに反映させる方法を教えて下さい。

プリンタドライバの固有の設定(集約印刷)を反映させる方法が分かりません。
383デフォルトの名無しさん:2006/10/16(月) 18:22:10
今回初めてwin32apiを使用するのですが
ウィンドウサイズを変更したりウィンドウを移動させたりすると
ウィンドウプロージャのデフォルトの部分

default:
return DefWindowProc(hWnd, message, wParam, lParam);

で0xC0000005のエラーを吐いてしまいます。

ウィンドウを移動したりしない場合は問題なく動作してるのですが・・・
どのような場合にこういうエラーが起こるのかアドバイスを頂ければと思います。
384デフォルトの名無しさん:2006/10/16(月) 18:27:18
lineto()で閉じた図形を描いてその中を塗りつぶす方法が知りたいです。
385デフォルトの名無しさん:2006/10/16(月) 18:28:52
頑張れば出来る
386デフォルトの名無しさん:2006/10/16(月) 18:29:54
>>383
日本語でおk
387386:2006/10/16(月) 18:31:43
0xC0000005のエラーってなんだ?
アドレスのこと?
アクセス違反か?
case WM_SIZE:の下にちゃんとreturn 0入ってる?
388デフォルトの名無しさん:2006/10/16(月) 18:32:39
>>387
0xC0000005 って言えば2ちゃんでも超有名なあれじゃないか。
見たことないの?
389386:2006/10/16(月) 18:34:52
>>388
いやだからアクセス違反の0xC0000005なのかアドレスを示す0xC0000005なのかと
390デフォルトの名無しさん:2006/10/16(月) 18:38:32
>>386
言葉足らずで申し訳ないです。


アクセス違反の0xC0000005です。
> 0xC0000005: 場所 0xe36eeb84 を読み込み中にアクセス違反が発生しました。
391386:2006/10/16(月) 18:43:07
ふむ
関係ない変数とかをプロシージャに返してない?

int message;
・・・
switch(msg){
・・・
default:
return DefWindowProc(hWnd, message, wParam, lParam);
・・・

まさかねそんなことしないよね
392383:2006/10/16(月) 18:48:34
>>386
そういうことはしてないと思います。

ウィンドウサイズを変更するとすぐにエラーが出てしまいます。
WS_PAINTの処理をしてそのあとdefaultの項に移動してそこで止まります。

ウィンドウを移動すると1秒ぐらいは問題なく移動できてその後エラーが出てしまいます。
393デフォルトの名無しさん:2006/10/16(月) 18:52:27
break の入れ忘れとか
特定の case で初期化される >>391 の message のような変数を 別の case で利用しているとか
hWnd 書き換えてしまったとか
394386:2006/10/16(月) 18:52:42
395デフォルトの名無しさん:2006/10/16(月) 18:55:50
>>384
キーワード:クリッピング

ウザイからコテはずすか・・
396383:2006/10/16(月) 19:15:34
>>386
アップしてみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2782.txt

プログラム自体を初めて日が浅いことと
時間の関係でやっつけ仕事になり酷いコードになっています。
宜しくお願いします。
397デフォルトの名無しさん:2006/10/16(月) 19:22:23
manager.Set_Paint(&hDC,&hPen,&ps); で auto変数へのポインタ設定してるじゃん。
こういう使い方って保証されたっけ?

WM_CREATE で設定後スコープ脱出
WM_PAINT で設定されたポインタ参照。 参照先は上の状態で設定したスコープ内ポインタ
398デフォルトの名無しさん:2006/10/16(月) 19:24:37
クラスの実体は?
DeleteObjectしてるけど、ちゃんとどこかでCreatePenしてる?
システムオブジェクトはDeleteObjectしちゃだめだよ
399383:2006/10/16(月) 19:30:36
添削気取り乙
400デフォルトの名無しさん:2006/10/16(月) 19:32:04
>>398
あー・・・
CreatePenは最初はしてたけど途中から使わなくなったんで消してましたorz

しかし、その部分をコメントアウトしてやっても改善しないようです。
どういうことなんだろ・・・
401383:2006/10/16(月) 19:32:16
>>399
誰だオメー
402デフォルトの名無しさん:2006/10/16(月) 19:33:26
何で>>397はスルーなんだ?
403デフォルトの名無しさん:2006/10/16(月) 19:33:50
>>397
もしかして、とても変な事してますかね・・・
404デフォルトの名無しさん:2006/10/16(月) 19:34:36
不愉快だ。帰る。
405デフォルトの名無しさん:2006/10/16(月) 19:35:27
>>404
おこらせてしまったようです、申し訳ありません
406デフォルトの名無しさん:2006/10/16(月) 19:36:06
>>405
いえいえ。こちらこそ。
407デフォルトの名無しさん:2006/10/16(月) 19:39:43
「俺が」よくするのはバッファオーバーフローとかしてて
DefWindowProcに到達するころにはhwndがぶっ壊れてる んでアクセス違反と
408デフォルトの名無しさん:2006/10/16(月) 19:39:50
>>403
例えの話になるけど、auto変数確保って呼び出された時のスタックを擬似拡張してやりくりしてるわけじゃん。
そんな場所へのポインタを保持したところで、
WM_CREATE 呼び出し時のスタック状況が一致すること前提でないと正しく機能しないと思うんだけど?
409デフォルトの名無しさん:2006/10/16(月) 19:41:29
>>403
auto変数(staticとかexternとかを省略した場合のデフォルト)になってるから
WndProcを抜けるとその変数のメモリ領域は開放される
だからそれを参照しようとするとまずい

ってことだと思うよ
static宣言でもつけとけばいいんじゃね
410デフォルトの名無しさん:2006/10/16(月) 19:42:53
それ以前に抜け出した後、そこの内容は壊される可能性があるか。 <auto変数
411デフォルトの名無しさん:2006/10/16(月) 19:56:32
>>410
・・・えっ?
釣れますか?
412410:2006/10/16(月) 20:03:30
>>411
釣りじゃなくて素で気にしてるんだけど… 釣りに見えた?

void foo(int a)
{
 static int* p=NULL;
 int me;
 if (a==0) p=&me else if (a==1) *p=1; else printf("%d", *p);
}

void bar()
{
 int a, b, c; ..... /* a,b,c を適度に R/W */
}

として
foo(0); bar(); foo(1); bar(); bar(); foo(-1); と呼び出したらおかしくならないか?
413デフォルトの名無しさん:2006/10/16(月) 20:06:39
>>412
そういう意味ね。
>それ以前に抜け出した後、そこの内容は壊される可能性があるか。
って書いてたからカンチガイした。
>それ以前に抜け出した後、そこの内容は壊される可能性がある。
ならわかった。
414383:2006/10/16(月) 20:13:45
返答ありがとうございます
色々試してみようと思います
415383:2006/10/16(月) 20:54:26
今日はもう帰宅するので明日試してみます
また明日質問させて頂くかもしれませんがよろしくお願いします
416デフォルトの名無しさん:2006/10/16(月) 22:51:07
そう言い残して>>383は帰宅のとについた・・・・
しかし・・・・
この後>>383に起こる悲劇を誰が予測できたであろうか。。。。
417デフォルトの名無しさん:2006/10/16(月) 23:09:54
       ヽ|/
     / ̄ ̄ ̄`ヽ、
    /         ヽ
   /  \,, ,,/    |
   | (●) (●)|||  |
   |  / ̄⌒ ̄ヽ U.|   ・・・・・・・・ゴクリ。
   |  | .l~ ̄~ヽ |   |
   |U ヽ  ̄~ ̄ ノ   |
   |    ̄ ̄ ̄    |
418デフォルトの名無しさん:2006/10/17(火) 00:21:04
お前らw
419デフォルトの名無しさん:2006/10/17(火) 01:28:37
タスクトレイにあるアプリケーションの画面を表示させるにはどうすればいいのでしょうか?
420デフォルトの名無しさん:2006/10/17(火) 01:59:08
タスクトレイでマウスクリックしたことにする
421デフォルトの名無しさん:2006/10/17(火) 08:34:13
ウインドウハンドルから最前面表示設定されているかどうか判定するAPIってありますか?
最前面表示するSetWindowPosで設定しても、GetWindowPosみたいなのがあるかと思いましたが、
探してもみつからないので、お助けください。
422デフォルトの名無しさん:2006/10/17(火) 08:36:18
>>382 もヨロ
423383:2006/10/17(火) 09:19:25
昨日はありがとうございました。
おはようございます

昨日の問題についてはAuto変数ををstaticにすることで無事解決したようです。
ありがとうございました。

ところで
>>412
foo()とbar()って互いに影響を及ぼすような物ではないように思えるのですが
foo(0); bar(); foo(1); bar(); bar(); foo(-1); の様に繰り返すとどのような不都合が発生するのでしょうか・・・?

424デフォルトの名無しさん:2006/10/17(火) 09:29:08
>>423
> 昨日の問題についてはAuto変数ををstaticにすることで無事解決したようです。

原因は理解したの?
425383:2006/10/17(火) 09:46:48
ポインタにauto変数を代入してるため
procが呼び出されて終了するとポインタもとが削除されてるからエラーになる…
でいいのかな

毎回ポインタを再設定するかポインタ元をstatic変数にすればいいのですかね
426デフォルトの名無しさん:2006/10/17(火) 09:55:20
>>425
解かってみるみたいだけど、
そしたら何故

> >>412
> foo()とbar()って互いに影響を及ぼすような物ではないように思えるのですが

こんな疑問が出るんだろう…

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2785.c
これでも参考に考えてくれ
427デフォルトの名無しさん:2006/10/17(火) 11:10:14
>>421
GetWindowLongのGWL_EXSTYLEじゃないかな?
428デフォルトの名無しさん:2006/10/17(火) 11:22:54
>>382 もヨロ
429デフォルトの名無しさん:2006/10/17(火) 13:02:00
>>428
rundll32.exe printui.dll PrintUIEntry
じゃ駄目?
430デフォルトの名無しさん:2006/10/17(火) 14:18:06
>>423
不都合っていうか int me; が割り当てられるスタックの中身が
書き換わる可能性があるってことだろ。

意図的に>412のコードを書いてるなら
値は未定義だとしてもちゃんと動くんじゃね?
431デフォルトの名無しさん:2006/10/17(火) 15:13:12
>>382 もヨロ
432383:2006/10/17(火) 15:46:02
>>426
参考のコードを実行したところ
int meのアドレスとint bのアドレスが同じになってました。

つまり
static int* pの中身がbar()の実行中はint bになってしまう
(*pの中身が不定になる?)
ということで良いのでしょうか

とにかくやってはいけないことをやっているという事は良くわかりました。
ありがとうございます。
433デフォルトの名無しさん:2006/10/17(火) 18:15:57
SHGetFileInfo()のSHGFI_ICONLOCATIONはパスのアイコンがしまわれてる
位置を返すのですが、大抵のアイコンはDLLに入っててインデックスが
わからないのでアイコンが取得ができない…orz

こいつはいったい何のためにあるのですか?
それともアイコンインデックスを取得する何か別な方法があるのですか?
教えてください。
434デフォルトの名無しさん:2006/10/17(火) 18:37:06
SHFILEINFO::iIconは違うのか?
435デフォルトの名無しさん:2006/10/17(火) 18:38:42
・SHGFI_ICONLOCATION.....ファイルを表すアイコンを含むファイル名を返す
(ファイル名はpsfiにより指定されるTSHFileInfo構造体のszDisplayNameにコピーされる)
436デフォルトの名無しさん:2006/10/17(火) 18:54:53
>435
MSDNには、それに続いてこう書いてある。
The icon's index is copied to that structure's iIcon member.
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shgetfileinfo.asp

もっとも、アイコンを得たいだけなら、ExtractAssociatedIconの方が直接的だと思う。
437433:2006/10/17(火) 19:29:23
完璧見落としてました…すみません。
アイコンリソースを直接取得したかったので調べてました…
ありがとうございましたm(__)m
438デフォルトの名無しさん:2006/10/17(火) 19:39:34
>>382 もヨロ
439デフォルトの名無しさん:2006/10/17(火) 19:52:06
delphiの方で教えてくれるんじゃネーの?
440デフォルトの名無しさん:2006/10/17(火) 21:48:49
>>382
>>429は試したんかいな?
441デフォルトの名無しさん:2006/10/18(水) 00:09:10
ウィンドウ分割するときって皆どうしてる?
猫でもわかる〜みたいに
ウィンドウに子ウィンドウを貼ってる?

MFCはどうやってやってるのかイマイチ和漢ね
442567:2006/10/18(水) 00:15:38
念力
443デフォルトの名無しさん:2006/10/18(水) 00:46:22
WTL
444デフォルトの名無しさん:2006/10/18(水) 01:07:11
>>441
スパイすれば分かるじゃん
445デフォルトの名無しさん:2006/10/18(水) 02:33:47
モジュールの自分自身が利用しているメモリ使用量(タスクマネージャで表示されている数)を
取得する関数ってありますか?
446デフォルトの名無しさん:2006/10/18(水) 11:57:24
MSDNの「TCHAR 単位で指定します。」ってのは TCHAR buf[MAX_PATH] でいうと
sizeof(buf) ではなく MAX_PATH を渡せって意味?
447デフォルトの名無しさん:2006/10/18(水) 12:10:17
普通に考えたらそうだろうね
448デフォルトの名無しさん:2006/10/18(水) 12:15:36
トン
TCHAR なのに sizeof(buf) 渡してるサンプルも結構あるからアルェ-と思ってな
449デフォルトの名無しさん:2006/10/18(水) 12:23:19
>>448
APIによってバッファサイズの指定単位がばらばらだからね。
「TCHAR単位で」と明示してある場合は、sizeof(TCHAR) * 要素数。
450デフォルトの名無しさん:2006/10/18(水) 12:27:14
>>499
>「TCHAR単位で」と明示してある場合は、sizeof(TCHAR) * 要素数。

違うような気がする。
451デフォルトの名無しさん:2006/10/18(水) 12:39:34
>>450
うわ、素で書き間違えたww
TCHAR単位の場合は、要素数ですねorz
452デフォルトの名無しさん:2006/10/18(水) 13:24:26
Windowsが終了するときに来るメッセージってありますか?
453デフォルトの名無しさん:2006/10/18(水) 13:29:53
WM_QUERYENDSESSION/ENDSESSION
454デフォルトの名無しさん:2006/10/18(水) 13:52:30
MSDNOnlineでDisableProcessWindowGhostingが見つからないのですが禁止ですか。
(VS2003付属のmsdnにはありました)
455デフォルトの名無しさん:2006/10/18(水) 14:13:16
VS2005 と WindowsSDK for VistaRC1 のには載ってる。
456デフォルトの名無しさん:2006/10/18(水) 14:16:12
>>453
thx!!
457デフォルトの名無しさん:2006/10/18(水) 20:55:32
クラス名もウィンドウキャプションも環境によって変化するウィンドウのウィンドウハンドルを取得したのですが
どうやればできるのか教えて下さい。宜しくお願いします。
458デフォルトの名無しさん:2006/10/18(水) 20:56:18
ごめんなさい
ウィンドウハンドルを取得したいのですが の間違いでした。
459デフォルトの名無しさん:2006/10/18(水) 21:00:40
ウィンドウキャプションを目視で確認してからウィンドウを探せばいいと思うよ

まあプログラムだけでやりたいなら取得したいウィンドウの共通点みたいなのがないと難しいんじゃないかと思う
ウィンドウの大きさとかウィンドウを作成したプロセスのexeファイルのパスとか
460デフォルトの名無しさん:2006/10/18(水) 21:03:17
列挙するだけしといて キャプションを正規表現で刈り込んでくとか…
プロセスid で刈り込んでくとか…

# WindowClass 名が変化する ってのは MFCで書かれたアプリケーションか?
461デフォルトの名無しさん:2006/10/18(水) 21:15:35
標準のEDITコントロールとかを探そうとしてるのか?

トップレベルのWindowを探しておいて、そこのn番目の兄弟/子供から って
事前に対象を絞り込んだほうが良いと思われ
462457:2006/10/18(水) 21:24:46
>>459
それはProcessIDから調べるという事ですか?
>>460
正規表現はよくわからないのでProcessIDからどうにかならないか調べてみる事にします

お二人共有難うございました。
なんとなくEnumWindowsを使えばいいのかなぁと思ってるけど合ってるのかな
463デフォルトの名無しさん:2006/10/18(水) 21:27:53
>>462
何がしたいのか具体的に言ってくれればもっとちゃんと答えられるかもしれない
464デフォルトの名無しさん:2006/10/18(水) 21:28:52
>>461
そうです。Editを探してそこにテキストをセットしたいと考えています。
FindWindowで見付からないかと見てみたらクラス名もキャプションも使えそうにないので質問しました。
3行目以降何を言っているのか理解できない俺には無理なんでしょうか
465デフォルトの名無しさん:2006/10/18(水) 22:22:38
自分のプログラム中でなら、概ね GetDlgItem と リソースID で対象は特定できるな
他人のプログラム中のEDITコントロールが対象なら >>459-461 のように手間をかけねばならない。

やりたいことをはっきり示せ
466457:2006/10/18(水) 23:37:50
EnumWindowsで列挙したWindowからGetWindowTextでキャプションを取得し特定の文字列がキャプションの中に存在したら
そいつが親Windowって事で見つける事ができたのですが
目的のEditコントロールが、一番上の親Windowから見てひひひひ孫くらいに存在して
しかもひひ孫とひひひ孫くらいにまた可変クラスネームが存在し、
EnumChildWindowsでは追いかけきれずに目的のコントロールをプログラム中から特定する事ができませんでした。

LimeChatで外部ツールから発言させようと思っていたのですが無理っぽいです。
皆さん有難うございました。違う角度からアプローチしてみます。
467デフォルトの名無しさん:2006/10/18(水) 23:45:45
>>466
>しかもひひ孫とひひひ孫くらいにまた可変クラスネームが存在し
わざわざ途中の調べなくてもよくね?
無条件で子ウィンドウ列挙してってひたすら文字列を比較でいいじゃないか
まあ動作めちゃくちゃ遅くなるだろうけど・・・

手動でもいいならLimeChat起動する度にマウスキャプチャー使って取得するって手もあるが
468デフォルトの名無しさん:2006/10/18(水) 23:49:03
>>466
ウインドウ列挙だけに頼らないで他の条件からも特定していけばいいんでね
469デフォルトの名無しさん:2006/10/19(木) 01:21:32
ダイアログボックスを
リソーススクリプトで設定、DialogBox(...)で呼び出す場合、
文字色を変えたり
不定形リージョンを指定したり
できないんですか?
既出だったらごまんなさい。
470デフォルトの名無しさん:2006/10/19(木) 05:19:52
>>466
EnumChildWindowsでよくない?
見つかった子の親と孫もついでに調べて条件に合ってるか判別してくとか
471デフォルトの名無しさん:2006/10/19(木) 08:51:36
自分とは別の exe ファイルの中の文字列リソースを取得するのはどうするの?
DLL は、LoadLibrary → LoadString で取得できた。
CreateProcess → LoadString?
472デフォルトの名無しさん:2006/10/19(木) 11:52:16
>>471
ふつうに LoadLibrary でいいと思うけど。
473デフォルトの名無しさん:2006/10/19(木) 16:00:48
>>472
どもです。出来ました。
LoadLibrary って DLL だけかと思いこんでました。

ありがとうございました。
474デフォルトの名無しさん:2006/10/19(木) 17:31:45
>>427
ありがとう。かなりうまくいきました。
475デフォルトの名無しさん:2006/10/19(木) 17:40:19
LoadLibraryExにLOAD_LIBRARY_AS_DATAFILEを指定して読み込んだ方がいいような気がする。
476デフォルトの名無しさん:2006/10/19(木) 18:05:24
最前面であるかを知りたいのですが、GetWindowPosがな…、>>421おまいは俺か
GetWindowLongのGWL_EXSTYLEで、WS_EX_TOPMOSTとorとればいいんですね。
ありがとうございました。
477デフォルトの名無しさん:2006/10/19(木) 18:22:55
DiskeeperのIO Smartみたいな機能ってどうやって実装すればいいですか?
ディスクにガリガリアクセスするようなアプリで
他がHDDにアクセスしていたらその間はアプリ側の作業を止めるという物です。
プロセスのプライオリティの設定では出来ません。
478デフォルトの名無しさん:2006/10/19(木) 18:29:47
>>476
orじゃダメだと思うけどな。
479デフォルトの名無しさん:2006/10/19(木) 18:30:11
>>476
そう・・・私はあなたの生き別れた双子の妹です。
480デフォルトの名無しさん:2006/10/19(木) 18:30:59
>>476
安藤
481デフォルトの名無しさん:2006/10/19(木) 19:59:49
コントロールを作成するとき、ウィンドウハンドル値を指定して作成できますか?
または、あるコントロールに対しウィンドウハンドルを任意の値に書き換えることは出来るのでしょうか?
よろしくお願いします。
482デフォルトの名無しさん:2006/10/19(木) 20:04:35
どちらもできません。
483デフォルトの名無しさん:2006/10/19(木) 20:06:32
>>481
できません。
ハンドルの実体はOSが内部で使用している構造体を指すポインタ。
484デフォルトの名無しさん:2006/10/19(木) 20:22:04
今初めて知った
485デフォルトの名無しさん:2006/10/19(木) 20:43:37
だから被ることはないわけだ
486デフォルトの名無しさん:2006/10/19(木) 21:39:34
>>483
その構造体のなかってどうなってるの?
487デフォルトの名無しさん:2006/10/19(木) 21:39:57
質問です。
WMPAINTで四角を表示してクリックで位置を変えるようにしたいのですが

HDC hdc;
PAINTSTRUCT ps;
int n=10;


switch (msg) {

case WM_LBUTTONDOWN:
n=n+10;
InvalidateRect(hWnd, NULL, TRUE);
return 0;

case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
RoundRect(hdc , n , 10 , 50 , 30 , 50 , 50);
EndPaint(hWnd , &ps);
return 0;

これでは何故だめなのでしょうか? 
かなり考えたのですが分からないのでどなたか教えてください
488デフォルトの名無しさん:2006/10/19(木) 21:43:34
>>487
そういう n は「ローカル変数」といって、関数を抜けた時点で値は保障されない。
次に呼ばれる時には再び 10 が代入される。

static int n = 10; としておけば、関数を抜けても値は保持されるし、
一番最初にこの関数が実行されるときにだけ 10 が代入されて、思った通りに動く。
489デフォルトの名無しさん:2006/10/19(木) 21:56:51
>>488
丁寧に教えてくれて有難うございます。
490デフォルトの名無しさん:2006/10/19(木) 21:57:33
>>486
禁則事項です
491デフォルトの名無しさん:2006/10/19(木) 22:00:33
禁則?!
492デフォルトの名無しさん:2006/10/19(木) 23:07:34
>>486
公開されてないし、ポインタという保証も無い。
493デフォルトの名無しさん:2006/10/19(木) 23:32:12
スタティックのローカル変数と
グローバル変数ってスコープが違うだけで
他の動きは同じだよね?
494デフォルトの名無しさん:2006/10/19(木) 23:35:33
クラスインスタンスだと、初期化される時が違う。
グローバル変数だとmain/WinMain関数よりも前にコンストラクタが呼ばれる。
静的変数だと最初にその変数が参照されたときにコンストラクタが呼ばれる。
495デフォルトの名無しさん:2006/10/19(木) 23:37:11
さすが
勉強になります
496デフォルトの名無しさん:2006/10/19(木) 23:37:20
>>493
定数でない初期値がある場合、最初の1度だけ初期化が行われるように
初期化済みかどうかを覚えておくフラグと、チェックするコードが追加される。

void foo(int x) { static int n = x; return x; }
↑最初の1度だけxが代入され、その後ずっと変わらない。
497デフォルトの名無しさん:2006/10/19(木) 23:43:55
#define WIN32_LEAN_AND_MEAN

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
HANDLE hHandle;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hHandle);

LUID lLuid;
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &lLuid);

LUID_AND_ATTRIBUTES lLuidAttr;
lLuidAttr.Luid = lLuid;
lLuidAttr.Attributes = SE_PRIVILEGE_ENABLED;

TOKEN_PRIVILEGES Newtoken;
Newtoken.PrivilegeCount = 1;
Newtoken.Privileges[0] = lLuidAttr;

AdjustTokenPrivileges(hHandle, FALSE, &Newtoken, 0, NULL, NULL);
CloseHandle(hHandle);

ExitWindowsEx(EWX_POWEROFF, 0);
return 0;
}
498デフォルトの名無しさん:2006/10/20(金) 00:20:34
hBitmap = CreateCompatibleBitmap(hdc, fwidth, fheight)
GetDIBits(hdc, hBitmap, 0, fheight, lpPixel, bi, DIB_RGB_COLORS)

a = GetPixel(hdc, 100, 100)

GetDIBitsでlpPixelの中に格納されている情報とGetPixelでは値が異なるみたいなのですが、
lpPixelにはRGB値が格納されないのですか?
もし可能であればlpPixelに格納されている情報をRGBにしたいのですが、
どうすればできますか?
499デフォルトの名無しさん:2006/10/20(金) 00:26:07
CreateCompatibleBitma() で生成せずに
CreateDIBSection() で 24bit カラーのビットマップを作るしかないようなキガス
500デフォルトの名無しさん:2006/10/20(金) 00:30:36
位置に対するアドレスの計算はどうやってやってるんだ?
501デフォルトの名無しさん:2006/10/20(金) 00:32:49
>>499
回答ありがとうございます。少し調べてみます。

>>500
(x * 2) + ((fheight - y) * (fwidth * 2))

これでできました。
502デフォルトの名無しさん:2006/10/20(金) 00:46:51
>>501
次の row を指すだめの量 = (width * 3) を DWORDでアライメントした値

w2 = (width * 3 + sizeof(DROWD)-1) / sizeof(DROWD) * sizeof(DROWD);
(height-1 - y) * w2 + (x * 3)
503デフォルトの名無しさん:2006/10/20(金) 00:53:54
DROWDてなんすか?
504デフォルトの名無しさん:2006/10/20(金) 00:56:08
るかわばめよにさかさ
505デフォルトの名無しさん:2006/10/20(金) 01:51:34
?かすんなてDWORD
506498:2006/10/20(金) 02:09:30
>>499 >>502
無事解決しました。本当にありがとうございました!
507デフォルトの名無しさん:2006/10/20(金) 02:12:52
SPY++でメッセージの監視が出来ないソフトって
どんな方法で拒否してるんでしょうか?
それと、CreateToolhelp32Snapshotでもハンドルを
キャッチできないプログラムはどのような仕組みなのでしょうか?
質問2つですいませんが、教えて貰えると助かります。
508デフォルトの名無しさん:2006/10/20(金) 02:28:54
>>507
ソニーの音楽CDによって提供される機能を利用しています。
509567:2006/10/20(金) 02:59:35
    Λ_Λ  うるさいわね!
    ('・ω・゛)  そんなことより私の下着、返してよ!
     (つ/ )
      |`(..イ
     しし'
510デフォルトの名無しさん:2006/10/20(金) 05:43:25
>>492
実はDDK見ると書いてるって場合もあるけどね。
Windowsのバージョン間や9x系とNT系でまったく違うことも珍しくないし
511デフォルトの名無しさん:2006/10/20(金) 19:56:18
HDROPはDROPFILESとしてSDKに載っているね。
512デフォルトの名無しさん:2006/10/21(土) 09:25:19
タイトルバー上での右、中クリックの動作を拡張したくWH_MOUSEを指定してフックをしました。
目的の通り右クリックでMAXIMIZE、中クリックでCLOSEさせることができたのですが
MAXIMIZE後、マウスカーソルの位置がタイトルバー以外に移動したとき
WM_RBUTTONUPが呼ばれるらしくアプリケーションの右クリックメニューが出てしまいました。
そこでWM_NCRBUTTONDOWNをWM_NCRBUTTONUPに変更したところ何故かメッセージが全くきませんでした。
どうすれば目的を達成出来るでしょうか?
513512:2006/10/21(土) 09:26:31
該当部分のソースコードです。

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)
{
mh = (MOUSEHOOKSTRUCT *)lParam;

if(mh->wHitTestCode == HTCAPTION)
{
switch(wParam)
{
case WM_NCRBUTTONUP:
PostMessage(mh->hwnd, WM_SYSCOMMAND, IsZoomed(mh->hwnd) ? SC_RESTORE : SC_MAXIMIZE, 0);
return 1;

case WM_NCMBUTTONDOWN:
PostMessage(mh->hwnd, WM_SYSCOMMAND, SC_CLOSE, 0);
return 1;
}
}
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
514デフォルトの名無しさん:2006/10/21(土) 11:33:53
WM_PAINTってwParamは使ってないとヘルプにあるのに
HDCを入れるプログラムがよくあるけど、これどうなってるの?
515デフォルトの名無しさん:2006/10/21(土) 12:05:02
コモンコントロールの真似してる
516デフォルトの名無しさん:2006/10/21(土) 18:31:14
VCのIDEやMS-Officeのホットキーをフックで奪う常駐アプリを書いてるんですが
SetWindowsHookEx(WH_GETMESSAGE, ...);
でWM_SYSKEYUPを捉えてもたまに取り逃がすことがあるようです。(成功する時もある)
officeのキーボードアクセラレータより早く、そして確実に検出する方法は無いもので
しょうか?

ちなみに開発・テスト環境ともに日本語w2k+SP4です
517デフォルトの名無しさん:2006/10/21(土) 18:45:18
開発環境は?
518516:2006/10/21(土) 19:00:08
VC++6 + SP5 + PlatformSDK(Feb/2003)です。
519デフォルトの名無しさん:2006/10/21(土) 19:07:15
WM_SYSKEYDOWN

WM_SYSKEYUP

なので WM_SYSKEYDOWN も試してみたらどうだろう。
と、試した事のない俺が言ってみる。
520デフォルトの名無しさん:2006/10/21(土) 19:08:36
フックプロシージャはEXE内部にあります? それともDLL内部?
521デフォルトの名無しさん:2006/10/21(土) 19:09:32
リピートがかかるとUPがこないでDOWNが連続してくるんじゃなかったっけ
522516:2006/10/21(土) 19:25:26
>>520
DLL内部にあります。その場でWM_SYSKEY*をWM_NULLに置換しちゃうだけです。
PC自体の負荷が高いと取りこぼすことがあるんだろうか・・・

>>521
はい、キーを少し長めに押して離すと

WM_SYSKEYDOWN
WM_SYSKEYDOWN
WM_SYSKEYDOWN
WM_SYSKEYDOWN
WM_SYSKEYDOWN
WM_SYSKEYDOWN
WM_SYSKEYUP

となるので、1つ目で拾えなくても2つ目以降でキャッチできるのか、WM_SYSKEYDOWN
だと(今のところ)100%キャッチできるようになりました。(>>519さんの方法)
523デフォルトの名無しさん:2006/10/22(日) 02:25:11
配置したコントロールの画面上の位置を取得するAPIを教えていただきたく
524デフォルトの名無しさん:2006/10/22(日) 03:26:17
配置したなら座標知ってそうに思えるけど
GetWindowRect(), GetClientRect()あたりでできます。
525デフォルトの名無しさん:2006/10/22(日) 03:35:41
これを知りたいんじゃないか?
ClientToScreen()
526デフォルトの名無しさん:2006/10/22(日) 13:04:42
GetWindowRect->MapWindowPoints
527デフォルトの名無しさん:2006/10/22(日) 18:32:39
クライアント座標ってなんですか?
528デフォルトの名無しさん:2006/10/22(日) 18:49:24
>>527
クライアント領域の(0,0)とした時の相対座標。
529528:2006/10/22(日) 18:49:53
ゴメ

>>527
クライアント領域の左上を(0,0)とした時の相対座標。
530デフォルトの名無しさん:2006/10/23(月) 15:56:10
他のプロセスのウィンドウへ、キーを押したとするシミュレートをしたいです。
例えば、電卓を起動してるとき、'1'という文字を電卓に送って、電卓に1が表示されるように。
現在、電卓のメインウィンドウのハンドルを取得することはできたが、それに、
SendMessage(電卓のWindowハンドル,WM_KEYDOWN,0x31,0x00150001);
とやっても、何も起きません。どうしたらいいですか
531デフォルトの名無しさん:2006/10/23(月) 16:16:30
ヒント:PostMessage
532デフォルトの名無しさん:2006/10/23(月) 16:18:31
533デフォルトの名無しさん:2006/10/23(月) 16:50:55
単に、PostMessage にしたらでめあした。orz.orz.orz.orz.orz.orz.orz.orz.orz.orz.orz.orz.
こんなことで数時間も悩んでたなんてまじっすか。orz.orz.orz.orz.orz.orz.
てかなんでSendMessageじゃだめなんだこらお
534デフォルトの名無しさん:2006/10/23(月) 16:59:23
SendMessage(A)
ウィンドウにメッセージを送信します。
この関数は、指定したウィンドウのウィンドウプロシージャが
処理を終了するまで制御を返しません。

メッセージを送信して直ちに制御を返すには、
SendMessageCallback 関数または SendNotifyMessage 関数を使います。
メッセージをスレッドのメッセージキューにポストして直ちに制御を返すには、
PostMessage 関数または PostThreadMessage 関数を使います。

LRESULT SendMessageA(
HWND hWnd, // ウィンドウハンドル
UINT Msg, // メッセージコード
WPARAM wParam, // wParamパラメータ
LPARAM lParam // lParamパラメータ
);USER32.DLL

ttp://yokohama.cool.ne.jp/chokuto/urawaza/api/SendMessage.html
535デフォルトの名無しさん:2006/10/23(月) 17:14:31
宣伝?
536デフォルトの名無しさん:2006/10/23(月) 17:16:07
過剰反応
537デフォルトの名無しさん:2006/10/23(月) 17:24:26
>こんなことで数時間も悩んでたなんてまじっすか。orz.orz.orz.orz.orz.orz.

数時間でガタガタ言うんじゃねぇ。
538デフォルトの名無しさん:2006/10/23(月) 17:46:12
ちょっともちつけ
539デフォルトの名無しさん:2006/10/23(月) 17:46:41
悲しいけど俺も数時間停滞とかよくある
構造体メンバの初期化値がおかしいだけでした^^;; とかな

ほんとAPIは地獄だぜ
540デフォルトの名無しさん:2006/10/23(月) 18:15:57
リファレンスも読まないカスどもは氏ねばいいと思うよ
541デフォルトの名無しさん:2006/10/23(月) 18:25:39
APIってネイティブコードですか?
542デフォルトの名無しさん:2006/10/23(月) 18:30:32
Win32APIはそうだろうな。
第一Windows 95とかNT 3の頃には.NETなんてなかったし。
543デフォルトの名無しさん:2006/10/23(月) 21:26:32
>>533
WM_KEYDOWN等のキーボード関係のメッセージは
メッセージループの中でウィンドウプロシージャに渡される前に
色々と処理される。

自分のプログラムのメッセージループで使っているAPIの説明を
読み直した方がいいよ。
544デフォルトの名無しさん:2006/10/23(月) 21:58:17
他のプロセスのメニューハンドル(HMENU)を取得するにはどしたらいいですか?
ウィンドウに割り当てられてるメニューなら、GetMenuで可能ですが、
右クリックで出てくるようなウィンドウに割り当てられてないメニュー
545デフォルトの名無しさん:2006/10/23(月) 22:01:57
漏れの作ったソフトでは右クリックされてから CreateMenuしてるから
事前に取られる心配はなし。
546デフォルトの名無しさん:2006/10/23(月) 22:08:56
547デフォルトの名無しさん:2006/10/23(月) 22:18:16
>>546
だからウィンドウハンドルから取得できないのは分かってるってば
548デフォルトの名無しさん:2006/10/23(月) 23:04:03
>>544
SetWindowsHook とか使ってメニュー関連のメッセージをモニタして
なんかのメッセージ中に含まれる HMENU を盗み見たりするしかないんじゃない?
549デフォルトの名無しさん:2006/10/23(月) 23:09:53
>>548
それもあるが、それだと一回だけメニューを操作せねばならない。
メニュー操作無しで、ハンドルを取得っての。
見当として、CreateToolhelp32Snapshot でヒープリストやモジュールリストに
メニューハンドルが含まれてないかな
550デフォルトの名無しさん:2006/10/23(月) 23:33:24
>>549
それじゃ後はもうAPIフックだのハンドルの実体のリストを
直接参照するだののかなり強引な技しかないんじゃね?
つか、そもそも他所様のメニューハンドルを取得してなにがしたいん?
551デフォルトの名無しさん:2006/10/23(月) 23:36:25
> 見当として、CreateToolhelp32Snapshot で
kernelとuserの区別も付いてないようじゃまったく見当はずれだな
552デフォルトの名無しさん:2006/10/23(月) 23:49:44
やっぱ無理そうですね
553デフォルトの名無しさん:2006/10/24(火) 00:07:44
>>545みたいに右クリックするまでそもそもメニューが存在しない可能性もあるのに
確実に取れるわけない
554デフォルトの名無しさん:2006/10/24(火) 01:03:03
>>553
APIフック系の技を使えば確実にできるよ。って、これはできる内に入らんか。
555デフォルトの名無しさん:2006/10/24(火) 01:07:04
>>552
確か、 sysinternals の ProcessExplorer はメニューハンドルも全部表示してくれるけど、
あれは「ハンドルの実体のリストを直接参照する」技によるものだと思う。
sysinternals のプログラムってどれも一見ただの Win32 アプリだけど、
動的にドライバをインストールしちまったりとかかなりエグイ技を使うからねぇ。
556デフォルトの名無しさん:2006/10/24(火) 09:38:26
MCIの質問はここでおk?

MCI_OPENで音楽ファイルオープンしたときって
ファイルの中身が全部メモリに読み込まれる?
557デフォルトの名無しさん:2006/10/24(火) 10:36:52
試してみれば?
確か読み込まれないと思ったけど
558デフォルトの名無しさん:2006/10/24(火) 10:38:37
MCIドライバの実装依存だが一般的には読み込まれない
559デフォルトの名無しさん:2006/10/24(火) 11:45:09
>>557-558
サンクス
560ポロンガ:2006/10/24(火) 15:36:56
質問です。
現在リストビューの中のどれか一つを選択し、確認ボタンを押すとダイアログ
で選択した項目が確認できるようなプログラムを組んでます。リストビューを
表示するにはCreateWindowEx関数を利用すればよいことはわかりました。確認
ボタンも同様にCreateWindow関数を利用すればよいことがわかりました。

そこでCALLBACK WndProc内で座標指定をしてリストビューとボタンを作ろうと
しました。しかし、リストの項目は選択可能ですが、ボタンを押しても反応
しません。リストビューを作成する部分を除去してボタンだけを作るとボタン
が押せます。

リストビューとボタンを一つの窓に表示する際にはどのようにプログラム
すればよろしいのでしょうか?
561ポロンガ:2006/10/24(火) 15:38:53
開発環境は以下のようになっています。
OS:WindowsXP
コンパイラ:gcc(MinGW)
562デフォルトの名無しさん:2006/10/24(火) 15:59:32
ハードディスクの回転をオン・オフする方法を教えてください。
win32APIの範疇ではないでしょうか?
563567:2006/10/24(火) 16:06:11
4ピンケーブル抜けばいいんじゃないか多分
564デフォルトの名無しさん:2006/10/24(火) 16:06:18
それができると迷惑そうなソフトがつくれそうですね。期待。
565デフォルトの名無しさん:2006/10/24(火) 16:33:37
スピンダウンタイムを1秒にでもすれば
566デフォルトの名無しさん:2006/10/24(火) 17:07:42
タスクバーの長さを含まないデスクトップのサイズを取得するのってどのAPIでやりますか。
最大化したときになるサイズをとりたいんです。
567デフォルトの名無しさん:2006/10/24(火) 17:08:20
あるソフトが排他書き込み中とかで、
エクスプローラでファイルコピー出来ないようなファイルを
ムリヤリ読むソフトとか方法はありますか?
568デフォルトの名無しさん:2006/10/24(火) 17:23:20
4ピンケーブル抜けばいいんじゃないか多分
569デフォルトの名無しさん:2006/10/24(火) 17:26:27
>>562
昔はSTOPキーを2回押すだけでできたんだがなw
570デフォルトの名無しさん:2006/10/24(火) 17:28:52
>>566
GetSystemMetricsかSystemParametersInfo
571デフォルトの名無しさん:2006/10/24(火) 18:41:40
>>566
SystemParametersInfoのSPI_GETWORKAREA
572デフォルトの名無しさん:2006/10/24(火) 18:46:46
573デフォルトの名無しさん:2006/10/24(火) 19:39:32
質問なのですが→キーとスペースキーを2つとも押しているときの操作はできるのでしょうか?

2つとも押しているときはスペースのみの操作も→キーのみの操作も働かない方法があれば教えてください
574デフォルトの名無しさん:2006/10/24(火) 20:13:58
>>567
ボリュームシャドウコピー
ムリヤリというより標準のバックアップも使ってる正規の方法だが
575デフォルトの名無しさん:2006/10/24(火) 21:07:09
>>573
片方が押されていたらGetKeyStateなどでもう片方も押されているかを調べる
576デフォルトの名無しさん:2006/10/24(火) 21:21:43
>>573
そもそもキーボードがハードウェア的に同時押しに対応していない可能性がある。
そうだったらどうあがいても不可能
おとなしくシフト系キーとの組み合わせにしときなさい
577デフォルトの名無しさん:2006/10/24(火) 22:00:41
>>575
有難うございます やってみます

>>576
いまWINAPIでゲームを作ろうとしてましてどうしてもスペースとの同時を使いたかったのです。
578デフォルトの名無しさん:2006/10/24(火) 22:05:46
公開しないんだったら自分のキーボードで動けばいいんじゃないの。
まず動かないと思うけど
579デフォルトの名無しさん:2006/10/24(火) 23:08:38
>>576
興味があったので家のPCでスペースと矢印を同時に押しっぱなしにしたら
WM_KEYDOWNあたりは片方しかこないけど、GetKeyStateでは両方押されることに
なってた。 GetKeyState系APIで片方しか拾えないキーボードに出くわしたことある?
580デフォルトの名無しさん:2006/10/24(火) 23:28:58
>WM_KEYDOWNあたりは片方しかこないけど

押し始めは両方来るだろ?
そもそも GetKeyState って、WM_KEYDOWN 見てフラグたててなかったっけ
581579:2006/10/24(火) 23:33:21
>押し始めは両方来るだろ?
これはくる。GetKeyStateの内部仕様なんて知らないw
576がまずありえないキーボードの心配をして書いたのか
普通にあることなのかが知りたかっただけ。
582デフォルトの名無しさん:2006/10/24(火) 23:38:03
キー2つ同時押しが出来ないキーボードはなかったと思うが、保証はされてないのかな
583デフォルトの名無しさん:2006/10/24(火) 23:54:30
キーボードの構造考えれば同時押しが保証されない事がすぐわかるだろ
584579:2006/10/25(水) 00:04:51
>>581-582
わからない。その根拠は?
同時押しが保障されないならGetKeyState()の動作も保障されないことになってしまう。
保障されていると言い張ってる訳じゃないからね。
585579:2006/10/25(水) 00:09:44
582-583の間違い
586デフォルトの名無しさん:2006/10/25(水) 00:22:43
動作が保障されない、の意味がよくわからん。
ハードが同時押しに対応していない結果、
片方しか押されていない状態と言い張るのだから、
当然GetKeyStateもそれに応じた動作をするだけじゃないの?
587579:2006/10/25(水) 00:41:19
>ハードが同時押しに対応していない結果、
>片方しか押されていない状態と言い張るのだから

今の所、こう言い張ってる人はいませんよ。
576にしても可能性の話してるだけだし。
保障されてないと言い切ってるのは583だけ。
588586:2006/10/25(水) 01:03:45
ああ、すまん
言い張るのだから->伝えてくるのだから
と読み替えてくれ。
589デフォルトの名無しさん:2006/10/25(水) 01:04:13
>>587
ヒント:保証するの主語は「ハード」
590デフォルトの名無しさん:2006/10/25(水) 01:15:16
フラグでも立てればいいやん
591579:2006/10/25(水) 01:44:44
>>588
了解。
>>589
そりゃ秋葉原でキーボード買っても、マニュアルに同時押しを保障しますという記述はないだろうね。
自分的には583の根拠が知りたい。PC/ATの仕様にキーボードの記述があるんだろうか。

今日はもう寝るね。
592デフォルトの名無しさん:2006/10/25(水) 01:54:25
>>591
お休み
漏れも寝よう、zzzzz
593デフォルトの名無しさん:2006/10/25(水) 02:18:08
同時押し不可のキーボードがあったら「ゲームが動かないキーボード」として有名になってるはずだ。

昔、富士通のFMシリーズはそんなだったけど。
594デフォルトの名無しさん:2006/10/25(水) 02:40:44
X1も駄目だったらしい。
離された事が認識できなかったFMシリーズよりはまだマシか。
595567:2006/10/25(水) 05:43:20
オレの神聖なレス番をくだらない質問につかってんじゃねーよボケ
596デフォルトの名無しさん:2006/10/25(水) 06:47:34
Nキーロールオーバーかな、PCJrがそれで失敗してるね。
今はいちいち歌ってないかも。
597デフォルトの名無しさん:2006/10/25(水) 08:32:53
スキャン構造の都合上、UP/DOWNイベントが同時に流せずに多少の時差が出るってことだろな
実用上同時に見えるから問題無し。 >>593 のように(UP)イベントが消えることがないしね。

# A↓ B↓ ---- B↑ で A押されてるのを忘れるんだけっけか < FMシリーズ
598デフォルトの名無しさん:2006/10/25(水) 10:51:06
X68Kで同時押し認識の改善で
ダイオードを入れる改造サービスとかあったな。
FMも77AVからちゃんと認識できるようになったんだっけ?
599デフォルトの名無しさん:2006/10/25(水) 10:54:58
同時押しだけならMSXが妙に性能良かったな。
PC/ATの場合はキーボードのスキャンコードが8バイトを
超えると駄目になる機種とかあった気がする。
600デフォルトの名無しさん:2006/10/25(水) 11:06:55
MSXのキーボードは珍しくパラレル接続だから
601デフォルトの名無しさん:2006/10/25(水) 15:39:03
昔、BM98で、左シフト、Z、X、Cの同時押しが効かなかったのを思い出した。
そのキーボードでは最後に押したキーが認識されなかった。
ちなみに、別のキーボードだと大丈夫だった。

>>591
詳しいことは忘れたが、最近のキーボードは、配線減らすために、同時押し
に制限が出てたと思う。
数万円とかのキーボードは違うかもしれん。
普通に使えば、どんなに速くタイピングしても、1、Q、A、Zのうち2つが同時に押される
ことはないよね、みたいな感じ。
602デフォルトの名無しさん:2006/10/25(水) 16:15:57
ttp://www.google.co.jp/search?num=100&lr=lang_ja&q=%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89+%E5%90%8C%E6%99%82%E6%8A%BC%E3%81%97

自分のところで同時押しが出来ても
他の環境では上手くいかない可能性もある。

APIの動作にしても、ハードから信号が来てない場合は
どうにもならんだろうしな。
603デフォルトの名無しさん:2006/10/25(水) 17:49:47
東プレのRealForceを使っている俺様には関係のない話だ。
604579:2006/10/25(水) 18:01:31
色々情報ありがd。
Nキーロールオーバーという言葉はしらなかった。
Ctrl + Alt + 何か
というのは時々使うから最低3キーぐらいの同時押しは
認識するのが当然だと思ってたけどCtrl,Alt,Shiftは別腹
みたいね。お騒がせしました。

ハード板にロールオーバーの実験をしてるスレがあって
いろんな環境から実に2chらしい言葉を書き込みしてあったけど
高級Keyboardを除けば2キー以下のが結構あるみたい。
http://pc8.2ch.net/test/read.cgi/hard/1089362616/l50
605sage:2006/10/25(水) 18:16:58
なんか→押しっぱなしのままスペース押すと→が押されてるっていうのが認識されなくなる
自分のキーボじゃ2つのキー入力が認識されてないってことなのかな?
606デフォルトの名無しさん:2006/10/25(水) 18:25:30
うちのもそんな感じ。
>>597 のことをやると後半AのWM_KEYDOWNが来ないけど
最後のWM_KEYUPはくる。GetKeyState()で見ると両方押されてることに
なってるから認識はされてるとおもった。
607デフォルトの名無しさん:2006/10/25(水) 18:27:40
それは話が違うかと。
608デフォルトの名無しさん:2006/10/25(水) 18:33:48
中身は違うけど実験パターンだけ分かりやすいのでぱくった
609デフォルトの名無しさん:2006/10/25(水) 18:33:55
A↓         WM_KEYDOWN (A)
(キーリピート期間)  WM_KEYDOWN (A)
B↓         WM_KEYDOWN (B)
(キーリピート期間)  WM_KEYDOWN (B のみ)
B↑         WM_KEYUP (B)
(キーリピート期間)  *WM_KEYxxx は来ない
A↑         WM_KEYUP (A)

* となるのは Windows の仕様っぽいぞ。
KeyState は立上がり/立下りの変化点で更新しているから狂わないけどね。
610デフォルトの名無しさん:2006/10/25(水) 18:39:46
もいっちょ
1キーロールオーバーだと
A↓ down A
B↓ up A, dwon B
B↑ up B
A↑ (nop)
611デフォルトの名無しさん:2006/10/25(水) 18:44:03
1キーって実在するのか.....
dwonBのまえにupAが来るのは面白いね。
612デフォルトの名無しさん:2006/10/25(水) 18:46:45
>>611
昔の電卓がそうだった。 器用な使いまわしかたしてたな。
(最もそいつは B↓ で up A が出ない回路構成)
613デフォルトの名無しさん:2006/10/25(水) 18:49:14
あ >>610 は間違ってる。
 A↓ down A
 B↓ (nop)
 B↑ (nop)
 A↑ up A
だわ。 ワイワードOR で微妙に優先順位が付いてる
614デフォルトの名無しさん:2006/10/25(水) 19:16:30
昇竜拳は?
615デフォルトの名無しさん:2006/10/25(水) 19:20:06
WM_KEYUPってキーを離したときだけ来ると思ってたけど
押してない時は常にきてる?
616デフォルトの名無しさん:2006/10/25(水) 19:25:02
>>615
んなこたない
617デフォルトの名無しさん:2006/10/25(水) 19:48:25
>>616
意味わかんないとこでkeybd_event入れてたのが原因だった
押してないとき来てたら大変なことになるわな スマソ
618デフォルトの名無しさん:2006/10/25(水) 20:20:42
サーバへの送信データを RFC1867 の形式に
自動的に変換してくれる API ってありませんか?
つまり、Content-Type などのヘッダを生成して
その後にデータを付けるような形式にです
619デフォルトの名無しさん:2006/10/25(水) 20:54:15
自作アプリにIEの表示部分を埋め込むにはどうすればいいのん?
620デフォルトの名無しさん:2006/10/25(水) 21:44:00
>>619
COMってわかるか?
621デフォルトの名無しさん:2006/10/25(水) 22:09:29
>>620
麻生風にちょっとワロタ
622デフォルトの名無しさん:2006/10/25(水) 22:10:18
は?
623デフォルトの名無しさん:2006/10/25(水) 22:11:29
ひ?
624デフォルトの名無しさん:2006/10/25(水) 22:11:46
ふ?
625デフォルトの名無しさん:2006/10/25(水) 22:12:25
流れを断ち切る!
626再掲:2006/10/25(水) 22:15:56
サーバへの送信データを RFC1867 の形式に
自動的に変換してくれる API ってありませんか?
つまり、Content-Type などのヘッダを生成して
その後にデータを付けるような形式にです
627デフォルトの名無しさん:2006/10/25(水) 22:21:39
>>626
HttpSendRequestとかそのへん。
628デフォルトの名無しさん:2006/10/25(水) 22:24:38
>>627
あれって自動的には変換してくれなかったような・・・
629再掲:2006/10/25(水) 22:34:37
サーバへの送信データを RFC1867 の形式に
自動的に変換してくれる API ってありませんか?
つまり、Content-Type などのヘッダを生成して
その後にデータを付けるような形式にです
630デフォルトの名無しさん:2006/10/25(水) 22:36:19
サーバへの送信データを RFC1867 の形式に
自動的に変換してくれる API ってありませんか?
つまり、Content-Type などのヘッダを生成して
その後にデータを付けるような形式にです
631デフォルトの名無しさん:2006/10/25(水) 22:38:47
ID無いとこういうのは減らんよな
632デフォルトの名無しさん:2006/10/25(水) 22:40:09
>629
それくらい自前でやれ。
633626:2006/10/25(水) 22:44:08
>>627
レスありがとうございます
その辺をよく調べてみます

なお、>>629-630 は自分ではありません
どっかの池沼奴による行為です
気にしないでください
634デフォルトの名無しさん:2006/10/25(水) 22:46:27
>>626は自分でやったのかよ
635デフォルトの名無しさん:2006/10/25(水) 23:28:47
どっちが池沼とかどうでもいいが
どっちもうざいのは変わりないな
636567:2006/10/26(木) 05:14:44
 /i /{/'⌒'}  }}Y/ / ,r-、ヽ,  /
 ノ、|、ヾ_,,ノ  ノ ノ{ ヾ {^')) }フ/ /          _/
   \ヽ、    彡'`、、  'ー' ノ //",,゙ """ /    ヽ 
 ヽ-、ミ‐-、、 、,r=‐'¬ー=、、,-‐'_ ヽ、    /ノ     / 『味』 ウ・  こ
 ミ/   ~>>633       ̄ノ /\   /彡 ""  |/   だ  ソ・  の
  /   ,'    u ∪   ! ヽ  | i、゙ー''"彡     /|   ぜ   を・  味
  、、∪ / ノ /  _,,,...-‐‐ニ=,ノ,,/ ヽ、,,_ \   ,イ / |    :  つ・  は
  ニ、=!, l_. レr=-ニ二、,,,.-'"    ー、==-ヽ'"/ / ヽ   :  い・
  、(・,)>ノ⌒  ∠,(・,)_く  ゙`   ヽ゚ノ`ー=、_ /// ∠   :  て・
    ̄/""゙   ヽ ̄ ̄  \ヽ      ̄ ̄ //   ノ     る・
  u 〈  、     u   (ヽ          //     ̄ノ
    ヽ -'   lj     >、       //  /    ̄ヽ、
    /ヽー‐ 、      /'"´ 'i     //  /       ∨ヽ/
    ^゙"⌒ヾ、     ,i|  ,"__}    //  /  /
    ー-  -      ヽ_人`'′ //  /  /
               / i'゙' /-─‐‐''/_/_
   、         _/-‐ヽ、___,,,, -‐‐  ̄
   ー-、、,,__,-‐'//ノゝノ ノ  ヽ\
637デフォルトの名無しさん:2006/10/27(金) 08:17:22
キーを押してから、有効ディレイタイムをソフト内部で持ち、
その有効期間内で同時押しを判定しちゃダメかな?
638デフォルトの名無しさん:2006/10/27(金) 15:36:22
"c:\foo.txt", "c:\bar\baz.txt"
等の複数のファイルのパスをExplorerで切り取った状態にするにはどうすればいいでしょうか?
639デフォルトの名無しさん:2006/10/27(金) 16:04:51
>>638
それってAPI?
640デフォルトの名無しさん:2006/10/27(金) 16:22:07
DoDragDropあたりじゃね
641デフォルトの名無しさん:2006/10/27(金) 17:38:09
文字列分解をしたいのかファイル移動をしたいのか
質問の趣旨がよくわからん
642638:2006/10/27(金) 18:44:36
文字列処理ではなくExplorerでそのファイルを選択して右クリックして切り取りを実行した状態を
Explorerを立ち上げることなく自前のプログラムでやりたいということです。
643デフォルトの名無しさん:2006/10/27(金) 18:50:02
Explorerで右クリックして切り取りは特に何の意味もないよ
644デフォルトの名無しさん:2006/10/27(金) 18:51:36
>>642
クリップボード周りMSDNで勉強汁
645デフォルトの名無しさん:2006/10/27(金) 19:04:33
Explorer以外へ貼り付けできないっぽいから
内部的に状態覚えてるだけだろ
646デフォルトの名無しさん:2006/10/27(金) 19:10:08
>>645
エクスプローラじゃなくても普通にコピーできたが?
切り取りすればコピーした後ちゃんと元のファイルも消える
647デフォルトの名無しさん:2006/10/27(金) 19:17:36
>>645
クリップボードに CF_HDROP で入ってる。
648デフォルトの名無しさん:2006/10/27(金) 19:29:40
あ、クリップボード見ても切り取りの動作は再現できないか。
649デフォルトの名無しさん:2006/10/27(金) 19:30:48
>>648
クリップボードに入れるときに切り取りかコピーを指定できるらしい?
ttp://sapporo.cool.ne.jp/tanomi/qanda/a056.html
650デフォルトの名無しさん:2006/10/27(金) 19:35:55
Preferred DropEffect見て貼り付ける側で処理するわけか。
OLED&Dみたく貼り付けるタイミングをクリップボードのオーナーが知る事は出来ないのか。
651デフォルトの名無しさん:2006/10/27(金) 19:41:35
CFSTR_PREFERREDDROPEFFECTを読むのに3秒位かかった
652デフォルトの名無しさん:2006/10/27(金) 21:10:37
CCDDEEEEEFFFFOPPRRRRRSTT_ [゚д゚]
653デフォルトの名無しさん:2006/10/27(金) 23:09:48
CreateDesktop 以外で同じような機能を実現できる方法ってないでしょうか?
というのも全画面ではなくウィンドウで作りたいのです。
(あれって全画面だけですよね?)

参考になるサイトなどあったら教えてください。
654デフォルトの名無しさん:2006/10/30(月) 14:57:08
ねーねー、
特定のアプリケーションの (たとえばタブブラウザのタブでのマウスイベント) を
フックしたり置き換えたりするにはどうすればいいのん?
655デフォルトの名無しさん:2006/10/30(月) 15:48:05
特定のアプリケーションの (たとえばタブブラウザのタブでのマウスイベント) を
フックしたり置き換えたりすればいいとおもうよ
656デフォルトの名無しさん:2006/10/30(月) 15:54:29
>>655
だからー
どーやってそれをするのん?
いけずしないでで教えてちょ
657デフォルトの名無しさん:2006/10/30(月) 16:38:14
658デフォルトの名無しさん:2006/10/30(月) 16:43:12
>>657
英語苦手や
苦手やねん僕
659デフォルトの名無しさん:2006/10/30(月) 16:44:43
というかフックのやり方が知りたいのとちがうねん
それはわかるのだけどそれするとグローバルになっちゃうじゃない?
特定のアプリだけでする方法がしりたいねん
660デフォルトの名無しさん:2006/10/30(月) 16:48:11
:::::::::::/           ヽ::::::::::::
:::::::::::|  ば  じ  き  i::::::::::::
:::::::::::.ゝ か   つ   み  ノ:::::::::::
:::::::::::/  だ  に  は イ:::::::::::::
:::::  |  な。       ゙i  ::::::
   \_         ,,-'
――--、..,ヽ__  _,,-''    >>659
:::::::,-‐、,‐、ヽ. )ノ      _,,...-
:::::_|/ 。|。ヽ|-i、      ∠_:::::::::
/. ` ' ● ' ニ 、     ,-、ヽ|:::::::::
ニ __l___ノ     |・ | |, -、::
/ ̄ _  | i     ゚r ー'  6 |::
|( ̄`'  )/ / ,..    i     '-
`ー---―' / '(__ )   ヽ 、
====( i)==::::/      ,/ニニニ
661デフォルトの名無しさん:2006/10/30(月) 16:55:24
>>660
知ってるもん
だから教えてほしいんだもん
662デフォルトの名無しさん:2006/10/30(月) 17:04:18
マジレスすると、そんな便利なAPIは無い。
ので、フックなりBHOなりリモートスレッドなりで普通に地道に処理するしかない。
クリック時に判定するとか、ウィンドウ作成時に判定してサブクラスするとか。
663567:2006/10/30(月) 17:10:15
また変なのが沸いてるな
664デフォルトの名無しさん:2006/10/30(月) 17:16:04
3日近い沈黙を破ったかと思ったらこれか
665デフォルトの名無しさん:2006/10/30(月) 17:32:20
フック時にスレッド指定できるのに
666デフォルトの名無しさん:2006/10/30(月) 17:39:58
ビットマップ画像を読み込んでその画像のビット情報を配列に格納したい、
がやり方がわからない。GetDIBitsを使うのか?
667デフォルトの名無しさん:2006/10/30(月) 17:45:52
自分で読み込んだんなら自分で中身わかるだろ。
自分で読み込めないなら、GDI+ で読み込んで LockBits で中身を覗くのが簡単。
668デフォルトの名無しさん:2006/10/30(月) 17:54:23
>>665
それいいじゃん
ありがとう665^^
669デフォルトの名無しさん:2006/10/30(月) 18:23:06
>>666
Windowsビットマップファイルの構造調べればすぐわかるだろう‥‥
常識的に考えて‥‥
670デフォルトの名無しさん:2006/10/30(月) 22:00:51
DialogBoxでメインウィンドウを作成した場合
多重起動の防止はどのようにしたらよいのでしょうか。

教えてエロい人><
671デフォルトの名無しさん:2006/10/30(月) 22:06:23
普通に
672デフォルトの名無しさん:2006/10/30(月) 22:08:04
普通が分かりません>< 
673デフォルトの名無しさん:2006/10/30(月) 22:09:25
DialogBoxと多重起動は関係ないだろ
674デフォルトの名無しさん:2006/10/30(月) 22:19:54
メインウィンドウのタイトルとかクラス名で既起動のインスタンスを探しているんじゃ。
675デフォルトの名無しさん:2006/10/30(月) 22:26:55
ウィンドウクラスを登録してCreateWindowでウィンドウを作成していた時は
FindWindowで多重起動を防止していたのですが、DialogBoxで作成した場合の
多重起動防止方法が分かりません>< yes >>674
676デフォルトの名無しさん:2006/10/30(月) 22:33:43
ふつーmutex
677デフォルトの名無しさん:2006/10/30(月) 22:43:12
出来ました。ありがとう><  >>676
678デフォルトの名無しさん:2006/10/30(月) 23:16:07
HICON型に読み込んだアイコンを
HBITMAP型のビットマップに変換したいのですが。

アイコンを一旦ファイルに保存して、ビットマップとして読み込む方法以外に何かないでしょうか
679デフォルトの名無しさん:2006/10/30(月) 23:22:28
>>678
GetIconInfo
680デフォルトの名無しさん:2006/10/30(月) 23:27:02
>>679
ありがとうございます。
早速調べてみます。
681デフォルトの名無しさん:2006/10/31(火) 15:06:45
質問です。
とある文字列の配列を、OSのファイル名ソート順にしたがってソートしたいと思っています。

とりあえず単純にstrcmpで比較して行ないました。
ですが私のPCの名前順とは若干違うようでした。
(どうやら調べたところ、Windows98までは単純な文字コード順だったようです)

私のOSはWindows2000 SP4です。
どうやら、文字コード的には '_' > '0' なのに、OSでは_の方を先に表示してしまうようです。
他にも、全角アンダーバー _ は当然0x80以上なので後ろにくるはずなのに、ほぼ先頭に来ます。
「概ね文字コード順」なのですが色々記号まわりで例外があるようです。

この順番比較を行なってくれるWin32APIはありますでしょうか?
知っていらっしゃる方、ご教授よろしくお願いいたします。

余談ですが、XPだとまたファイルソート順が2kと違うそうです…。
682デフォルトの名無しさん:2006/10/31(火) 15:40:47
>>681
ワイド文字とかの問題じゃなくて?
683デフォルトの名無しさん:2006/10/31(火) 15:47:54
ご教授よろしくお願いいたしますもいいけど、
まずはCompareStringを試してみてから質問する程度の誠意は見せようよ。
684デフォルトの名無しさん:2006/10/31(火) 16:06:59
IShellFolder::CompareIDsじゃないか?
685デフォルトの名無しさん:2006/10/31(火) 16:09:02
>>682
質問の意図が読めませんが、一応「2kはユニコードだから、もしかしてユニコード順か?」
と思いチェックしました。
でも、半角文字ってユニコードにしてもコードかわってないんですよね。
相変わらず文字コード順とはいえない、独特な並び方に見えます<Windows2k

せめて法則性がきっちりわかれば、自分で比較関数書いてしまうのですが…
686デフォルトの名無しさん:2006/10/31(火) 16:10:48
>>683-684
失礼しました。
CompareString というものの存在自体に、気づけませんでした。
検索してみたところ、それらしい説明を発見しました。
試してみたいと思います。ありがとうございます。
687デフォルトの名無しさん:2006/10/31(火) 16:14:28
>>683
CompareStringを探している人間に、CompareStringを試してから質問しろって返事はおかしいだろw
688デフォルトの名無しさん:2006/10/31(火) 17:32:03
>>685
質問の意図が読めませんが、ってお前頭だいじょうぶか?
おめーが質問してんだろーが。
689デフォルトの名無しさん:2006/10/31(火) 17:54:38
これは恥ずかしいツッコミだ
690デフォルトの名無しさん:2006/10/31(火) 18:17:00
小学生から国語をやり直した方がいいな、これは。
691デフォルトの名無しさん:2006/10/31(火) 19:51:26
国語の履修漏れです。
692デフォルトの名無しさん:2006/10/31(火) 20:19:45
>>689-691
この流れいいなw
693デフォルトの名無しさん:2006/10/31(火) 21:36:42
>>686
CompareStringちょっと試してみたが、違うんじゃない?
例えば a1 a100 a2 の3つのファイル名があった場合、
Win2K以降のエクスプローラの表示順は a1 a2 a100
連続した数字を1つの塊として比較するような振る舞い。
CompareStringで a2 と a100 だけ比較してみたけど
a2 > a100 と返してくる。駄目じゃん。
694デフォルトの名無しさん:2006/10/31(火) 21:43:46
名前順にソートするとそうなるもんなマジで使えない
695デフォルトの名無しさん:2006/10/31(火) 21:50:53
右揃えにして比較とか
696デフォルトの名無しさん:2006/10/31(火) 21:53:13
文字列長で比較後辞書順?なのか?
697デフォルトの名無しさん:2006/10/31(火) 21:57:45
するってぇとCompareIDsの方か?
698693:2006/10/31(火) 22:00:25
a1 a100 a2xxxxxx の場合でも
a1 a2xxxxxx a100 と数字の順になるよ。
試すのに1分もかからないんだから、試してから書き込もうよ。
699デフォルトの名無しさん:2006/10/31(火) 22:13:44
試す試さないというかこの資料をM$が用意してないとすると糞だと思う
700デフォルトの名無しさん:2006/10/31(火) 22:17:39
Windows Explorer のフォルダ内での整列の順序の話なら、
ShellNamespace がこの辺りをハンドルしてるわけだから、
CompareIDs() が正解なんじゃないかと思うが・・・

CMD.EXE の dir /ON が何をどうしているかは知らぬが。
701デフォルトの名無しさん:2006/10/31(火) 22:18:03
文字コードだと abc・・・ABC・・・、エクスプローラは [Aa][Bb][Cc]・・・だから、
俺は全部アルファベット小文字に変換してから辞書順ソートしてる
大文字にすると、アンダーバーが下にきちゃうのでアウト
702デフォルトの名無しさん:2006/10/31(火) 22:19:22
間違えた、全部小文字にしてからコード順
703デフォルトの名無しさん:2006/10/31(火) 22:22:18
lstrcmp
704デフォルトの名無しさん:2006/10/31(火) 22:40:23
705デフォルトの名無しさん:2006/10/31(火) 23:45:46
strstr
706デフォルトの名無しさん:2006/11/01(水) 09:12:55
stricmp
707デフォルトの名無しさん:2006/11/01(水) 09:29:55
>>693 >>698
いや、Windows2kだが、
a1 a100 a2 の順になった。
数字を優先してソートするのは、XPからの仕様のようだ(ぐぐった)
XPでも、レジストリいじると2kスタイルにできるそうだ
708デフォルトの名無しさん:2006/11/01(水) 09:55:23
IShellFolderの実体の実装依存なのでフォルダごとに違うルールでソートされる可能性すらある
しかしCompareIDsだとShellオブジェクトとして存在しない文字列のソートができない点が問題
709デフォルトの名無しさん:2006/11/01(水) 10:08:59
考えてみれば、IShellFolder使っちゃうと、XPと2Kと98で動作が違うアプリケーションになっちまうな。
もちろんエクスプローラー作っているのならいいが
「2kスタイルでソートしたい」
というアプリケーションの場合、IShellFolder依存ではまずい
710デフォルトの名無しさん:2006/11/01(水) 10:17:21
XPスタイルのソートはshlwapi.dllのStrCmpLogicalWで実現できそうだ
このAPI自体がXP以降だな
711デフォルトの名無しさん:2006/11/01(水) 13:10:57
>>669
だからそれをどうやって調べんの?って聞いてるじゃん。
712デフォルトの名無しさん:2006/11/01(水) 13:17:58
ペーストするごとにスタックから一行ずつ別のデータを貼り付けたいんですが
クリップボードの内容をペーストしたことを検出することは可能ですか?
713デフォルトの名無しさん:2006/11/01(水) 14:05:03
>>711
BMPファイルとして保存する方法を調べれば、やり方わかるはず。
714デフォルトの名無しさん:2006/11/01(水) 14:27:33
715デフォルトの名無しさん:2006/11/01(水) 14:29:27
win32::OLEとsamieで IEを操作しようと思うのですが、
アドレスとソースの取得はどのようにやればいいのでしょうか?

716デフォルトの名無しさん:2006/11/01(水) 17:19:36
アクセス権管理について教えて下さい。
win2003から搭載された機能で、「有効なアクセス許可」
という機能があります。

以下参照:
http://www.atmarkit.co.jp/fwin2k/win2ktips/701aclcheck/aclcheck.html

これと同等のプログラムを作るにはどうしたら良いでしょうか。
Windows 2000、2003、XPで動作させたいと思っています。
言語はWSH(VBS等)かCで、Administrator権限で動けばオーケーです。

まず以下を調べましてアクセス許可の判定方法が分かりました。
http://www.microsoft.com/japan/technet/prodtechnol/windows2000serv/books/netupgrd.mspx#EYIAC

さらに以下のページを調べ、随意アクセス制御リストなる物を
取得する方法が分かりました。
http://www.microsoft.com/japan/technet/scriptcenter/scripts/security/dacls/sedcvb01.mspx

基本的にはこれで必要な情報が揃ったと思うのですが、上記の情報
だけを元にコーディングするのは、グループのネストやフォルダの
親子関係等の調査等々を含めると、それなりに複雑なプログラムに
なってしまいそうです。
目的の機能をもっと簡単に実現できるcomインターフェースはありま
せんでしょうか。
717デフォルトの名無しさん:2006/11/01(水) 19:30:03
>>716
caclsを読めばわかるが楽な方法はない
718デフォルトの名無しさん:2006/11/01(水) 19:38:24
質問です。
今効果音の再生にPlaySoundを使っているのですが
PlaySoundだと2つ以上の音声を同時に流せないので困っています
なにを使うと良いでしょうか?
719デフォルトの名無しさん:2006/11/01(水) 19:40:25
googleを使って調べるといいよ
720デフォルトの名無しさん:2006/11/01(水) 20:14:30
マルチスレッドでやればぁ
721715:2006/11/01(水) 20:44:00
>>717さん、ありがとうございます。
頑張ってコーディングしてみます
722716 != 715:2006/11/01(水) 20:47:08
あ、ごめんなさい。イッコ上は、>>716です。
723デフォルトの名無しさん:2006/11/01(水) 20:58:44
>>719->>720
ありがとうございます
試してみます
724デフォルトの名無しさん:2006/11/01(水) 22:08:27
マルチスレッドでやってみたのですが
やはり先に流してたほうを中断されてしまいます

googleで調べてみるとMCIでの再生が出てきたのですが
PlaySoundより細かい処理ができる様ですが2つ同時再生ができるのでしょうか?
725デフォルトの名無しさん:2006/11/01(水) 22:26:35
やってみろよ。
試行錯誤しないと成長できんぞ。
726デフォルトの名無しさん:2006/11/01(水) 22:44:57
727デフォルトの名無しさん:2006/11/01(水) 22:46:18
マルチスレッド違い
728デフォルトの名無しさん:2006/11/01(水) 23:04:16
midiはPlaySoundじゃ再生できないんじゃないかな?かな?
729デフォルトの名無しさん:2006/11/02(木) 00:22:03
>>724
MCI、playSoundともに同時再生は環境依存(Win95+ISAバスサウンドカードなんかは無理)
DirectSound使え。
730567:2006/11/02(木) 02:53:11
そっちのマルチスレッドかよwwwwwwwwwwwwwww
731デフォルトの名無しさん:2006/11/02(木) 09:31:06
確実にローカルファイルにしかアクセスしないようにするため
一時的にブラウザがネットにアクセスしないようにすることってできますか?
732デフォルトの名無しさん:2006/11/02(木) 09:32:26
>>731
オフラインモード
733デフォルトの名無しさん:2006/11/02(木) 09:52:35
734731:2006/11/02(木) 15:36:12
手動でやるしかないということですね。
ありがとうございました。
735デフォルトの名無しさん:2006/11/02(木) 20:25:31
>>731
WinInetではできないのか…。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/option_flags.asp

> INTERNET_OPTION_OFFLINE_MODE
> Not implemented.
736デフォルトの名無しさん:2006/11/02(木) 21:20:08
>>731
接続する前にレジストリ弄ればオフラインモードになるよ
737デフォルトの名無しさん:2006/11/02(木) 22:25:55
教えてください。

CreateProcessを使って特定のプロセスに引数付で起動させたいんですが
エラーが出てしまいFormatMessageで調べたところ。

「メモリロケーションへのアクセスが無効です。」

というメッセージが生成されてしまいます。

以下ソース

/* ExePathは"hoge.exe Arg" */
if(!CreateProcess(NULL, &ExePath[0], NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS, NULL, NULL,
&startInfo, &procInfo))
{
ErrorLine = __LINE__;
goto FUNC_END;
}

InternetCloseHandle(hInternet);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hHttpRequest);
SendMessage(hWnd, WM_CLOSE, 0, 0);

以上。

CreateProcessの後にSendMessageでプロセスを即座に終了させてるからいけないんでしょうかね。
とりあえず自分はもうお手上げ状態なんでレスさせてもらいました。
738デフォルトの名無しさん:2006/11/02(木) 22:32:48
>というメッセージが生成されてしまいます。

どっちのプロセスで出てるの?
739デフォルトの名無しさん:2006/11/02(木) 22:36:51
startInfo, procInfo の中身が変ってのがありがちじゃあるまいか
740デフォルトの名無しさん:2006/11/02(木) 22:47:34
STARTUPINFO の cb にサイズを入れてないんじゃない?
741デフォルトの名無しさん:2006/11/02(木) 22:52:00
すんません自分で解決して書き込もうと思ったら既に・・・・・。

STARTUPINFO startInfo;
PROCESS_INFORMATION procInfo;
上記の二つの構造体をmemsetで0x00初期化したらなおりました。

正直あs;dgljwくぁ;えlkjf;あうぇです。

二つの構造体の中身をよく理解しときます。>>738-740ありがとうございました。
742デフォルトの名無しさん:2006/11/02(木) 22:52:52
>>738
因みに起動側プロセスに出てましたね
743デフォルトの名無しさん:2006/11/02(木) 23:43:35
>>741
PROCESS_INFORMATIONは初期化しなくても平気。
STARTUPINFOはFlagsさえきちんとしておけば平気。

確かこうだったと思う。
744デフォルトの名無しさん:2006/11/03(金) 01:35:35
どちらにしろ構造体は最初memsetしといたほうがいい
745デフォルトの名無しさん:2006/11/03(金) 01:55:36
二次元配列の初期化の仕方がわからないんだけぢ
char sz[128][258] = {0};
これでいいの?
746デフォルトの名無しさん:2006/11/03(金) 05:07:29
int[2][2] = { {11, 12}, {21, 22} } ;
747デフォルトの名無しさん:2006/11/03(金) 11:24:50
スレタイを鑑みれば、
ZeroMemory( sz, sizeof sz );
748デフォルトの名無しさん:2006/11/03(金) 11:54:17
UDFリーダーを作ろうとしているのですが、ECMAもOSTAも構造体の形式的な定義が
わかりにくい感じでズラーっと書いてあって実際にどう使うのかが殆ど書いてありません。

家庭用DVDレコーダーで記録済みのDVD-RWとつきあわせて
そのDVDの場合についてはわかってきましたが色々謎の部分が多いです。
ボリュームディスクリプタシーケンスが
なんで複数のプライマリボリュームディスクリプタを持つのか、とか・・・

いいソースコードないでしょうか・・・
749デフォルトの名無しさん:2006/11/03(金) 11:57:15
それはAPIの質問なのか?
750デフォルトの名無しさん:2006/11/03(金) 12:56:19
分からないなら黙ってて
751デフォルトの名無しさん:2006/11/03(金) 12:58:31
スレ違いなことも分からないなら黙っててほしいね確かに
752デフォルトの名無しさん:2006/11/03(金) 13:46:30
ワイルドカードで文字列がマッチするかどうかを調べるAPIは無いですか。
753デフォルトの名無しさん:2006/11/03(金) 14:00:13
ないんじゃない。たぶん。
仮にあったとしても、エクスポートすらされていないじゃないかな。
確実に必要だとは思うけど。
754デフォルトの名無しさん:2006/11/03(金) 14:04:06
無いのか…
正規表現でなんとかするか。
755デフォルトの名無しさん:2006/11/03(金) 14:21:32
PathMatchSpec
756デフォルトの名無しさん:2006/11/03(金) 14:26:07
>>755
パスのマッチにしか使えないじゃん
757デフォルトの名無しさん:2006/11/03(金) 14:35:48
>>755
それで逝けました。
758デフォルトの名無しさん:2006/11/03(金) 17:14:52
マルチディスプレイ環境で、プライマリディスプレイの切り替えをAPIで実行したいです。
ChangeDisplaySettingsExのdwflagsにCDS_SET_PRIMARYをつけて、
セカンダリに対して呼び出しましたが、セカンダリが非接続になるだけでした。
プライマリの切り替えをするにはどうすれば良いでしょうか。
OSはWinXP SP2で、ビデオチップはMobile Intel 945GMです。
よろしくお願いします。
759デフォルトの名無しさん:2006/11/03(金) 17:15:49
インテルに聞け
760デフォルトの名無しさん:2006/11/03(金) 18:33:27
メモリデバイスコンテキストは、別途作成したビットマップを選択して使うのが
普通だと思いますが、メモリデバイスコンテキストが最初に所有している
ビットマップ(1×1、モノクロ)をわざわざ削除しているソースを見たことがないんですが、
削除しないままで、リソースリークが発生したりすることはないんでしょうか?
761デフォルトの名無しさん:2006/11/03(金) 18:48:21
最初から持ってるビットマップは削除したらだめ
メモリデバイスコンテキストを削除する前に選択しなおす
762デフォルトの名無しさん:2006/11/03(金) 18:58:24
¥0はずせよ馬鹿
763760:2006/11/03(金) 19:57:22
>>761
そうなんですか…どうもありがとうございました。
764デフォルトの名無しさん:2006/11/03(金) 21:04:48
記憶があいまいなので便乗。
最初から持っているビットマップはストックオブジェクトじゃなかったっけ。
9xとNTで違うのかなぁ。詳しい人よろしく。
765デフォルトの名無しさん:2006/11/04(土) 00:33:56
システムメニューの「閉じる」や「移動」などの文字列を
各国語版Windowsに左右されずに取得したいと思っています。
コンソールアプリなのでウィンドウを生成して GetSystemMenu ではなく
リソースから取得したく思ってます。

WinNT系では、LoadLibrary("USER32.DLL") と LoadMenu で取得できましたが、
Win9x系では USER32.DLL にメニューリソースが存在せず、
USER.EXE にそれっぽいリソースがありましたが、LoadLibrary の段階で
ERROR_BAD_UNIT で失敗してしまいました。
Win9x系でのシステムメニューリソースの取得方法のアドバイスお願いします。
766デフォルトの名無しさん:2006/11/04(土) 00:45:30
隠しAPIとしてLoadLibrary16というものがあるが、リソース読めるかどうかは知らん。
ほかのやり方がありそう。
767デフォルトの名無しさん:2006/11/04(土) 02:09:55
内部でWaitCommEventやGetOverlappedResultなどを呼んで
待っている状態のスレッドを、外部から停止する方法を探しています。
いつも使っているループフラグのON/OFFではさすがにマズイと思いまして…
上記関数をキャンセル出来れば一番なんですが、
何か対策があれば教えていただけると幸せです。
768デフォルトの名無しさん:2006/11/04(土) 02:13:38
wsprintfでintの時などは%dを使えば変数が正しく表示されるのですが
floatやdoubleの%fを使っても f としか表示されません。
TextOutで描画しています。

どうすれば小数を表示できるのでしょうか?
769デフォルトの名無しさん:2006/11/04(土) 02:40:05
>>768
sprintfを使えない理由でもあんの?
770デフォルトの名無しさん:2006/11/04(土) 03:18:00
>>769
レアケースだけど、
標準のCRTをリンクさせずに、自前でエントリポイント用意してると、ことごとく使えなくなるね。
771デフォルトの名無しさん:2006/11/04(土) 03:23:03
>>768
wsprintfは実数は未サポート
772デフォルトの名無しさん:2006/11/04(土) 09:56:03
>>767
直接その関数で待機せずにWaitForMultipleObjectsを使って、
それに停止用イベントを含ませる。
773デフォルトの名無しさん:2006/11/04(土) 11:58:30
>>769-771
有難うございます
sprintfの存在を知らなくて・・・
解決できました
774デフォルトの名無しさん:2006/11/04(土) 12:59:47
wsprintf知っててsprintfしらないやついんの?
775764:2006/11/04(土) 13:25:12
出典はVS2003付属のmsdn/technical articles/GDI Objects
例のビットマップはstockobjectと同様にconstant object、殺そうとしても死なない。
XPで確かめた結果、hBitmapのstock object marker(0x80000)はONだった。
776デフォルトの名無しさん:2006/11/04(土) 13:55:17
たしかMSDNの記述で、SelectObjectで元に戻すのは、shouldになっていたはず。
実際、戻してないコードが多すぎだろうから、MSも変えるに変えられないんだろう。
777デフォルトの名無しさん:2006/11/04(土) 14:10:11
>>772
なるほど!
どうもありがとうございます。
778デフォルトの名無しさん:2006/11/04(土) 16:46:04
質問です、DLL/EXEで呼ばれるnew/deleteを一致させたくて以下の様な関数を作りました↓
//new
void* operator new[](size_t size){
return(HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, size));
}
//delete
void operator delete[](void* ptr){
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, ptr);
}
一応、これで動作はしているのですが何か問題が無いか心配です。
特に、[]が付いているのに何もしてないのでメモリリークあたりが起きてそうなのですが…。
779デフォルトの名無しさん:2006/11/04(土) 17:35:22
そんなことするくらいなら、COMみたいに自殺してもらえば良いのに。
780778:2006/11/04(土) 17:40:52
>779
それが可能な局面ならそうやって実装するのですが、たとえばSTLのstringの様に内部でnew/deleteを用いるクラスを
DLL/EXE間で受け渡しする場合には自殺関数を用意しても無意味なので…これ以外の実装法を思いつきませんでしたorz
781デフォルトの名無しさん:2006/11/04(土) 18:35:02
ウィンドウのサブクラス化で、使い終わったときに元のWNDPROCを戻す必要はあるものでしょうか?
782デフォルトの名無しさん:2006/11/04(土) 18:46:35
>>778
CランタイムにMSVCRT使えばいいだけでは?
783デフォルトの名無しさん:2006/11/04(土) 19:01:22
イヤです
784778:2006/11/04(土) 19:04:20
一応、デストラクタは配列分だけ呼ばれているので削除されているとは思われます(自己解決)

>782
プラグインの作成についてちょこちょことやっているので、相手にそうやってもらうのを期待できない感じです(汗
785デフォルトの名無しさん:2006/11/04(土) 19:19:54
>>780
内部のというものも、外部と同じくnewとdeleteの呼び出されるところが同じなら問題ないはず。

もっとも、std::string自体は、newとdeleteのようにいくつもの実装があり、しかもABI非互換だから、
モジュールを跨いで受け渡すのには向いていないと思う。
std::stringは、例として挙げただけならいいんだけど。
786デフォルトの名無しさん:2006/11/04(土) 19:27:58
スレ違いだけどboost:shared_prtはその辺をなんとかしてくれる
deleterを使って
787デフォルトの名無しさん:2006/11/04(土) 19:29:46
ここまで new/delete 使わずに HeapAlloc/HeapFree 直呼べば、いいじゃんというレスが無いのが謎
788デフォルトの名無しさん:2006/11/04(土) 19:45:36
new/delete 使わずに HeapAlloc/HeapFree 直呼べば、いいじゃん
789デフォルトの名無しさん:2006/11/04(土) 19:59:52
>>781
> 使い終わったとき
「ウィンドウを破棄するとき」って意味なら、戻さなくて大丈夫。
790778:2006/11/04(土) 19:59:56
>785
std::stringは仰られる通りただの例です。
実際は、std::stringがDLL/EXE間の受け渡しには使えないので、
class mystr{
public:
mystr();//コンストラクタ
mystr(const char* Src);//コピーコンストラクタ(1)
mystr(const mystr& Src);//コピーコンストラクタ(2)
~mystr();//デストラクタ

void assign(const char* Src);//割り当て(1)
void assign(const mystr& Src);//割り当て(2)

const char* c_str() const;//アクセス

unsigned int size() const;//サイズの取得

mystr& operator =(const char* RHS);//代入演算子(1)
mystr& operator =(const mystr& RHS);//代入演算子(2)
bool operator ==(const char* RHS) const;//比較演算子(1)
bool operator ==(const mystr& RHS) const;//比較演算子(2)
bool operator !=(const char* RHS) const;//比較演算子(3)
bool operator !=(const mystr& RHS) const;//比較演算子(4)
protected:
char* m_Data;//文字列へのポインタ
unsigned int m_Capacity;//文字列のキャパシティ
};
の様なクラスの受け渡しを考えています。
791778:2006/11/04(土) 20:00:27
>787-788
その考えはありませんでした(´Д`)
792778:2006/11/04(土) 20:35:51
787-788で指摘されましたので、大幅な修正を行ってみました。

class TestC;というコンストラクタの呼び出しは必要でデストラクタの呼び出しが不要なクラスの場合、

TP = new(reinterpret_cast<TestC*>(HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sizeof(TestC)))) TestC;



HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, TP);

で良いのでしょうか?

単純なPOD型なら、
TP = reinterpret_cast<TestC*>(HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sizeof(TestC)));

HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, TP);
で良いのでしょうか?
793デフォルトの名無しさん:2006/11/04(土) 21:47:42
どうでもいいけどスレ汚すなよ
794765:2006/11/04(土) 21:49:21
>>766
隠しAPIのLoadLibrary16で無事いけました。
LoadLibrary16("USER.EXE")
LoadMenu(〜)
FreeLibrary16(〜)
もっといい方法があってもよさそうなのですが、当初の目的が達成できましたので
こちらの方法でいきたいと思います。ありがとうございました。
795デフォルトの名無しさん:2006/11/05(日) 00:41:26
WindowsのEDITコントロールを使ってみると、IMEも問題なく使えるようです。

ところが、海外のプログラムなどで、
たしかにEDITコントロールを使っているにもかかわらず、
IMEを有効にして入力しようとすると、
変換中の文字列が、変な場所に表示されたりするものがあります。

なぜこんなことが起こるのでしょうか?
自分が書いたプログラムでは、起こらないので、気になります。
なにかIMEの動作を妨げるようなコードを書いてしまうことがあるのでしょうか?
796デフォルトの名無しさん:2006/11/05(日) 01:05:26
文字化けでは無く変な場所?
797デフォルトの名無しさん:2006/11/05(日) 01:36:41
何かの拍子にインプレイスじゃなく画面左上に出たりすることあるね
798デフォルトの名無しさん:2006/11/05(日) 02:47:56
http://msdn.microsoft.com/workshop/browser/mshtml/reference/ifaces/document2/write.asp

このサンプルでは、要素としてBSTRを持つSAFEARRAYに対して、
要素のBSTRをSysFreeString()した後、配列全体をSafeArrayDestroy()しています。

しかし、SafeArrayDestroy()の説明には、

> Safe arrays of variant will have VariantClear called on each member
> and safe arrays of BSTR will have SysFreeString called on each element.

とあり、BSTRを二重にSysFreeString()してしまうのではないかと思うのですが、
この解釈は間違いでしょうか?

今、類似のプログラムを作ったところSafeArrayDestroy()で落ちていて...
799デフォルトの名無しさん:2006/11/05(日) 02:54:35
memsetとZeroMemoryってZeroMemoryのほうは結局内部でmemset呼び出してるんだけど
実行の早さ的にはどっちのほうがいいのかねー
800デフォルトの名無しさん:2006/11/05(日) 02:57:01
関数呼び出しのコスト分memsetの方がいいんじゃね?
801デフォルトの名無しさん:2006/11/05(日) 02:58:18
もし本当にmemsetを呼び出してるだけなら
どんな糞なコンパイラでもZeroMemoryは
memsetにインライン化されて早さ的には同じ
移植性を考えるとmemsetを使用した方が良いな
802デフォルトの名無しさん:2006/11/05(日) 09:21:00
WS_OVERLAPPEDWINDOWがstyle指定されているWindowAとWindowBがあります。
ダイアログみたいに常にWindowBをWindowAの上に表示させたいです。
方法ありましたら教えてください。
803デフォルトの名無しさん:2006/11/05(日) 09:55:25
CreateDialog
804デフォルトの名無しさん:2006/11/05(日) 10:01:32
>>802
SetWindowPos
805デフォルトの名無しさん:2006/11/05(日) 11:10:06
CreateWindowEx() の弟9引数でWindowAを指定してWindowBを作成
806デフォルトの名無しさん:2006/11/05(日) 11:37:24
ありがとうございます。
WindowBのCreateWindowExの第9引数にWindowAを指定して、
WindowBがWM_KILLFOCUSを受け取ったら
SetWindowPos(WindowB, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
を実行するようにしたところ、常に前面に表示されるようになりました。

あとはダイアログみたいに、
背面のウィンドウへの操作を完全に無効にできればOKです。
現時点では移動などの操作ができてしまいます。

よろしくお願いします。
807デフォルトの名無しさん:2006/11/05(日) 12:46:24
EnableWindow(WindowA, FALSE);
でWindowAを無効にしたところ、目的の動作をするようになりました。
ありがとうございました。

無理矢理な感じは否めませんので、
もしもっと素直な方法をご存じな方いらっしゃいましたら
お願いします。
808デフォルトの名無しさん:2006/11/05(日) 14:22:24
ダイアログの複数のボタンがあり、特定のボタンにフォーカスがあるときだけ
カーソルキーでのフォーカス移動を無視させたいのです。
このようなときにはどうすればいいのでしょうか。
809デフォルトの名無しさん:2006/11/05(日) 14:41:21
少しは自分で調べろ
810デフォルトの名無しさん:2006/11/05(日) 15:00:30
>>806
つーかモーダルダイアログじゃだめなのか
811デフォルトの名無しさん:2006/11/05(日) 15:05:15
>>808
自分でやり方書いてるんだから、書いている通りやったらいいんじゃね?
812デフォルトの名無しさん:2006/11/05(日) 15:10:57
初心者はフックに思い至らない
813デフォルトの名無しさん:2006/11/05(日) 15:38:09
ウィンドウズはメモリ管理にガーベジコレクション使っているの?
814デフォルトの名無しさん:2006/11/05(日) 16:50:57
Advanced Windows 嫁
仮想メモリ→物理メモリへのマップを含めて、最終的には page 単位で管理されている。

ガベージコレクションは、メモリ管理APIを呼び出す側で実装ってところだな。
815デフォルトの名無しさん:2006/11/05(日) 22:22:04
>>799
ZeroMemoryってmemsetのマクロだよ
winbase.h→winnt.h
816デフォルトの名無しさん:2006/11/05(日) 22:43:33
ZeroMemoryはRtlZeroMemoryのマクロ。
んでRtlZeroMemoryはmemsetのマクロかもしれないし、
kernel32のRtlZeroMemoryかもしれない。
817デフォルトの名無しさん:2006/11/05(日) 23:03:26
kernel32じゃなくてntdll
818デフォルトの名無しさん:2006/11/05(日) 23:11:46
kernel32にもあるけど…
819デフォルトの名無しさん:2006/11/05(日) 23:48:43
少なくともうちのWinXPのkernel32.dllからはエクスポートされてない。
dependency walkerで確認
820デフォルトの名無しさん:2006/11/05(日) 23:54:48
本質的な問題ではないな
821デフォルトの名無しさん:2006/11/05(日) 23:54:52
Rtl系がkernelにあるなんて初耳だw
822デフォルトの名無しさん:2006/11/06(月) 00:13:45
kernel32のエクスポートテーブルに載ってるけど、実体はntdllっすね。スマソ
823デフォルトの名無しさん:2006/11/06(月) 00:14:50
いやこっちこそスマソ
確かにntdllへforwardしてるだけだが
> エクスポートされてない
ってのは明らかに嘘だった。
RtlFillMemory
RtlMoveMemory
RtlUnwind
RtlZeroMemory
の4つがあった
824デフォルトの名無しさん:2006/11/06(月) 00:43:20
結局RtlZeroMemoryとmemsetどっちがいいんだよ
825デフォルトの名無しさん:2006/11/06(月) 00:58:38
RtlZeroMemoryは(ユーザーモードアプリには)非公開ってことになってるんだから
たとえ実体はRtlZeroMemoryへの#defineにすぎなくてもZeroMemoryにしときなさい。
826デフォルトの名無しさん:2006/11/06(月) 07:39:59
なんでわざわざAPIで用意されてるんだろ。
memsetでええやん。

構造体の初期化は HOGE hoge = {0}; が楽だな。
827デフォルトの名無しさん:2006/11/06(月) 07:45:39
俺も疑問
全くの初心者には可読性もZeroMemoryの方が可読性が良い
とかそんな理由しか思いつかない
828デフォルトの名無しさん:2006/11/06(月) 08:39:36
memsetはinline展開されるよ
829デフォルトの名無しさん:2006/11/06(月) 12:45:27
CやC++の標準ライブラリを一切使わずに組むために、最低限の物は
APIでも用意してあるんでしょ。
エントリポイントから自分で書くときはCRTの初期化がされないから
なるべくAPIだけで済ませたいし、そもそもアセンブラだけで書く人とかは
CRTも利用できないし。
830デフォルトの名無しさん:2006/11/06(月) 13:40:02
質問です。

大きなファイルの一部を読み込むためにSetFilePointerを使用していますが、
実行に時間がかかり、ReadFileで読み飛ばしているのとあまり変わらないようです。
他に高速にファイルポインタを指定する方法はないでしょうか?

目的
・zipファイルの梱包ファイル名を列挙する
・超巨大なBMPファイル等の一部を表示する

現在使用している手法
・CreateFile("ファイル名", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
         NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
・SetFilePointer(ファイルハンドル, 相対アドレス, NULL, FILE_CURRENT);

比較対象
・Lhaz等のアーカイバは一瞬に近い速度でファイル名を列挙している
・動画再生ソフトのシークタイムはもっと早い

よろしくお願いします。
831デフォルトの名無しさん:2006/11/06(月) 13:49:43
本当にSetFilePointerの実行に時間がかかってるにか?
832デフォルトの名無しさん:2006/11/06(月) 13:50:15
>>830
SetFilePointerがReadFileと変わらないってことはないけどねー。何か
変なことしてるんじゃない?
FileMappingとか使えば速くなるかもね。

833デフォルトの名無しさん:2006/11/06(月) 13:52:32
・アーカイバは(おおよそ)データ先頭にアーカイブしたファイル一覧のテーブルを置いて高速化している
・動画のシークは部分的にオンメモリでやってるんじゃない? (結果的には FileMapping してるのかもしれんが)
834デフォルトの名無しさん:2006/11/06(月) 14:13:37
局所的なデータを読むのにSetFilePointer&ReadFileを繰り返して「遅
い」とか言っているんだと想像。
たとえば、SetFilePointer→ReadFileで20バイト読み→SetFilePointer
で12バイト後ろに→ReadFileで20バイト読み→SetFilePinterで12バイ
ト後ろに…、とか。
835デフォルトの名無しさん:2006/11/06(月) 14:47:40
>>830
FILE_FLAG_RANDOM_ACCESSとか指定してファイル開くのはどうだろ?
836デフォルトの名無しさん:2006/11/06(月) 14:54:15
あー、それだな
837デフォルトの名無しさん:2006/11/06(月) 14:55:22
バカかおまいら。834でFAだろこんなの。
838830:2006/11/06(月) 14:56:34
多くのレスありがとうございます。
問題点を整理するため、次のようなテストコードを試してみました。

#include <windows.h>
int main( int argc , char *argv[])
{
  HANDLE hfile;
  DWORD buf, size, sized;
  int n;
  if(argc != 2)return 0;
  hfile = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
  if(hfile == INVALID_HANDLE_VALUE)return 0;
  size = GetFileSize(hfile, NULL);
  for(n=0; n<300; n++)
  {
    SetFilePointer(hfile, (size-4)*n/100, NULL, FILE_BEGIN);
    ReadFile(hfile, &buf, 4, &sized, NULL);
  }
  CloseHandle(hfile);
  return 0;
}
839デフォルトの名無しさん:2006/11/06(月) 15:00:21
>>834
おっしゃるとおりです。

1回のSetFilePointerで時間がかかっているわけではないようです。申し訳ありませんでした。
zip形式のファイル構造を調べなおしてみましたが、データとファイル名のセット以外に
ファイルの末尾にファイル名の一覧を記述しておく領域が加えてあることが多いようです。
アーカイバはその領域を一括して読んでいるんだと思います。

お手数をおかけしました。
840デフォルトの名無しさん:2006/11/06(月) 18:08:04
クリックしたらSendMessage使ってWM_PAINTメッセージを送る、
みたいな感じにしたいのにうまくいかないのはなぜ?

SendMessage(hwnd, WM_PAINT, wParam, lParam);

・ウィンドウ起動時ではWM_PAINTのところはうまくいってる。
・他のメッセージはちゃんと送れる。(SendMessage(hwnd, WM_DESTROY, wParam, lParam);とか)
841デフォルトの名無しさん:2006/11/06(月) 18:11:39
InvalidateRectするっきゃナイト
842デフォルトの名無しさん:2006/11/06(月) 18:23:25
WM_PAINT 内部で呼んでる BeginPaint() で
再描画に必要な領域を切り出したうえで hDC をくりだす。
単に WM_PAINT を Send しただけでは、
過去に描画済みで再描画の必要がないと判断し、 hDC を NULL にしてしまう。

InvalidateRect() で描画済み領域を忘れるようにすれば桶

最も WM_PAINT の先頭・末尾で BeginPaint()/EndPaint() だけやっといて、
描画コード内の hDC は別のを(GetDC とかね)使っているなら WM_PAINT を Send しただけでも
再描画するかもしんない
843デフォルトの名無しさん:2006/11/06(月) 19:28:00
わかりやすい説明ありがとう。InvalidateRectを使ってみた。
でもできない…

画像ファイルを読み込みウィンドウに表示↓
ボタンを押すと画像に特定の処理をする↓
その画像をファイルとして上書き保存↓(ここまで成功したのは確認済み)
InvalidateRect()↓

俺の予想ではここからWM_PAINTが自動的に発生し、上書きされた画像を
表示してくれるはずなんだけどできない。
一応InvalidateRect()のあとにSendMessageも入れといたけどできない。

オラに力をわけてくれ
844デフォルトの名無しさん:2006/11/06(月) 19:29:31
>>843
そこで再描画したいなら、InvalidateRectしてUpdateWindow()
それでもダメならプログラムのバグ。
845デフォルトの名無しさん:2006/11/06(月) 19:31:30
>>843
ちゃんとWM_PAINTで毎回画像ファイル開きなおしてるか?
846デフォルトの名無しさん:2006/11/06(月) 19:33:26
>>843
そうそう InvalidateRect() は 再描画の予約だけで、
メッセージループが暇になった隙をねらって実際の WM_PAINT が配送される。
即時反映させたかったら、>>844 の通り UpdateWindow() を発行するんだ
847デフォルトの名無しさん:2006/11/06(月) 19:54:31
なるほど。ありがとう。でもできない…
InvalidateRectしてすぐUpdateWindowしたけど無理でした…
848デフォルトの名無しさん:2006/11/06(月) 19:55:11
何が無理なんだかさっぱりわからん。
ただの>>847のバグだろそりゃ。
849デフォルトの名無しさん:2006/11/06(月) 19:57:15
もしかして、他アプリを操作しようとしている?
まーとにかくもう少し情報がないと・・・

それはともかくとして
>>840
>・他のメッセージはちゃんと送れる。(SendMessage(hwnd, WM_DESTROY, wParam, lParam);とか)
WM_DESTROY 送っちゃダメだよ・・・w
850デフォルトの名無しさん:2006/11/06(月) 20:03:36
ただのバグっぽいね。助言くれた人ありがとう。
細かいところ見直して出直します
851デフォルトの名無しさん:2006/11/06(月) 20:24:18
なんでもかんでも SendMessage で済まそうとしているとこみると
潜在的なバグが他にもありそうだな…

問題を切り分けするのも技術のうちだぞ。
窓のサイズを変えてもちゃんと加工前の画像が表示できているか? とか
加工後のファイルをペイントで確認してみる とか
852デフォルトの名無しさん:2006/11/07(火) 01:18:02
リストビューに垂直スクロールバーが出るくらい項目を追加して、
ある項目をクリック→ホイールでその項目が見えないくらいまでスクロール→何故か、クリックした項目までジャンプ
ListView_EnsureVisibleを使ったように最初にクリックした項目が強制的に表示されてしまいます。
これはなにかのメッセージが呼ばれてListView_EnsureVisibleしてるのでしょうか?
勝手にスクロールされたくないのですが、どうすればいいのでしょうか?
853852:2006/11/07(火) 02:23:36 BE:954083096-2BP(0)
自己解決しました。
WM_MOUSEWHEELメッセージを見つけました。これをフックすればなんとかなりそうです。
854デフォルトの名無しさん:2006/11/07(火) 08:23:32
ホイールでスクロール中に、勝手に表示位置が戻ったら非常に困ると思うのだが。
本当に上下ホイール以外の操作は一切していないのか?
855デフォルトの名無しさん:2006/11/07(火) 08:33:35
俺のマウス、インテリセンスの誤爆なのかわからんけど、不意にホイール動作しやがりますよ。
意識してホイール動作させてるときは問題ないんだけどねぇ…
856デフォルトの名無しさん:2006/11/07(火) 09:53:52
>>855
ホイールが中途半端な位置で止まっているだけでは?
クリック感のあるホイールが中途半端な位置で止まっていると
何かの拍子で本来の停止位置まで動くことは多いが。
857デフォルトの名無しさん:2006/11/07(火) 11:35:38
プリンタに出力された内容を、キャッチしてそまんまビットマップ化するソースかツールありませんか?
858デフォルトの名無しさん:2006/11/07(火) 11:52:44
プリンタドライバ固有のプロパティ画面を開くAPI教えて下さい。
859デフォルトの名無しさん:2006/11/07(火) 12:26:10
DocumentProperties
860デフォルトの名無しさん:2006/11/07(火) 13:36:01
FindFirstFileを使うと
1番目と2番目に.と..が来るんですが。
これはなんですか。
861デフォルトの名無しさん:2006/11/07(火) 13:38:13
カレントディレクトリと親ディレクトリ
862デフォルトの名無しさん:2006/11/07(火) 13:39:47
FindFirstFileしたパターンのディレクトリ自身とそのディレクトリの親ディレクトリ
863デフォルトの名無しさん:2006/11/07(火) 13:48:25
なるほど。
dirしたときに出てくる奴だったのか。
サンクスです。
864デフォルトの名無しさん:2006/11/07(火) 14:17:41
win95以降からはじめた口かね
865デフォルトの名無しさん:2006/11/07(火) 15:34:57
マウスの動かないようにするAPIを教えてください
866デフォルトの名無しさん:2006/11/07(火) 18:06:00
SetCursorPos
867デフォルトの名無しさん:2006/11/07(火) 18:28:04
>>864
だからなんなんですか。
868デフォルトの名無しさん:2006/11/07(火) 20:01:35
>>865
ClipCursor
869デフォルトの名無しさん:2006/11/07(火) 21:26:06
拡大鏡のようなことをしたいんですが、一般的にStretchBltとビットマップのポインタ操作とではどっちが高速なのでしょうか。
StretchBltがビデオドライバ(とビデオチップ)の支援を受けられるのであればいいのですが‥‥
870デフォルトの名無しさん:2006/11/07(火) 21:26:39
ちなみに倍率は整数倍のみです。
871デフォルトの名無しさん:2006/11/07(火) 22:06:08
872デフォルトの名無しさん:2006/11/07(火) 23:34:28
質問です

親ウィンドウのwinprocとダイアログのdlgprocの間でデータのやりとりをしたいのですが
グローバルオブジェクトを仲介する以外に良い方法はないでしょうか?

アドバイスをお願いします
873デフォルトの名無しさん:2006/11/07(火) 23:45:52
>>872
ウィンドウが作られたとき、必要な領域をnewで確保し、そのポインタをSetPropで関連付けておく。
deleteとRemovePropも忘れずに。
874デフォルトの名無しさん:2006/11/08(水) 00:37:37
>>872
DialogBox/CreateDialogではなく、DialogBoxParam/CreateDialogParamを使う。
親から子へ、何らかの構造体かクラスのポインタを渡せばいい。
勿論newなどで動的に確保するのでもそうでなくとも、そのオブジェクトの有効期間に気を使う必要がある。
875デフォルトの名無しさん:2006/11/08(水) 01:58:55
GetWindowText、GetWindowTextLengthってキャプションが長すぎると失敗したりします?

VBのテキストボックスの文章を取得したいのですが、
とりあえずテキストボックスのハンドルを取得するところまではできました。

それで
Text1Len = GetWindowTextLength(Text1Handle)
とやったのですが、0になってしまいます。

Spy++で Text1Handle と 目的のテキストボックスのハンドルが一致する事と、
テキストボックスのウィンドウキャプションに文章が入っている事は確認しているのですが…。
876デフォルトの名無しさん:2006/11/08(水) 02:18:00
877デフォルトの名無しさん:2006/11/08(水) 02:29:08
>>876
ありがとうございます。

>ただし、他のアプリケーションのコントロールのテキストを取得することはできません。
あはは…。
素直にSendMessage使います。お騒がせしました。
878869:2006/11/08(水) 08:03:36
>>871
ありがとうございます。
でもStretchBltの情報はないのですね。これは実際にコード組んで比較するしかなさそう・・
879デフォルトの名無しさん:2006/11/08(水) 11:22:15
>>878
1.GetDeviceCaps関数のRASTERCAPSで、ビデオカードが対応してるか確認。
2.StretchBlt関数とポインタ操作による比較を行う。
3.VGAがOFFの、SAFEモードで立ち上げる。
4.StretchBlt関数とポインタ操作による比較を行う。
5.比較結果を見て(゚Д゚)ウマー
880デフォルトの名無しさん:2006/11/08(水) 11:41:24
StretchBltでの拡大は環境によってバイリニアフィルタがかかったり、
かからなかったりするんだよね。プログラマにはその制御ができない。
ビデオカードのドライバ依存。
881デフォルトの名無しさん:2006/11/08(水) 11:58:24
>>880
SetStretchBltModeで制御できたような希ガス
882デフォルトの名無しさん:2006/11/08(水) 12:25:52
とりあえずDIBのStretchBltで組んでみて、
遅かったら改めて考えてみる、で良いと思う。
883デフォルトの名無しさん:2006/11/08(水) 12:31:23
>>881
それは縮小するときの設定で、拡大は設定できないんだよ。
拡大はビデオカードのドライバの気分次第。
884デフォルトの名無しさん:2006/11/08(水) 13:09:02
>>879
画面のプロパティからハードウェアアクセラレーション切ったらダメなん?
885デフォルトの名無しさん:2006/11/08(水) 15:49:05
若干スレ違いかもしれないですが…開発環境これなものでここで聞きます。
IPアドレスが、グローバルかローカルかを判別する方法ってありますか?
APIやWMIなんかも調べてみたものの、わかりませんでした。
ググってたら判定するフリーウエアみつけたけど、どうやってるのかな…
886デフォルトの名無しさん:2006/11/08(水) 15:53:24
「プライベートIP」でググれ
887デフォルトの名無しさん:2006/11/08(水) 15:54:27
ネットマスク+クラスA〜Cプライベート
888885:2006/11/08(水) 16:07:49
うー、つまり自分でマスクして範囲で見るしかないって事ですか。
わかりました…
889デフォルトの名無しさん:2006/11/08(水) 16:25:46
マスクも使えないやつにapi使えるのか?
890885:2006/11/08(水) 17:08:11
>>889
は?w
891デフォルトの名無しさん:2006/11/08(水) 17:18:00
変な流れにならないうちに次の方どうぞ
892デフォルトの名無しさん:2006/11/08(水) 18:37:48
名コテの多いスレだなw
893デフォルトの名無しさん:2006/11/08(水) 19:30:57
>開発環境これ
誰かツッコめよw
894デフォルトの名無しさん:2006/11/08(水) 22:04:33
>>852
それはリストビューの仕様
項目選択直後にマウスホイールでスクロールすると必ずそうなる
895デフォルトの名無しさん:2006/11/08(水) 23:29:16
先に一時的に環境変数を付加してから、
プログラムを起動するランチャーを開発したいと思います。

そこでShellExecuteExでSEE_MASK_DOENVSUBSTを
使用するんじゃないかという所まではたどり着いたのですが
lpDirectoryもしくはlpFileメンバに環境変数を指定とあって意味不明です。
lpDirectoryは作業ディレクトリ、lpFileは実行ファイルとあるので
何をどうすればよいのか分からなくなりました。

どうすれば環境変数を一時追加できるのでしょうか。
896デフォルトの名無しさん:2006/11/09(木) 00:46:46
>>895
それは、lpDirectoryやlpFileのパス名の中で %JAVA_HOME% という感じで
環境変数を参照できるってこと。

正解は、CreateProcessのlpEnvironment
897デフォルトの名無しさん:2006/11/09(木) 00:53:12
最近Windows Vistaを入れて遊んでいるのですが、
Win32 API(CreateWindow)で作ったボタンとかプログレスバーの形状が
Windows 95風のGUIのままなのですが、新しいGUIで表示する方法はありませんか?
(Windows XPのLunaでもプログレスバーは同様に古いままでした。)

FireFoxとかはちゃんと新しい表示になっているのですが、これが.NETで書かれている
とは思えないのでWin32 APIで表示する方法があると自分は思うのです。

どなたか知っている方がいらっしゃたら教えてください。
898デフォルトの名無しさん:2006/11/09(木) 01:13:25
>>897 つ Using Windows XP Visual Styles
899デフォルトの名無しさん:2006/11/09(木) 06:45:54
>>896
ありがとう。
900デフォルトの名無しさん:2006/11/09(木) 08:09:03
タスクバーを含まない画面のサイズをGetSystemMetrics(SM_CXMAXIMIZED または SM_CYMAXIMIZED)で
取得して中央に表示するサンプルとかをみかけますが、このSM_CXMAXIMIZED または SM_CYMAXIMIZEDで
取得できる値はタスクバーにちょっと被りませんか?
タイトルバーのないウインドウのサイズを↑でとれた値で設定すると、(0,0)座標からセットしているのに、
少しタスクバーと被ります。
Windows2003(XPStyle)、WindowsXP(XPStyle)、Windows2000、Windows98のどれでためしてみても、
少しタスクバーと被っているのです。
この被っているサイズってなんなのか教えてもらえませんか。
901898:2006/11/09(木) 08:23:50
>>898
ありがとうございます。
902デフォルトの名無しさん:2006/11/09(木) 09:00:01
>>900
ウィンドウ周囲のボーダー分じゃね?最大化すると普通見えなくなるし。
後、中央表示するならDS_CENTERかGetMonitorInfoで計算した方がいい。
903デフォルトの名無しさん:2006/11/09(木) 10:58:51
>>900
おっしゃるとおり、ボーダー分が被っていました。ありがとうござました。
904デフォルトの名無しさん:2006/11/09(木) 11:05:18
プリンタのデバイスコンテキストに書き込むときメモリをかなり使うようです。
BitBltやStrechDraw(こっちはなるべく使わないようにしてます)を使って書き込んでますが、
減色して書き込むと良いのかな、と思いました。
減色ってどうやるんでしょう?
905デフォルトの名無しさん:2006/11/09(木) 11:12:51
プログラミング以前にグラフィック関連の基礎を身につけましょう。
用語を知らないとぐぐることもできません。
906デフォルトの名無しさん:2006/11/09(木) 11:25:35
で、ググル用語は?
907デフォルトの名無しさん:2006/11/09(木) 12:26:11
現職
908デフォルトの名無しさん:2006/11/09(木) 18:29:57
PolyLineを指定した矩形の中だけ描画する方法教えてください。
909デフォルトの名無しさん:2006/11/09(木) 18:37:48
フロッピードライブを取得したいのですが、GetDriveTypeだと、
MOドライブやUSBメモリ等との区別が付きません。
どのようにしたら良いでしょうか?
910デフォルトの名無しさん:2006/11/09(木) 18:39:49
PolyLineを指定した矩形の中だけ描画すればいいとおもうよ
911デフォルトの名無しさん:2006/11/09(木) 18:42:09
>>908
CreatePolyPolygonRgn
912デフォルトの名無しさん:2006/11/09(木) 18:51:37
>>909
にゃんにゃお にゃんにゃん にゃんにゃんにゃ
(DeviceIoControl関数と、IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBERで判定)
913デフォルトの名無しさん:2006/11/10(金) 00:00:46
Sleep使うと子プロセスが遅くなるって本当ですか?
914デフォルトの名無しさん:2006/11/10(金) 01:54:52
プロセスじゃなくスレッドが一時的に止まる。
普通止まっても構わない局面でしか使わないけどね。
915デフォルトの名無しさん:2006/11/10(金) 02:05:21
あ、子プロセスの話か。914は忘れて。
子プロセスが遅くなることはない気がするが。
916デフォルトの名無しさん:2006/11/10(金) 02:07:51
Windowsプログラミング初心者です。

コンソールプログラムから、スレッドでWinMainをよんで窓をポップアップさせて図を
描いてます。

ここで、パラメータをコンソールから打ち込むので、自動でコンソールのほうをアクティブにして
画面のTOPに持って行きたいんですが、コンソールのウィンドウ・ハンドルが分かりません。

コンソールのウィンドウ・ハンドルはどうやったら分かるでしょうか?
もしくは望みの結果をどうやったら実現できるでしょうか?

ご教授ください。 できれば3行で。
917デフォルトの名無しさん:2006/11/10(金) 02:19:25
918デフォルトの名無しさん:2006/11/10(金) 09:51:03
>>915
子プロセスと通信してるとかだったりして
919デフォルトの名無しさん:2006/11/10(金) 11:18:00
>>917
dクス! でも 0 しかかえってコネーwww もうちょっとがんばる
920デフォルトの名無しさん:2006/11/10(金) 12:19:55
アクティブでないウインドウ上のテキストボックス、ボタン間のフォーカスを
こっそり動かしてあげるにはどうするればいいでしょうか。
SetFocusで設定したり、WM_SETFOCUSとか送ると、
フォーカスが動いたタイミングでアクティブに成ろうとします。
921916:2006/11/10(金) 12:39:51
>917がうまくいきません (><

・コンソールのタイトルの変更・復帰は出来てます。
・コンソールアプリから開いた普通のWin窓も、クラスをちゃんと指定すれば正しい
ハンドルが帰ってきます。

でもコンソールのハンドルはNULLしかかえって来ません。クラスはサンプル通り
NULLを突っ込んでます。

コンソールのクラスがNULLじゃないんじゃないかと思うんですが、
どうやったら分かりますか? 
API検索のコツがまだつかめなくて見つかりません(><

あと使用言語はIntelFortranです。CでのAPIが分かれば大体はこちらで対応できます。
922デフォルトの名無しさん:2006/11/10(金) 12:42:10
半角英数と全角英数をごっちゃにして使われると読みにくいな
923デフォルトの名無しさん:2006/11/10(金) 12:56:24
コンソールのクラスがNULLなんてことはたぶん無い 普通ConsoleWindowClassだったと思う 
そもそもFindWindow判ってないみたいだからちゃんと調べれ(うちのMSDNだと日本語版にNULL指定について書いてないけど)
クラス調べるならGetClassName

てか>>916でOK
924デフォルトの名無しさん:2006/11/10(金) 13:01:43
MS公式にもこんなこといっていたのか。
以前、9xでコンソールのウインドウハンドル取りたかったとき、自分でこの方法思いついたんだけど。

そのときにちょっと変な挙動に悩まされた。

プロセスが起動してすぐに、FindWindow()を利用する方法でウインドウハンドルを取ろうとしても、
うまくハンドルが取れなかった。

とりあえず適当にSleep()をはさんだら、問題なかった。

何故かは分からない。
プロセスが起動して、main()関数に至るまでには、まだコンソールが開いていないのだろうか。
925デフォルトの名無しさん:2006/11/10(金) 13:07:19
916じゃなくて>>917だね スマソ
926デフォルトの名無しさん:2006/11/10(金) 16:21:18
>>924
CreateProcess 直後は窓出来上がってないみたいだね。
同じく Sleep で適度に遅延かけてから取得したけど
927デフォルトの名無しさん:2006/11/10(金) 19:17:33
コントロールパネルの「プリンタとFAX」をオープンするAPIを教えて下さい。
928デフォルトの名無しさん:2006/11/10(金) 19:27:46
にたような質問をどこかで見たような気がする。
そこに答えが書いてあったような気もする。
929デフォルトの名無しさん:2006/11/10(金) 20:26:31
CreateProcess()で"c:\windows\system32\control.exe printers"をキックる
930916:2006/11/11(土) 00:49:46
>>923-926
dクスっす!何とかできました。
>>923
このAPIに限らずコンソールがらみのMSAPI文書では、コンソールのクラスに軒並み
NULLが入っています。ここで聞かなかったら永久に分からなかったかも。

でもConsoleWindowsClassを最初定数だと思って混乱した(><
検索してもそんな文字列引っかからないし。
文字定数で与えたらバッチ・グーだったw

あとGetClassNameは引数にハンドルがあって使えませんでした!w
931デフォルトの名無しさん:2006/11/11(土) 01:45:23
タイトルをユニークにすればクラス名はNULLでも成功するはずなんだけど...
そのためのタイトルの変更だし。
クラス名NULLでハンドル取得できずにクラス名指定で取得できたんだとしたら
FindWindowの仕様に反しているように思える。

完成したぽいけど何か腑に落ちないw
932デフォルトの名無しさん:2006/11/11(土) 02:35:05
933916:2006/11/11(土) 02:37:25
>>931
そうなんですか(´・ω・`) 
改めて動いているコードをいじって試してみましたがだめでした。

Fortran用のラッパーが入っているので挙動が違うのかも。
文字列(変数)を直接渡す形になっているので、NULL文字列を送ってみたんですが・・・

Cの場合ポインタを送ることになっているので、ヌルポを送ることになるんですかね?
Fortran用のラッパーに関してはインターフェース部に変数の型が与えられているだけなので
この辺の例外に対する対処法が分かりません(><;


とりあえず、こんな感じでうまくいきます、ユニークタイトルはサンプルにあわせてます。

ipid = GetCurrentProcessId()
itic = GetTickCount()
WRITE(tmp, '(a, i10, a, i10, a)') 'Uho!', ipid, '/', itic, CHAR(0)
iretb = GetConsoleTitle(buff, 1024)
iretb = SetConsoleTitle(TRIM(tmp))
CALL Sleep(40)
hDOS = FindWindow("ConsoleWindowClass", TRIM(tmp))
iretb = SetConsoleTitle(buff)
iretb = SetForegroundWindow( hDOS )
934デフォルトの名無しさん:2006/11/11(土) 03:07:19
あーラッパが文字列しか受け付けないのか。
Fortranは全く知らないけどNULLが渡ってなかっただけかもね。
別にクラス名書いても、より厳格な検索が出来るだけなので問題ないです。
オツカレサン
935916:2006/11/11(土) 03:17:51
>>932
ありがとうございます。でもIntelの定義ファイルには存在してませんでした(><;

というか最初に"Console"の文字列でインターフェースファイル全部を検索して
コンソールのハンドルを返しそうなのを調べたけど無かったんです!(><;



でも、引数が無くて整数を返すだけのAPIのようだから、いま自分でインターフェースを
みようみまねで書いて直接APIを叩きに行って、うまくいきました(><;

丸二日の苦労が一瞬で解決しました(><; インテルの馬鹿っ!(><; もう嫌っ!
中の見えないサブルーチンを呼ぶのイヤッ!!

INTERFACE
FUNCTION GetConsoleWindow()
USE ifwinty
INTEGER (HANDLE) :: GetConsoleWindow
!DEC$ ATTRIBUTES DEFAULT, STDCALL, DECORATE, ALIAS:'GetConsoleWindow' :: GetConsoleWindow
END FUNCTION
END INTERFACE

936デフォルトの名無しさん:2006/11/11(土) 05:11:52
>>935
GetCosoleWindow()使っていいなら最初から言えばいいのに。
動作環境は2k以上でおkですって。

あと、SetConsoleTitle()で変更する前に、
まずFindWindow()を使って、本当にそのウインドウタイトルが存在しないのか確かめたほうがいいと思う。
937デフォルトの名無しさん:2006/11/11(土) 06:11:13
逆にWin9xでも動かすなら、クラス名はNULLじゃなければいけない。
DOS窓のクラス名は"ConsoleWindowClass"ではなく"tty"なので。
938デフォルトの名無しさん:2006/11/11(土) 16:00:35
C#をどう思いますか?
あんなの言語じゃないと思う、やっぱりWin32API使った方がかっこいいよな!!! to オマエラ
939デフォルトの名無しさん:2006/11/11(土) 16:06:43
C#は言語だと思う。Win32はAPIであって言語じゃないし、汚いAPIだと思う。 by オマエラ
940デフォルトの名無しさん:2006/11/11(土) 16:26:11
オマエラさん、こんにちは。
今日は何の御用でしょうか?
>ものを買う
 ものを売る
941デフォルトの名無しさん:2006/11/11(土) 16:27:22
C#でもWin32APIは呼び出せるわけで…
942デフォルトの名無しさん:2006/11/11(土) 16:43:05
MCIでソフトウェアごとの音量調整ってできる?
943デフォルトの名無しさん:2006/11/11(土) 16:47:23
Vistaならできる
944デフォルトの名無しさん:2006/11/11(土) 16:50:53
>>943
手軽にmp3再生できて音量調整もできる
なんて便利なものはない?
945デフォルトの名無しさん:2006/11/11(土) 17:06:26
・自前でデコードしてdirectsoundで再生
・directshowでフィルタグラフいじってaudio rendererに音量設定

後者のほうがトータルのコード量は少なくてすむが難易度は高い
946デフォルトの名無しさん:2006/11/11(土) 18:54:40
>>945
前者にしとく。
947916:2006/11/11(土) 19:29:56
>>936
いや、そういわれてもwwwww困ります(><;
こっちは初心者でWIN32 API知らないし。

一応、Intelのコンパイラで提供されているWin32APIのインターフェースファイル全部に
検索かけてConsoleがらみのAPIの名前には目を通したけど、たまたまそれは載ってない
APIだったからその存在を知らなかった。

そもそも皆さんはどうやってWin32APIを学んだの?
オンラインヘルプを1個1個見ていくの?

数値計算のライブラリなら解きたい内容が分かっていれば目次から調べようがあるけど、
OSのAPIなんてカテゴリー分けもちんぷんかんぷんでどこから見ていいかも分かりません
(><;
948デフォルトの名無しさん:2006/11/11(土) 19:30:55
リファレンスを全部記憶するんだよ
949デフォルトの名無しさん:2006/11/11(土) 19:34:25
俺は翔泳社のAPIバイブルを一度全部読んだな。
暗記するわけじゃないが、どんなAPIが存在するのかくらいは
だいたい覚えている。後は使うときに検索。
950デフォルトの名無しさん:2006/11/11(土) 19:45:36
WinUser.h、WinGDI.h、CommCtrl.hは全部暗記した
951デフォルトの名無しさん:2006/11/11(土) 19:55:38
ochinchin.h を manko.cpp に #include したのに童貞が捨てられません
952デフォルトの名無しさん:2006/11/11(土) 20:08:11
慣れてくると、こういう機能の関数があるかどうかはMSDNの
このカテゴリーを調べれば間違いないとか、そういう調べ方が
できるようになる。
953デフォルトの名無しさん:2006/11/11(土) 20:53:54
>>951
bind
954デフォルトの名無しさん:2006/11/11(土) 21:03:04
doutei属性外したいだけならfuhzoku_cast<siroutoDT>でいいじゃん
955デフォルトの名無しさん:2006/11/11(土) 21:20:48
フォルダ関連の便利な関数がShellAPIに沢山あるよ
最近知ってかなり悔しかった
956デフォルトの名無しさん:2006/11/11(土) 21:30:19
ショートカットのリンク探しくらいしか使ったことないや、俺も調べてみよ
957デフォルトの名無しさん:2006/11/11(土) 22:10:10
>>951 DestroyDoutei(hDoutei);
958デフォルトの名無しさん:2006/11/11(土) 22:12:17
ERROR_AITE_NOT_FOUND
959デフォルトの名無しさん:2006/11/11(土) 22:29:34
VIP_DE_YAREYA_HAGE
960デフォルトの名無しさん:2006/11/11(土) 23:18:46
おもしろい!!さすがLost32APIスレだ!
961デフォルトの名無しさん:2006/11/11(土) 23:37:13
>>945
後者のほうが楽じゃない?
IGraphBuilderでレンダリング。取り出したIBascAudioでボリューム設定。
962デフォルトの名無しさん:2006/11/11(土) 23:38:10
お前ら戻り値のチェックもGetLastErrorもせんでよく平気だな。
気付かぬうちにうほっされてても知らんぞ。
963デフォルトの名無しさん:2006/11/11(土) 23:46:01
GetDCPenColorを使うとエラー(外部参照 LINK2001)と警告(4039)が出るんだけど、どうして??
964デフォルトの名無しさん:2006/11/12(日) 00:00:58
>>961
難易度が高いより勉強する内容が多い、のほうが正しかったかなあ。
一度分かってしまえば楽勝なんだが。
965デフォルトの名無しさん:2006/11/12(日) 01:41:44
今、ダイアログにチャイルドウインドがあるとします。
ボタンを押すと、このチャイルドウインドがポップアップにしたいです。
(つまり親ダイアログを動かしても、付いてもこないし、親ダイアログより大きくリサイズも可能)
で、もう一回ボタンをおすと、元のチャイルドになります。(親ダイアログを移動させると付いてくる)

ポップアップにするときは
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
SetParent(hWnd, NULL);

戻すときは
SetParent(hWnd, GetSafeHwnd());
SetWindowLong(hWnd, GWL_STYLE, WS_CHILD | WS_VISIBLE);

見たいにやると一応、動くのです。

質問は「WS_CHILDをセットする前に親をNULLにしているのですが、これは無駄な心配ですか?」です。
やっぱり一瞬でも親ウインドがある状態でWS_CHILDをセットするのは危険ですか?
また、逆もそうでしょうか?

これらを2個のAPIではなく、一撃でやる方法はありますでしょうか?
966デフォルトの名無しさん:2006/11/12(日) 08:38:30
>>965
SetParentの説明と順番が逆になってる気がする

ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_setparent.asp
hWndNewParent パラメータに NULL を指定する場合は、SetParent 関数を
呼び出した「 後 に 」WS_CHILD フラグをクリアし、WS_POPUP フラグをセットしなければなりません。
逆に、デスクトップの子ウィンドウに対して hWndNewParent パラメータに NULL 以外の値を
指定して SetParent 関数を呼び出す場合は、関数を呼び出す「 前 に 」 WS_POPUP フラグを
クリアし、WS_CHILD フラグをセットしておかなければなりません。
967デフォルトの名無しさん:2006/11/12(日) 09:31:22
>>944
DSPack。Delphiだけど
968デフォルトの名無しさん:2006/11/12(日) 10:37:02
>>963
ライブラリをリンクしてないから
969デフォルトの名無しさん:2006/11/12(日) 10:57:52
msimg32.dllにリソースとして含まれている、ってのがいまいちよく判らん。
VS2005のリンカ見てると、普通にgdi32.libで解決しているように見える。
970デフォルトの名無しさん:2006/11/12(日) 11:39:52
>>963
DCPen系はWin2k以降のみに対応してるからかな?
971デフォルトの名無しさん:2006/11/12(日) 13:36:57
CD-Rがファイナライズされているかどうか調べるにはどうしたら良いですか?
972デフォルトの名無しさん:2006/11/12(日) 15:26:27
ファイルを読み込んで内容をアプリ側に渡すDLLを作ろうとしているのですが、
アプリ側が確保したメモリに直接書き込むとして、
アプリ側がnewを使ってヒープから確保したメモリのアドレスに
DLLは正常にアクセスできるのでしょうか。
(778を読む限り大丈夫そうな気がしたけど・・・
GlobalAlloc()とか使うのとは違うのでしょうか?

あと構造体ポインタをアプリからDLLに渡した場合
(同じヘッダファイルを読んで共通の構造体定義を使うとして)、
コンパイラが違うとアラインメントの違いなどで
ずれてしまうこともあるでしょうか。

宜しくお願いします。
973デフォルトの名無しさん:2006/11/12(日) 15:30:59
>>972
作ろうじゃなくて、サンプル作ってみて試してみたらいいじゃん。
自分で少しはやってみろって。
974デフォルトの名無しさん:2006/11/12(日) 15:41:13
>>972
>アプリ側がnewを使ってヒープから確保したメモリのアドレスにDLLは正常にアクセスできるのでしょうか。
ttp://msdn.microsoft.com/library/en-us/dllproc/base/about_dynamic_link_libraries.asp

>コンパイラが違うとアラインメントの違いなどでずれてしまうこともあるでしょうか。
ある。コンパイラが同じでも設定によって変わる。
975デフォルトの名無しさん:2006/11/12(日) 15:47:55
>>973
そんな役に立たないレスならレスしなきゃいいじゃん。
少しは黙っていればいいのに。
976972:2006/11/12(日) 16:02:22
>>973
すみません、メモリ管理とかはあまり知らなくて色々謎だらけで、
試してうまくいってもそれで理想的(異なるコンパイラなどの条件でも動くものなのか)
なのかわかりそうになかったので先走って質問してしまいました。

>>975
ありがとうございます、DLLは呼び出したプロセス側の
スタック領域と仮想アドレス空間を使うからnewで大丈夫ということですね。
(Susie Plug-inとかだとmalloc()でなくLocalAlloc()だったから
どうなんだろうと思ってましたが、調べた感じではLocalAlloc()は16bit時代の
遺物みたいですね
977デフォルトの名無しさん:2006/11/12(日) 16:25:44
>>974(´・ω・)カワイソス
978972:2006/11/12(日) 16:38:19
;`;:゙;`(;゚;ж;゚; )ブッフォ
すみません、

誤 >>975
>>974
でしたw 975のどこを読んで「〜〜ということですね」なのか
想像して雪見だいふく吹いた
979デフォルトの名無しさん:2006/11/12(日) 17:18:36
現実生活で誤レスしなければ大丈夫だ。
980デフォルトの名無しさん:2006/11/12(日) 17:26:31
経験者の言葉には重みがあるな
981963:2006/11/12(日) 21:09:28
>>968-970
レストンクス
ライブラリをリンクってどうやるんですか?設定をいじるって感じになるんでしょうか?
そもそもヘッダーファイルをインクルードして、使えないって変じゃないすか?
ちなみにVC6.0++ WindowsXPです。
982デフォルトの名無しさん:2006/11/12(日) 21:20:58
「意味不明な物なんか使えるかボケ」て言われてんだよ
983デフォルトの名無しさん:2006/11/12(日) 21:40:24
ヘッダーだけでよかったらソースさえいらないんだよ
984デフォルトの名無しさん:2006/11/12(日) 22:46:34
>>981
そもそもコンドームがあるのに
セックスできないって変じゃないですか?
ちなみに彼女はいません。
985デフォルトの名無しさん:2006/11/12(日) 22:54:47
わけわかんね。
986デフォルトの名無しさん:2006/11/12(日) 23:28:51
>>981
よくは知らんが
エラー 外部参照 LINK2001 でググルと色々出てくるよ。
987デフォルトの名無しさん:2006/11/13(月) 00:09:38
WindowsVistaとかもうすぐ来るんだけどさ、APIまた覚えなおさないと駄目なの?
988デフォルトの名無しさん:2006/11/13(月) 00:36:08
スレ終わりかけに質問するのもなんですが

今ダイアログがメインウィンドウになるようなものを組んでいます

メニューと最大・最小ボタン、×ボタンが表示されているのですがまったく機能しません。
ボタンとして押すこともできない状態です。

宜しくお願いします。
また、ダイアログをメインウィンドウとして使う場合何か特別な注意点などはあるのでしょうか。
989デフォルトの名無しさん:2006/11/13(月) 00:48:59
>>988
メッセージループまわってる?
キャプションバー持ってウィンドウ動かすことはできる?
990デフォルトの名無しさん:2006/11/13(月) 00:55:04
全く動かないです(´・ω・)

ただ適当に配置したOKボタンは押せているようです
991デフォルトの名無しさん:2006/11/13(月) 01:03:43
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvitem.asp
ここの

_WIN32_WINNT >= 0x560

ってどういう意味なんでしょうか?

0x502でWindows2003で、0x600がVistaじゃないの??
992567:2006/11/13(月) 01:05:40
(´ー`)y━・~~
993デフォルトの名無しさん:2006/11/13(月) 01:06:21
あ、CommCtrlのバージョンですね……
失礼しました(;´Д`)
994デフォルトの名無しさん:2006/11/13(月) 01:23:06
>>987
今までどおりのプログラムは大体(←ココ重要)今までどおり動く。
そうでなければWindowsではない。
995デフォルトの名無しさん:2006/11/13(月) 01:30:17
>>992
無駄なスレ消費だけで何の役にも立ってないんだから次スレよろ
996デフォルトの名無しさん:2006/11/13(月) 09:02:33
次スレ
Win32API質問箱 Build47
ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/
997デフォルトの名無しさん:2006/11/13(月) 09:09:48
ソーセージータ
998デフォルトの名無しさん:2006/11/13(月) 09:14:56
乙ですよ 梅
999デフォルトの名無しさん:2006/11/13(月) 10:13:19
999
1000デフォルトの名無しさん :2006/11/13(月) 10:13:59
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。