Win32API質問箱 Build39

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

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
2デフォルトの名無しさん:2006/01/08(日) 07:35:11
3デフォルトの名無しさん:2006/01/08(日) 07:36:59
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/01/08(日) 07:38:19
5デフォルトの名無しさん:2006/01/08(日) 07:39:47
漏れてないよな?
6デフォルトの名無しさん:2006/01/08(日) 09:12:10
>1 乙カレー
7デフォルトの名無しさん:2006/01/08(日) 11:27:24
──
      │
      │
──


──
8デフォルトの名無しさん:2006/01/08(日) 11:28:59
  ──
│      │
│      │
  ──
│      │
│      │
  ──
9デフォルトの名無しさん:2006/01/08(日) 11:47:15

  / ̄/   /   ̄/   ̄/ /  / / ̄  / ̄   ̄/ / ̄/ / ̄/
  /  /   / / ̄   ̄/   ̄/    ̄/ / ̄/   / / ̄/.   ̄/
.   ̄     .  ̄   ̄       ̄    ̄        ̄
10デフォルトの名無しさん:2006/01/08(日) 14:11:33
所々に見えるポチポチは何ですか?
11デフォルトの名無しさん:2006/01/08(日) 14:22:18

  / ̄/   /   ̄/   ̄/ /  / / ̄  / ̄   ̄/ / ̄/ / ̄/
  /  /   / / ̄   ̄/   ̄/    ̄/ / ̄/   / / ̄/   ̄/
   ̄         ̄   ̄         ̄    ̄       ̄
12デフォルトの名無しさん:2006/01/08(日) 15:05:36
>>10
スレ違い。ちゃんと意味があるからよそで聞いてきなさい。
13デフォルトの名無しさん:2006/01/08(日) 16:01:18
常時点灯だろ
14デフォルトの名無しさん:2006/01/08(日) 16:42:20
>>9
うんこ
15デフォルトの名無しさん:2006/01/08(日) 17:50:22
>>10
液晶のドット欠けだから仕様の範囲内
16デフォルトの名無しさん:2006/01/08(日) 18:06:17
Cスレから誘導されてきました
VC6で gettimeofday はどこに入ってるのでしょうか?
一応VC98\Include以下は検索ソフトで調べました
17デフォルトの名無しさん:2006/01/08(日) 18:19:35
prototype宣言を探してるのか、関数本体を探してるのか
18デフォルトの名無しさん:2006/01/08(日) 18:19:36
Cドライブと見た
19デフォルトの名無しさん:2006/01/08(日) 18:28:47
誘導した奴は馬鹿なのかと一瞬思ったが、もしかしたらちゃんと考えがあるのか。
ついでに>>17-18の流れも分からない。

>>16
移動するなら元スレに一言書いた方がいんでない。
VC6には無いよ。このスレ的にQueryPerformanceCounter、timeGetTime辺りを使いなされ。
じゃなきゃcygwin辺りを使うとか。
2016:2006/01/08(日) 19:20:32
ありがとうございます
21デフォルトの名無しさん:2006/01/08(日) 23:06:23
>>10
死兆星
22デフォルトの名無しさん:2006/01/08(日) 23:27:15
>>10
ちみのPCディスプレイのドット抜け
23デフォルトの名無しさん:2006/01/08(日) 23:36:28
リストビューのヘッダにソート順を示したりする矢印がありますが、
これってどうやったら出せるんでしょうか?

http://sylphys.ddo.jp/upld2nd/pc2/src/1136730635910.png
上図の赤丸の部分です。
たぶんWindows XP以降の機能だと思います。
24デフォルトの名無しさん:2006/01/09(月) 00:29:07
SysHeader32
SysListView32
25デフォルトの名無しさん:2006/01/09(月) 00:49:00
Header Controlsのどこかにあると思って探してるんですが・・・
26デフォルトの名無しさん:2006/01/09(月) 00:58:00
27デフォルトの名無しさん:2006/01/09(月) 01:05:28
ありがとう。

まだ動作確認してないですが、おそらく
HDF_SORTUP HDF_SORTDOWN ですね。

Delphiで使うためのサンプル
http://www.winningcubed.de/?page=listviewsort
28デフォルトの名無しさん:2006/01/09(月) 07:57:43
ありがとう。
29デフォルトの名無しさん:2006/01/09(月) 17:12:45
APIを使用してIMEモードを制御する

--------------------------------------------------------------------------------


'標準モジュール内

Option Explicit

'iMEの状態を制御する
Public Declare Function ImmAssociateContext Lib "imm32.dll" (ByVal hwnd As Long, ByVal himc As Long) As Long

'IMEモード定数
Public Const IME_CMODE_ALPHANUMERIC = &H0
Public Const IME_CMODE_CHARCODE = &H20
Public Const IME_CMODE_KATAKANA = &H2 ' only effect under IME_CMODE_NATIVE
Public Const IME_CMODE_ROMAN = &H10


'
'対象コントロールのGotFocusイベントに記述する
Private Sub Text1_GotFocus()
Call ImmAssociateContext(Me.Text1.hwnd, IME_CMODE_ALPHANUMERIC)
End Sub

ググったら、このようなコードを見つけました。(ttp://homepage2.nifty.com/Dee/vb/tips/vb/imemodebyapi.html
変換モードを特定のセルにて「人名/地名」にしたい場合、上記をどのように変更したら良いのでしょうか?
30デフォルトの名無しさん:2006/01/09(月) 17:28:17
自分でそのAPI周りをMSDN等で調べようという気の無い者に教えることなど何も無い
31デフォルトの名無しさん:2006/01/09(月) 17:44:10
セルってことはVBAか?
なんにしてもここはコード丸投げなんてのが通るスレじゃないし、
MSDNも調べない奴に丁寧に教えるスレでもない。
半月勉強して出直してこい。
32デフォルトの名無しさん:2006/01/09(月) 20:53:13
質問です。環境は、XP、Visual C++ .NET です。
C++ 相談室から誘導されてきました。

CreateWindow にてウィンドウを作成したのですが、ウィンドウが反応しません。
具体的に言うと、[×] や [_] にマウスカーソルを当ててもへこむ様子もなく(当然クリックしても何もおきない)、
キャプションを D&D してもウィンドウが動きません。
考えられる原因はないでしょうか。

ツールバーから「閉じる」を選んだり、Alt+F4 での処理は受け付けれています。
また、[×] をクリックしたとき、WM_LBUTTONCLICK は飛んできているようです。

処理全体としては、まず不可視のメインウィンドウを作成し、
CreateWindow 終了後、そのウィンドウを親とする別の可視ウィンドウを作っています。
ためしに親ウィンドウを可視にしてみましたところ、親ウィンドウは反応しました。
が、子ウィンドウが反応しません。

ウィンドウは全てクラス化してあり、単純な処理ではないので、ソースを全て晒すのは困難です。
必要と思われる部分を晒します。

(続く)
3332:2006/01/09(月) 20:54:03
// Parent.cpp

// 親ウィンドウクラスの設定
WNDCLASSEX wc;
wc.cbSize = sizeof(wc);
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = AppProcPre;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstApp;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "hogeparent";

if (!RegisterClassEx(&wc))
return false;

// ウィンドウの構築
hWndApp = CreateWindow(wc.lpszClassName, "Parent", WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstApp, this);

if (hWndApp == NULL)
return false;

3432:2006/01/09(月) 20:54:35
// Child.cpp

// 子ウィンドウクラスの設定
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WindowProcPre;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = GetInstance();// GetInstance: インスタンスを取得するグローバル関数
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
//wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "hogechild";

if (!RegisterClassEx(&wc))
return false;

// ウィンドウの構築
hWnd = CreateWindow(wc.lpszClassName, "Child", WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
GetAppWnd(), NULL, GetInstance(), this);
// GetAppWnd: 親ウィンドウのハンドルを取得するグローバル関数

if (hWnd == NULL)
return false;

return true;
3532:2006/01/09(月) 20:55:11
これらの処理は仮想クラスで行っており、
ウィンドウプロシージャでは、GetProp/SetProp によるオブジェクトの結びつけ、
継承先クラスのウィンドウプロシージャの呼び出し、など複雑な処理を行っていますので、
全体を晒すのは困難です。
ですが、WM_CREATE の返答としての処理は何も行っておりません。
その他も、WM_DESTROY などの特殊処理を除いて、全て DefWindowProc の処理が行われています。


以上です。長々と申し訳ございませんが、よろしくお願いします。
36デフォルトの名無しさん:2006/01/09(月) 21:17:30
>>35
メッセージは?
37デフォルトの名無しさん:2006/01/09(月) 21:17:40
全部晒すのは困難ですって、固めてロダにUPするという考えは無いのか
ってかそんな、登録部分だけ出されてもわかりゃせんわ
38デフォルトの名無しさん:2006/01/09(月) 21:20:27
全てDefWindowProcの処理が行われていますって言うけど
そういう現象が起きてる以上、「全て行われて」はいないってことだよ
本当にDefWindowProcに行ってるなら、×押しゃ消えるし_押しゃ最小化される
39デフォルトの名無しさん:2006/01/09(月) 21:25:34
>>35
ふと気になったが
メッセージ処理にWM_SYSCOMMAND入れてないか?
4032:2006/01/09(月) 21:33:00
>>39
それは入ってないです。

>>38
DefWindowProc まわりを見直してみます。
解決しなかったらまとめてうpしてみます。ありがとうございました。
41デフォルトの名無しさん:2006/01/09(月) 21:41:56
exeを起動するさい、CPU一個だけ利用するようにして起動できないでしょうか?

win2000です。
42デフォルトの名無しさん:2006/01/09(月) 21:43:35
わけわからん。
4341:2006/01/09(月) 21:55:28
タスクマネージャのプロセスの右クリックの「関係の設定」で、
CPU0のみチェックがついてる状態で起動できないでしょうか?

という意味です。わかりにくくてすいません。

CPU1個しかない場合は「関係の設定」はありません。
44sage:2006/01/09(月) 21:59:12
IEコンポーネントでIHTMLTableのput_borderには、どのような値を渡せば良いのでしょうか?
VARIANTでbstrValだとは思うのですが、どうしてもうまく行きません。
開発環境はVC6です。
45デフォルトの名無しさん:2006/01/09(月) 22:07:23
>>43
できる。
SetThreadAffinityMaskかなんかで調べてみればいい
46デフォルトの名無しさん:2006/01/09(月) 22:20:26
>>45
ありがとうございます。調べてみます。
47デフォルトの名無しさん:2006/01/10(火) 01:53:31
IMEを使った処理で
WM_IME_COMPOSITIONで処理をさせずに、WM_IME_CHARでWParamの値を見ると、
なぜか、Shift-JISコードが返ります。WindowはIsUnicodeWindowでTrueを返すのに、
なぜか、UnicodeじゃなくShift-JISが返ります。
単純なプログラムを作って、同じことすると確かにWM_IME_CHARのWParamはUnicodeで
自分のプログラムがどっか悪いと思うのですが、これ以上、どこを重点的に
調べればよいか皆目検討がつきません。
どうぞ、みなさんの知恵をかしてください。
48デフォルトの名無しさん:2006/01/10(火) 03:26:58
自分のプログラム

単純なプログラム
の違いを減らしていけばいいんじゃねえの?
49デフォルトの名無しさん:2006/01/10(火) 03:50:33
テキストファイルが何行あるのか調べる方法を教えてにょ
50デフォルトの名無しさん:2006/01/10(火) 03:53:27
$ wc -l hoge.txt
51デフォルトの名無しさん:2006/01/10(火) 03:58:30
>>49
APIだけでは難しい。
#まぁ、自分で数えろと。

>>50
いくらなんでもこのスレでそれはないだろう。
52デフォルトの名無しさん:2006/01/10(火) 04:28:53
>>48
ありがとうございます。ですが、自分のプログラム100行、ライブラリ1万行以上。
で、そのライブラリはMFCのように、フレームワークの上に構築された、コントロール
でして。単純に削除できないんです。ですが、やっぱそれしかないですよね。
私もそんな気がします。


53デフォルトの名無しさん:2006/01/10(火) 04:46:50
100行って、随分小さいのな。
1万行以上ってのも、そう書く以上は2万行には満たないんだろ。
その程度ならわけないやん。
54デフォルトの名無しさん:2006/01/10(火) 09:04:58
>>53
>>47です。はぁ、やっとわかりました。ちなみに、100行ってのは、単純にRegisterClassやCreateWindow
でウィンドウを作成して、WM_CHARやWM_IME_CHARやWM_IME_COMPOSITIONを捕まえて
そのwParam, lParam値をリストボックスに表示するだけでして。
で、原因なんですけど、問題のプログラムはUnicodeウィンドウとAnsiウィンドウが混在してて、
WH_GETMESSAGEでフックをしているんですけど、その時の処理がおかしかったようです。
「SetWindowHookExWでフックをインストールすれば、そのフックプロシージャにはAnsiウィンドウのメッセージだろうが
すべて、Unicode値が渡される前提でプログラムが作られていました。」
Windowsややこしい。

55デフォルトの名無しさん:2006/01/10(火) 09:33:59
VC++6 で XP, 2000 をターゲットに、リッチテキストファイルに画像処理を加えて表示する
プログラムを作成中です。

初めての VC だったので難儀し、ほぼ9割がたできたのですが、1点だけ分からずに
困っています。

RTFファイルをメタファイルとして再生・表示まではできるのですが、これをビットマップ
(DIB, DDB いずれでも可)に変換するには、どのようにしたら良いのでしょうか。
画像処理の関係で、どうしてもビットマップにする必要があるためです。

キーワードやポインタだけでも良いので、ご存知のかたがいらっしゃったら教えていただければ助かります。
56デフォルトの名無しさん:2006/01/10(火) 09:40:36
>>55
CreateDIBSectionでHBITMAP作ってHDCに関連付けて、
そこにメタファイルを再生すれば良いんじゃない?
57デフォルトの名無しさん:2006/01/10(火) 09:43:14
ダイアログのハンドルから、そのダイアログがモーダルかどうか
知る方法はありますか?
58デフォルトの名無しさん:2006/01/10(火) 10:47:08
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win132.html
このページのEnumFontFamiliesEx()関数についてなんですが
上記ページをトレースしてコンパイルしてみた場合

BCC5.5.1ですと第3引数は(int)として定義されてるのでunsigned longは渡せないと吐いてくれます
そこでVC6.0でも同様にトレースしてみたんですが同じようなエラーを吐いてくれました
MSDNによるとコールバック関数へのアドレスを、とあるのですが・・どうすればいいでしょうかorz

参考にはならないと思いますがOSはXPhome+sp2の32bit環境です
59デフォルトの名無しさん:2006/01/10(火) 10:48:00
てめぇはキャストもできんのかカス
60デフォルトの名無しさん:2006/01/10(火) 10:48:39
いやキャストしたんですけどね
なぜかそのキャストが拒まれてしまうんですよ
61デフォルトの名無しさん:2006/01/10(火) 10:52:14
>>56

ありがとうございます。さっそく試してみます。
62デフォルトの名無しさん:2006/01/10(火) 10:54:26
よぉカス
63デフォルトの名無しさん:2006/01/10(火) 10:57:16
どこに第3引数がintと書いてあるよカス
6459:2006/01/10(火) 10:59:58
>>60
VC++6.0でやったが、適切にキャストしたら普通にできたわけだが
だからキャストもできんのかと言っている
65デフォルトの名無しさん:2006/01/10(火) 12:29:30
>>58
エラーメッセージの解釈が間違っている。
問題のソースやエラーメッセージをそのまま載せない事が間違っている。
66デフォルトの名無しさん:2006/01/10(火) 12:30:02
>>58
はて、手元のMSDNには
int CALLBACK EnumFontFamExProc(
ENUMLOGFONTEX *lpelfe, // 論理的なフォントデータ
NEWTEXTMETRICEX *lpntme, // 物理的なフォントデータ
DWORD FontType, // フォントの種類
LPARAM lParam // アプリケーション定義のデータ
);
と書いてあるのだが。
サイトを鵜呑みにするだけでなく、MSDNもきちんと読んだらどうかね。
67デフォルトの名無しさん:2006/01/10(火) 12:31:24
>>54
> Ansiウィンドウ

変なオレ用語使うな。
なんだよ、Ansiウィンドウって?
68デフォルトの名無しさん:2006/01/10(火) 12:45:17
>>66
すっげー勘違いしてる予感w
6966:2006/01/10(火) 12:57:59
>>68
あれ、>63と同じこと言ってるだけの積もりなんだが。
MSDNにはDWORDで宣言しろと書いてあるのに、件のサイトのソースにはintで宣言されているから
型が違って呼び出せないと言うエラーが出ているって話ではないのかな?
これが勘違いなら、暫くこのスレに書き込みするの止めるよ。
70デフォルトの名無しさん:2006/01/10(火) 13:02:35
>>67
>>54ですが、IsUnicodeWindowがTrueになるWindowをUnicodeウィンドウ、
もう一方をAnsiウィンドウと呼んでみただけです。
Win32のAPIもUnicode版とAnsi版の2種類があるって表現されていたもので。
71デフォルトの名無しさん:2006/01/10(火) 15:21:23
Ascii の A じゃないか?
72デフォルトの名無しさん:2006/01/10(火) 15:54:11
>>69
キミが言ってるのはコールバック関数の、EnumFontFamExProcのこと
>>58が言ってるのはEnumFontFamExProcのアドレスを渡す、EnumFontFamiliesEx関数の第3引数のことである
実際に、>>58のアドレスにあるソースをそのままコンパイルすれば、
EnumFontFamiliesExの呼び出しの所で引数の型エラーが出る
73デフォルトの名無しさん:2006/01/10(火) 15:58:34
>>71
まぁなんだ、AnsiウィンドウとかUnicodeウィンドウとか言う呼び名があるかは置いといて、
AsciiのAなわけがないんだが
MSDNにもちゃんと、

英語版:Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP
日本版:Windows NT/2000 は Unicode 版と ANSI 版を実装

ってなように、ANSIと書いてあるわけで
OK?
74デフォルトの名無しさん:2006/01/10(火) 16:16:39
こまっています・・・

Win2000SP4で権限チェックするモジュールがあります。
これは、NetUserGetLocalGroups()でログインしているユーザが所属しているローカルグループを
一覧して、「Administrators」グループに所属しているか確認しています。

ある特定の端末(数台)で、一覧されるユーザが「Users」権限のみになってしいます。

正常な端末では、「Users」と「Administrators」グループが取れます・・・

このAPIは端末の設定か何かで動作が変るものでしょうか??
75デフォルトの名無しさん:2006/01/10(火) 16:18:06
>>72
EnumFontFomExProcのアドレス渡す引数が
> BCC5.5.1ですと第3引数は(int)として定義されてるのでunsigned longは渡せないと吐いてくれます
ポインタでないって主張してるのか?
どう考えてもコールバック関数の仮引数の問題だろ?
76デフォルトの名無しさん:2006/01/10(火) 16:24:58
>>75
じゃあ、VC++6.0で仮引数をDWORDで宣言してコンパイルしてみろよ
同じエラー出るからよ

まぁ、>>58もエラーの内容を取り間違えては居ると思うんだけどな
7767(!=71):2006/01/10(火) 16:52:39
>>73
> 英語版:Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP
> 日本版:Windows NT/2000 は Unicode 版と ANSI 版を実装
> ってなように、ANSIと書いてあるわけで

その一文だと「Windows NT, Windows 2000, Windows XP」には、
Unicode 版と ANSI 版の二つを実装している、としか取れないね。

# ソースの URL も(ry
78デフォルトの名無しさん:2006/01/10(火) 17:05:06
>>77
http://www.google.com/search?q=site%3Amicrosoft.com+A%2Fsuffix+Ansi
こんなもんで納得してくれるか?
79!72:2006/01/10(火) 17:05:27
>>76
それ以前に、EnumFontFamiliesEx()の第3引数は「FONTENUMPROC」型、
と書かれているいるんだから FONTENUMPROC 型で渡すのが正当だろう。

# もちろん、引数で指定したプロシージャは、
# FONTENUMPROC 型と矛盾しない定義にすることも必要だな。
80デフォルトの名無しさん:2006/01/10(火) 17:09:37
ソースのURLもって、はっきりMSDNと書いてるのに何を言ってるのか・・・
81デフォルトの名無しさん:2006/01/10(火) 17:28:36
質問させてくだちぃ。
タイマーを作りたいと思ってます。。
ウィンドウは表示させずに数字のみを画面に表示させたいのですが、
その場合、内部で動的に画像を生成しリージョンを適用する
・・・という方法しかありませんよね?

ちょっと速度の面で不安があるのですが、
それは仕方ないと割り切るしかないでしょうか?
82デフォルトの名無しさん:2006/01/10(火) 17:59:27
NULL_BRSUH に TextOut じゃだめか?
83デフォルトの名無しさん:2006/01/10(火) 18:02:21
>>81
起動時に数字の形したリージョン作ったら?
84デフォルトの名無しさん:2006/01/10(火) 19:07:23
>>81
レイヤードウィンドウというものもある。
85デフォルトの名無しさん:2006/01/10(火) 19:09:59
ディスクトップのHDCに直接描画と言う方法も(ry
86デフォルトの名無しさん:2006/01/10(火) 19:17:29
>ディスクトップ
>ディスクトップ
>ディスクトップ
87デフォルトの名無しさん:2006/01/10(火) 20:18:11
ノー!デェィスクトァップゥ
8887:2006/01/10(火) 20:22:28
我ながらあきれた
89デフォルトの名無しさん:2006/01/10(火) 20:27:28
こやつめ
9066:2006/01/10(火) 21:30:10
判った。
私は正しくコールバック関数を定義すれば引き数は自ずとキャストの必要がないだろうと言いたかったのだが
それが伝わってなかったのだな。

>>72
ということで、>58でエラーになることは承知しているのですよ。

>>76
で、どうすればいいと言いたいの?

>>58
改めてもう一回。
サイトのソースにのみ頼らずMSDNを読めばサイトのソースの引き数の型が間違っていることが判る。
それを修正してコンパイルしてみたまえ。
91デフォルトの名無しさん:2006/01/10(火) 21:50:35
ダメだこいつ
92デフォルトの名無しさん:2006/01/10(火) 21:51:39
自分だけは間違ってないという困ったちゃんなんだよ、きっと
93デフォルトの名無しさん:2006/01/10(火) 22:40:07
>>82-85
みなさんありがddです
環境はWin2000なんで、せっかくだから
レイヤードウィンドウとやらを試してみようと思います!
これだと負荷をかけずに希望のものが作れそうです。
いい情報ありがとう〜。

ディスクトップに直接描画はキビシス...(^ω^;)
9458:2006/01/10(火) 22:46:53
皆さんすみませんでしたorz
今一度注意しながらソースを見たのですが
指摘の通りコールバック関数の引数についてのエラーだったようです。すみません
そこで以下のように修正したのですが・・・

3 番目のパラメータは
int (__stdcall *)(const tagLOGFONTA *,const tagTEXTMETRICA *,unsigned long,long)型として定義されているので
int (__stdcall *)(tagENUMLOGFONTEXA *,tagNEWTEXTMETRICEXA *,int,long) 型は渡せない

そのままですと上記のエラーを吐くのでコールバック関数の引数をDWORDとしてコンパイルしてみました

3 番目のパラメータは
int (__stdcall *)(const tagLOGFONTA *,const tagTEXTMETRICA *,unsigned long,long) 型として定義されているので
int (__stdcall *)(tagENUMLOGFONTEXA *,tagNEWTEXTMETRICEXA *,unsigned long,long) 型は渡せない

と吐かれてしまいます。モウダメダ ... (´・ω・`)
95デフォルトの名無しさん:2006/01/10(火) 22:51:51
>>94
BCC付属のヘッダが間違っているのでは?
96デフォルトの名無しさん:2006/01/10(火) 22:54:27
ううんBCCでもVC6.0でも同じ様なエラーを吐いてコンパイルが出来ませんでした・・・
97デフォルトの名無しさん:2006/01/10(火) 22:56:08
だから言ってるじゃねぇか、int、DWORDだけの問題じゃねぇって
面倒だから(FONTENUMPROC)付けて強制的にキャストしとけ
そうすりゃエラーでねぇからよ

>>95
VC++でも同じだよ
98デフォルトの名無しさん:2006/01/10(火) 23:00:24
はい、コールバック関数へのアドレスを
(FONTENUMPROC)としてキャストしたらコンパイルでき、期待された動作をするプログラムが作成できました。

いろいろとすみませんでした
99デフォルトの名無しさん:2006/01/10(火) 23:03:30
キミよりむしろ、わかっても無いのにゴタゴタ言ってたバカどもが迷惑
100デフォルトの名無しさん:2006/01/10(火) 23:15:13
どうでもいいけど、第3引数はintとか素で言ってるのすげえよな。
関数ポインタ知らないのかよ。
なんかWin32API以前の問題だな。
101デフォルトの名無しさん:2006/01/10(火) 23:18:03
>>100
コールバック関数の第3引数はあのサイトではintとなっていたからごっちゃになったんだろう。
102デフォルトの名無しさん:2006/01/10(火) 23:22:33
MSも意地でヘッダ直さんのかな
103デフォルトの名無しさん:2006/01/10(火) 23:40:29
うむ
104デフォルトの名無しさん:2006/01/11(水) 03:14:40
>>77
古いけど、MSDNのヘルプにのってるサンプルには
// Register an ANSI window class.
RegisterClassA(&AnsiWndCls);
// ANSI Window Procedure
LONG AnsiWndProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
// Unicode Window Procedure

とも書いてある。
105デフォルトの名無しさん:2006/01/11(水) 05:51:26
指定時刻にスタンバイから復帰させる方法を教えてください
106デフォルトの名無しさん:2006/01/11(水) 06:23:07
>>100
エラーにはFONTENUMPROC型とかじゃなく、int (const struct〜って出るから、
そこのintを見てintって言ってたんじゃないかね

>>105
ねぇよ
107デフォルトの名無しさん:2006/01/11(水) 06:38:13
>>105
タスクスケジューラ
wake on lan
108デフォルトの名無しさん:2006/01/11(水) 07:45:21
>>105
CreateWaitableTimer
SetWaitableTimer
109デフォルトの名無しさん:2006/01/11(水) 08:11:20
BitBltのDIB版はないでしょうか。

SetDIBitsToDeviceが近いと思いますが、
ラストオペレーションコードがありません。

StretchDIBitsで先、元のサイズを
同じにするという方法もあると思いますが、
BitDIBitsみたいなのが別にあるなら教えてください。
110デフォルトの名無しさん:2006/01/11(水) 08:24:13
DIBをHDCにSelectObjectしてBitBltすればいいじゃん?
111デフォルトの名無しさん:2006/01/11(水) 08:27:31
DIBをSelectしてじゃ語弊がありすぎるな
DIBからHBITMAP作ってSelectしてBltすればいいじゃん
112109:2006/01/11(水) 08:48:20
なるほど、分かりました。
ありがとうございます。
113デフォルトの名無しさん:2006/01/11(水) 16:36:35
質問させてください。
ネットワークに接続するnetwork.dllを作って、loadLibraryを呼び出して明示的にロードすると、
net.dllがインポートしているWS2_32.dllなんかも一緒にロードされてますよね?、
その後FreeLibraryを呼び出すとnetwork.dllのマッピングは解除されるんですが、network.dllが
使ってたWS2_32.dllなどはマッピングが解除されないまま残ってしまっています。
network.dllのマッピングが解除された時点必要なくなったDLLのマッピングをすべて解除すること
はできないのですか?
114113:2006/01/11(水) 16:39:04
三行目のnet.dll→network.dllです。もうしわけございません。。
115デフォルトの名無しさん:2006/01/11(水) 20:12:59
TCHAR関連について質問です。

tchar.hをインクルードしない場合
TCHAR , TEXTマクロはコンパイルできるんですが
_TCHAR , _TEXTマクロ ,_Tマクロ だとエラーになります

_ありでもなしでも意味は変わらないと思うのですが
どうしてこのような違いがあるのでしょうか?
116デフォルトの名無しさん:2006/01/11(水) 20:24:59
自分で定義を追跡して見るくらいしろや
117デフォルトの名無しさん:2006/01/11(水) 20:25:55
つーか、tchar.hをインクルードするしないでコンパイル可否が変わるってだけで十分想像できそうなもんだがな
118デフォルトの名無しさん:2006/01/11(水) 20:28:00
まぁ、言ってしまえば、
_ 付きのヤツはTCHAR.Hで定義されていて、
_ ついてないヤツはデフォルトでインクルードされるヘッダに定義されてるから

今度からちったぁ自分で調べろよ
あと、_ありなしで意味は変わらないと思うとか、本気で思ってるとそのうち痛い目見るぞ
言葉の意味とプログラムの意味は別物だ
119デフォルトの名無しさん:2006/01/11(水) 20:32:38
>_ありでもなしでも意味は変わらないと思うのですが

#define _true 0
とか?
120デフォルトの名無しさん:2006/01/11(水) 21:22:48
> デフォルトでインクルードされるヘッダ

いやその説明もどうかと
121デフォルトの名無しさん:2006/01/11(水) 21:24:54
typedefで型定義されてたらダメだな
122デフォルトの名無しさん:2006/01/11(水) 21:35:08
だが実際、windows.hをインクルードすれば普通に入ってるヘッダだしな
123デフォルトの名無しさん:2006/01/11(水) 23:18:53
たしかにこのスレではWindows.hをデフォルトと書きたくなるのはわかる。
124デフォルトの名無しさん:2006/01/11(水) 23:27:22
ファイルをコピーしながら、プログレスバーの値を増やしていきたいのですが、
コピーを行っていると画面が更新されません。
UpdateWindow、Sleep(1)を入れても更新されないみたいです。

ファイルをコピーしながらプログレスバーを動かすソフトでは、マルチスレッド
で実行しているのでしょうか?
マルチスレッドはよくわからないので、その他にやり方があれば教えてください。
よろしくお願いします。
125デフォルトの名無しさん:2006/01/11(水) 23:29:53
Win32APIを前提に話す以上Windows.hはデフォルトと思うのが普通だろうな
126デフォルトの名無しさん:2006/01/11(水) 23:36:38
>>124
メッセージ処理しろよ。
127デフォルトの名無しさん:2006/01/11(水) 23:39:30
>>124
ちょっとづつコピーしながら間に表示したら?
128デフォルトの名無しさん:2006/01/11(水) 23:39:52
Windows.hじゃなくてwindows.hだと言いたくなりつつ
Windowsならどっちでもアクセスできることにぐんにょり
129デフォルトの名無しさん:2006/01/11(水) 23:41:05
ファイルシステムで大文字小文字区別するのはうざすぎ
130デフォルトの名無しさん:2006/01/11(水) 23:43:17
ウニ糞を馬鹿にするなっ!
131デフォルトの名無しさん:2006/01/11(水) 23:47:39
>>129
アホですね
132デフォルトの名無しさん:2006/01/11(水) 23:51:46
>>126-127
ありがとうございます。

UpdateWindow(hWnd);
GetMessage(&msg, NULL, NULL, NULL);
TranslateMessage(&msg);
DispatchMessage(&msg);
Sleep(1);

としたら、コピーしながらでもプログレスバーは表示されました。
ウィンドウがなぜか動かなかったりしますが、また調べてみます。
133デフォルトの名無しさん:2006/01/11(水) 23:53:01
ちょwwwwwwwwww
134デフォルトの名無しさん:2006/01/11(水) 23:56:54
>ウィンドウがなぜか動かなかったりしますが
>ウィンドウがなぜか動かなかったりしますが
>ウィンドウがなぜか動かなかったりしますが
>ウィンドウがなぜか動かなかったりしますが
>ウィンドウがなぜか動かなかったりしますが
>ウィンドウがなぜか動かなかったりしますが
>ウィンドウがなぜか動かなかったりしますが
135デフォルトの名無しさん:2006/01/12(木) 00:02:40
ウィンドウズがなぜか動かなかったりします

どうすればいいですか。
136デフォルトの名無しさん:2006/01/12(木) 00:06:02
死ねばいいと思うよ
137デフォルトの名無しさん:2006/01/12(木) 00:26:48
ウィンドウが動かんぐらいなんだ
近頃の若いモンは我慢を知らん
138デフォルトの名無しさん:2006/01/12(木) 00:32:09
そうだそうだ
おれなんか×ボタンがきかん
139デフォルトの名無しさん:2006/01/12(木) 08:32:08
>>135
進捗率が変わったとき、progress bar の項目に新しい値を PBM_SETPOS で
セットするだけで表示が変わらない?
後、残り時間など変えたいなら計算して、表示個所に SetDlgItemText() して
hDlg を InvalidateRect() する。
中止ボタンがあるなら PeekMessage() で ボタンの項目(GetDltItem(hDlg, IDCANCEL)などで
取る)に LBUTTONDOWN があるか見る位で動いているけどなあ。
これらは、どこかにサンプルがあったのを真似しただけだが。
140デフォルトの名無しさん:2006/01/12(木) 09:15:52
アンカーにテラワロス
141デフォルトの名無しさん:2006/01/12(木) 10:01:13
>>124>>139

メッセージポンプすら理解していないのに、

 「Windowsプログラムが出来ます。」

とか、得意げに言ってそうだな。
142デフォルトの名無しさん:2006/01/12(木) 12:49:08
>>125
その理屈は変だろ
おまけに、デフォルトでインクルード「する」なら良いんだろうが、「される」だとなんかアレな感じがするw
143デフォルトの名無しさん:2006/01/12(木) 13:03:09
どう変だ?
144デフォルトの名無しさん:2006/01/12(木) 13:13:10
>>142
たぶんIDEのウィザードに頼りっきりなんだろうな
145デフォルトの名無しさん:2006/01/12(木) 14:18:33
>>142
でも、日本語的には「する」は能動的な行動を表すから、デフォルト
で「する」はちょっと違和感がある。
146デフォルトの名無しさん:2006/01/12(木) 14:29:15
>>145
まぁ、それは主語に何を置くかしだいじゃね?
日本語はよく主語省略されるから。
Windows.hを主語に置けば、「される」
「する」場合の主語はなんだろう、「統合開発環境が」とか、そんな類の。
いいの思いつかないけど。
まぁ、この場合、話題の中心がWindows.hだから、それを主語にするのが自然かな。

って、ことで「される」に決定だ。フォー。
147デフォルトの名無しさん:2006/01/12(木) 14:35:20
ハゲワロタ、さりげなく出てきてるがおまえ当事者だろw >Windows.h
まぁこんなので長文書いてる時点で当事者なんだろうけど
148デフォルトの名無しさん:2006/01/12(木) 15:05:15
>>147
俺が前に投稿したのはちなみに>>104だ。
149デフォルトの名無しさん:2006/01/12(木) 16:22:05
Windows.hと書く素敵マンが二人もいたと。
そもそも最初から>>118 >>125がデフォルトの意味を間違えてるんだから、以後は無意味だな。
150デフォルトの名無しさん:2006/01/12(木) 16:54:42
VC2003です。
ダイアログの上にエディットが貼りつけてあり、
そのエディットの上に(ダイアログが親の)リストボックスを
表示したり非表示にしたりするのですが、
リストボックスがマウスの操作を受けず
エディットにフォーカスが行ってしまいます。
151デフォルトの名無しさん:2006/01/12(木) 16:55:49
そうです。
152デフォルトの名無しさん:2006/01/12(木) 16:56:54
OSはWindows XP SP2、開発環境はVisual C++ 2005 Express Edition 日本語版なんですが、

PTSTR pszErrMsg;
(略)
FormatMessage(
   FORMAT_MESSAGE_ALLOCATE_BUFFER |
   FORMAT_MESSAGE_IGNORE_INSERTS |
   FORMAT_MESSAGE_FROM_SYSTEM ,
   NULL , GetLastError() , 0 ,
   pszErrMsg , 0 , NULL
);
(略)

エラーメッセージを取得することができません。デバッガで調べると、ポインタはNULLを指してました。
どこが間違っているのでしょうか。
153デフォルトの名無しさん:2006/01/12(木) 17:03:29
(LPTSTR) &pszErrMsg
154デフォルトの名無しさん:2006/01/12(木) 17:38:46
あるアプリの右クリックショートカットメニューのチェックの有無はを調べたいのですが、
ショートカットメニューのハンドルはどのようにしたら取得出来るでしょうか?

いろんなウィンドウハンドルにgetmenuしたり、メインウィンドウのメニューのハンドルと
ショートカットメニューのIDでgetmenuiteminfoを実行してみたりしましたが駄目でした。
ちなみにそのショートカットメニューからのwm_commandはTPUtilWindowクラスの
ウィンドウが受け取っているようです。

よろしくお願いします。
155152:2006/01/12(木) 17:48:50
変数の型自体を変えて、

LPTSTR lpszErrMsg;
(略)
FormatMessage(
   FORMAT_MESSAGE_ALLOCATE_BUFFER |
   FORMAT_MESSAGE_IGNORE_INSERTS |
   FORMAT_MESSAGE_FROM_SYSTEM ,
   NULL , GetLastError() , 0 , lpszErrMsg , 0 , NULL
);
(略)

こうしました。でもまだ駄目です。どうすればいいですか?
156デフォルトの名無しさん:2006/01/12(木) 17:54:15
FormatMessageでぐぐれば最初のページにサンプルが出てるからそこをよく読むといい。
処理後、LocalFreeを入れるのを忘れないように。
157デフォルトの名無しさん:2006/01/12(木) 18:03:18
>>155
アホかおまえ
>>153が何をやってるか良く見てみろ
>>153が書いたのとおまえがやったことはまったく別物だ
158デフォルトの名無しさん:2006/01/12(木) 18:03:55
>>154
日本語で質問して下さい。

>>155
釣り?
159113:2006/01/12(木) 19:34:59

(。´Д⊂) うぅ…。
160デフォルトの名無しさん:2006/01/12(木) 19:44:41
150です。
すみません。
どうすればいいのでしょうか?
161152:2006/01/12(木) 19:52:22
>>157
こうですか?

PTSTR pszErrMsg;
(略)
FormatMessage(
   FORMAT_MESSAGE_ALLOCATE_BUFFER |
   FORMAT_MESSAGE_IGNORE_INSERTS |
   FORMAT_MESSAGE_FROM_SYSTEM ,
   NULL , GetLastError() , 0 , (LPTSTR)&pszErrMsg , 0 , NULL
);
(略)

これでも駄目でした。
162デフォルトの名無しさん:2006/01/12(木) 20:10:18
>>161
君のコードはよく見てないけどヘルプにサンプル載ってるからコピーしてくれば
163デフォルトの名無しさん:2006/01/12(木) 20:12:45
>>160
オーナー度労
164152:2006/01/12(木) 20:31:41
>>162
解決しました。ありがとうございました。
165デフォルトの名無しさん:2006/01/12(木) 20:59:26
74です。自己解決しました。すれ汚しすまそ。
166デフォルトの名無しさん:2006/01/12(木) 21:52:02
>>154
できない。
あきらめろ。
167デフォルトの名無しさん:2006/01/12(木) 22:04:52
キーボードショートカットが無いアプリケーションに、キーボードショートカットをつけたいのです。
そこで別のアプリケーションからメッセージをポストしてやるのかなーと思って
似たようなアプリを調べたところ、キーコマンドをそのアプリで受け取って、コントロールしたい
アプリにWM_MOUSEMOVEなどのメッセージをポストしたりして、右クリックメニューに対処してました。
これって何かほかに良い方法ありそうな気がするのですが、アドバイス願います。
168デフォルトの名無しさん:2006/01/12(木) 22:18:53
>>167
なぜそんな気がするのですか?
169デフォルトの名無しさん:2006/01/12(木) 22:24:10
>>168
エスパーの卵だからだろ?
170デフォルトの名無しさん:2006/01/13(金) 01:10:29
editboxを一番下の行に移動させたいのですがどうしたらよいのでしょうか?
SetWindowText(GetDlgItem(IDC_EDIT1),"任意");
SDK
でやっていますのでよろしくお願いします。
SDKでエディットボックスの任意の行に移動させる関数と
今エディットボックスが持っている行数を取得する関数があるとできると思うのですが・・
MSDNライブラリGOOGLE活用しましたが、検索技術が未熟なためか見つけることができませんでした。
どなたかよろしくお願いします。
171デフォルトの名無しさん:2006/01/13(金) 01:19:03
172デフォルトの名無しさん:2006/01/13(金) 01:20:55
先越されちゃったけど、カーソル移動するならEM_SETSELね。
173デフォルトの名無しさん:2006/01/13(金) 01:23:28
何言ってんの、お前ら?
「editboxを」「移動させたい」ならMoveWindowとかSetWindowPosだろ。
174デフォルトの名無しさん:2006/01/13(金) 01:26:52
>>173
すいません。
質問の仕方が悪かったです。申し訳ないです。

>>171,172
EM_SETSELという関数を使うのですね?今から参照のサイトを見てやってみます。
175デフォルトの名無しさん:2006/01/13(金) 01:28:00
Win95の質問だめですか?
176デフォルトの名無しさん:2006/01/13(金) 01:32:21
>>175
とりあえずカキコしてみれ
177デフォルトの名無しさん:2006/01/13(金) 01:33:24
>>171,172
ありがとうございます。
まとめて
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_LINESCROLL, 0, SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_GETLINECOUNT, 0, 0));/* 行数分スクロールさせる */

を追加したらできました。
ありがとうございます。相当感謝してます。
178デフォルトの名無しさん:2006/01/13(金) 01:34:23
フォルダ状態の保存ができないぽい。98では「フォルダ状態を全てに・・」みたいな項目があったけど・・
179デフォルトの名無しさん:2006/01/13(金) 01:42:54
>>177
なぜ同じ GetDlgItem() を二回も発行するのだ
無駄はいかんぞ
180デフォルトの名無しさん:2006/01/13(金) 01:49:42
>>179

HWND hWnd = GetDlgItem(hWnd,IDC_EDIT1);
としてコードを短くしたほうがいいですかね?
ふと思ったのですが
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_LINESCROLL, 0, SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_GETLINECOUNT, 0, 0));/

教えてもらったサイトにある


HWND hEdit = GetDlgItem(hWnd, IDC_EDIT);
int nLines = SendMessage(hEdit, EM_GETLINECOUNT, 0, 0);/* エディットボックスの行数を取得 */
SendMessage(hEdit, EM_LINESCROLL, 0, nLines);/* 行数分スクロールさせる */
とでは
どちらが処理を軽くできるでしょうか?
181180:2006/01/13(金) 01:50:56
>HWND hWnd = GetDlgItem(hWnd,IDC_EDIT1);
すいません。hEditでした。
182デフォルトの名無しさん:2006/01/13(金) 01:57:12
>>180
通常2番目だろうね。
コンパイラには、GetDlgItem(hWnd, IDC_EDIT)が2回同じ値を返すかどうかは
予測できない(つまり律儀に2回関数を呼びだす)けれども、変数は前後を見て
使われていなければレジスタに割り当てたりできるし。APIの呼び出しは結構
オーバーヘッドでかい。ただ、そこまで気にする内容かどうかは謎。
183デフォルトの名無しさん:2006/01/13(金) 01:58:42
SendDlgItemMessageってのもあるわけだが。
184デフォルトの名無しさん:2006/01/13(金) 02:00:29
>>182
回答ありがとうございます。
二回呼び出すのをやめ
>>179さんの注意どおり無駄を省くことにします。
ありがとうございました。
185178=175:2006/01/13(金) 02:07:50
ウィンドウズ95で>>178はできないですか、というかすれ違いなら止めよ
186デフォルトの名無しさん:2006/01/13(金) 02:15:02
>>185
スレ違い
187154:2006/01/13(金) 03:41:48
すいません、自己解決しました。
やっとすっきりした・・・
188デフォルトの名無しさん:2006/01/13(金) 14:53:44
質問です。
WinMain()のHINSTANCEを渡せば、いつでもどこでも
メインウィンドウのハンドルを得るAPIがあったと思うのですが、
ど忘れしてしまいました orz

HWND hwMain;
hwMain = GetHWND(hInstance);

なんかこんな感じのAPIだったと思うのですが、
どなたかご存知ありませんか?
ググりまくっても出てこないよ。 (T_T)
189デフォルトの名無しさん:2006/01/13(金) 16:15:30
>>188
まず、「メインウィンドウ」から説明して貰おうか?
190188:2006/01/13(金) 16:38:57
あ、ごめ。えーと、親ウィンドウのつもりでした m(__)m
ちなみにhInstanceはWinMain()の第一引数です。

確かこんな関数があったと思うんだけどなぁ。
191デフォルトの名無しさん:2006/01/13(金) 16:41:31
GetParent?

でも、HINSTANCE関係ないしなー
192188:2006/01/13(金) 16:46:11
>>191
ググるとそれがよく引っかかりました orz

確かどっかのサイトで見たと思うんですが・・。
193デフォルトの名無しさん:2006/01/13(金) 16:51:43
スレ違いかもしれませんが、ご存知の方教えてください。

マウスのプロパティで、ポインタのデザインを変更する
事ができますが(3Dブロンズや3Dモノクロなど)、これを
変更するためのAPIとかって存在するのでしょうか?
194デフォルトの名無しさん:2006/01/13(金) 16:52:45
レジスタ弄るAPIじゃね?
195デフォルトの名無しさん:2006/01/13(金) 16:54:39
ウィンドウハンドル使ってインスタンスハンドル取得するのは知ってるが
その逆なんて知らないなぁ

そもそも自プログラムならメインウィンドウのハンドルが分からないわけないし、
他プログラムのウィンドウならFindWindowで探すもんだと思うしなぁ
196デフォルトの名無しさん:2006/01/13(金) 16:55:22
>>194
レジスタ弄ってどうするよバカ
197デフォルトの名無しさん:2006/01/13(金) 17:14:44
>>194
レジストリのどこを変更すれば設定が変わるかってのは
わかってるんですが、項目が多くて一気にできないものかと。
198188:2006/01/13(金) 17:21:55
>>195
ありゃ、私が見たのはそっちだったのかなぁ。
うーん。もうちょっとググってみまっす。。
199デフォルトの名無しさん:2006/01/13(金) 17:23:27
目的を明確にすればそんなAPIが必要なのかわかるんじゃないかな。
200デフォルトの名無しさん:2006/01/13(金) 17:42:36
>>190
> 親ウィンドウのつもりでした m(__)m

何から見て親なんだ?
そもそも、一つのプロセスには複数のトップレベルウィンドウを作れるわけだが、
複数の場合はZオーダーがトップのものを取得すればいいのか?
# ウィンドウがない場合もあるが、これは無効ハンドルでいいだろう。
201デフォルトの名無しさん:2006/01/13(金) 19:13:24
悪いがメインで十分通じる
202デフォルトの名無しさん:2006/01/13(金) 19:23:07
バカだからだな。
203デフォルトの名無しさん:2006/01/13(金) 19:30:58
>>202
ならばさっさと代替の言葉を示せよ、読解力のない揚げ足取り君w
204デフォルトの名無しさん:2006/01/13(金) 20:17:29
GetModule()
205デフォルトの名無しさん:2006/01/13(金) 20:21:17
痛いところ突かれたからってそうムキになるなよw
206デフォルトの名無しさん:2006/01/13(金) 20:38:34
さすがバカじゃ無い方、1時間も悩んで思いつかなかったのねw
つか202の時点で失笑ものだが
207デフォルトの名無しさん:2006/01/13(金) 22:11:34
スレッド関数内で、処理中である旨のメッセージのウィンドウを表示させたいのですが、
以下のように、ウィンドウ生成→ウェイト→処理→ウィンドウ破棄という処理を書いても、
実際にはメッセージのウィンドウが表示すらされません。
また、Sleep値を大きくしても効果がありませんでした。
原因を宜しければ教えてください。
------------------------------------------------------------------------------
HINSTANCE AppInstance; // インスタンスハンドル
HWND hWnd; // 親ウィンドウのハンドル

DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
HWND message_window;
RECT rect;
GetClientRect(::hWnd,&rect);
message_window = CreateWindowEx(0,"STATIC","処理中です",WS_DLGFRAME | WS_CHILD | WS_VISIBLE,
(rect.right+rect.left)/2-100,(rect.bottom+rect.top)/2,200,36,::hWnd,0,::AppInstance,NULL);
Sleep(500); // ちょっとウェイトする
/* (処理) */
DestroyWindow(message_window);
ExitThread(TRUE);
}
------------------------------------------------------------------------------
208デフォルトの名無しさん:2006/01/13(金) 22:26:44
Sleep(500)の前後にUpdateWindow(message_window)入れてみれ
209デフォルトの名無しさん:2006/01/13(金) 22:28:01
書き間違いスマソ。
Sleep(500)の前後にUpdateWindow(message_window)入れてみれ
        ↓
Sleep(500)の前にUpdateWindow(message_window)入れてみれ
210デフォルトの名無しさん:2006/01/13(金) 22:44:11
どうやったら「前に」と「前後」を書き間違えるんだよw
手書きじゃあるまいにw
211デフォルトの名無しさん:2006/01/13(金) 22:54:09
>>210
別にいいじゃん・・・
気にしてるんだからほっといてよw
212デフォルトの名無しさん:2006/01/13(金) 23:16:41
タスクバーにポインタ持って行くと、ウィンドウタイトルがポップアップしますが、
文字列が長いと、80字位に切り詰まるようです。

これって可変なんでしょうか?可変なら最大文字数を取得する方法ってありますか??
213デフォルトの名無しさん:2006/01/13(金) 23:17:36
固定
214デフォルトの名無しさん:2006/01/13(金) 23:35:42
セマフォとミューテックス以外で
スレッド専用に特化した高速な同期化オブジェクトってありますか?
215デフォルトの名無しさん:2006/01/13(金) 23:44:20
クリティカルセクション
216デフォルトの名無しさん:2006/01/14(土) 00:19:40
サンクス、思い出した
217デフォルトの名無しさん:2006/01/14(土) 01:31:57
質問させていただきます。
SDKでチャットプログラム作ってるんですがすっげー重いです。
というか明らかにソースコードがおかしいです。
動作させてわかりました。
ソケットにデータが入ってきたかチェックするかをdefaultのところに記述していました。
すると動作がおかしくなってしまいました。
実際どんな感じになっているかと言うと
http://www.geocities.jp/poruporuchan2000/main.txt
です。ソケットについては別途宣言しています。
http://www.geocities.jp/poruporuchan2000/setup_client.txt
mixiで相談しましたが、思ったような回答が得られていないため投稿しました。
よろしくお願いします。
218デフォルトの名無しさん:2006/01/14(土) 01:33:20
>>217
肝心の「どのように動作がおかしいのか」を書かなくちゃ意味がないと思うが
219デフォルトの名無しさん:2006/01/14(土) 01:35:17
>>218
すいません。
起動すると極端に重くなってコンパイルしたEXEファイルのウインドウが真っ白あるいは
デスクトップの画面をそのまま表示している状態です。

プロセスがいつの間にか100%になっていたりします。
220デフォルトの名無しさん:2006/01/14(土) 01:36:41
動作はともかくとして、気分の悪くなるソースだな
221デフォルトの名無しさん:2006/01/14(土) 01:39:20
>>220
エラー処理はまだ書いていません。
勉強がてら書いているのでできればアドバイスをもらえたらと思います。
222デフォルトの名無しさん:2006/01/14(土) 01:40:29
完全にWM_PAINTをポイ捨てしてるように見えるんだが。
223デフォルトの名無しさん:2006/01/14(土) 01:43:03
>>222
WM_PAINTはウインドウの再描画を行うやつだったと思いますが、それを応用してソケットにデータインしたときの処理
を行えるということでしょうか?
224デフォルトの名無しさん:2006/01/14(土) 01:45:23
defaultの所をタイマーで書き直したら?
225デフォルトの名無しさん:2006/01/14(土) 01:47:55
>>223
defaultでFALSEを返したら?
226デフォルトの名無しさん:2006/01/14(土) 01:48:13
>>224
mixiで質問したときもそのように回答をいただきました。
そのタイマーというのがよく理解できていないため、どの用に記述していいのかよくわかっていません。
MSDNライブラリで見てみたのですが書式は理解できました。
ですがどのようにそれを使えばいいのかわかりません。
できればご教授お願いします。
227デフォルトの名無しさん:2006/01/14(土) 01:50:50
>>225
FALSEに書き直して実行したところ今度は別途用意したソケットで
WSACleanup();
でエラーが出てしまいました。
エラーがでたというのはコンパイルできたのですがデバック処理中にエラーがでたということです。
228デフォルトの名無しさん:2006/01/14(土) 01:52:14
>>226
たんにSetTimerした後にWM_TIMERを受け取って処理するか
コールバック登録するかってだけだろうに。

PeekMessageの方がいいと思うがな。
229デフォルトの名無しさん:2006/01/14(土) 01:55:16
>>228
すいません。有益なアドバイスのようですが
理解ができないので調べて理解できるように勤めます。
230デフォルトの名無しさん:2006/01/14(土) 02:30:34
調べてみた結果
SetTimerでWM_TIMERを生成する間隔を決めて
WM_TIMERが呼び出されたときソケットにデータが入っているかチェックをしたら?という意味だと個人的に解釈しました。
間違い等あれば指摘よろしくお願いします。
調べた結果を元にしてソースを変更してみましたが思ったように前のプログラムに比べて軽快な動作が得られません。
fd_set fds; //fds監視リストを作成
//メッセージの種類に応じて処理を分岐させます。
switch (message)
{
case WM_CREATE:
SetTimer(hWnd,NULL,300,NULL);
case WM_TIMER:
FD_ZERO(&fds); /* 監視対象のディスクリプタ一覧をゼロクリア */
FD_SET(soc,&fds); /* リスニングソケットを監視対象に追加 */
select(soc + 1,&fds,NULL,NULL,NULL);

if(FD_ISSET(soc,&fds)){
//メモリの初期化と文字の表示
memset(sBuff3, 0, sizeof(sBuff3));
recv(soc, sBuff3, sizeof(sBuff3), 0);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff3);
return 0;
}

return FALSE;
case WM_COMMAND:
//以下続く
どう訂正したらいいのかよろしくお願いします。
231デフォルトの名無しさん:2006/01/14(土) 02:34:11
>>230
breakぐらいしろと

ぶっちゃけCとWindowsプログラミングの基礎からやり直せ
232デフォルトの名無しさん:2006/01/14(土) 02:35:16
>>231
今基礎をやっています。
233デフォルトの名無しさん:2006/01/14(土) 02:36:19
SetTimerの第二引数ってNULLなんか渡していいのか?
234デフォルトの名無しさん:2006/01/14(土) 02:36:45
selectつかうならタイマーいらんと思うが。
235デフォルトの名無しさん:2006/01/14(土) 02:39:24
>>233
第二因数は大麻の識別子ですよね?やはりTIME.hファイルを作って設定しなければならないでしょうか?

>>234
わたしもそうおもって作っていましたが、思ったような動作が得られず困ってしまい、この板に頼った次第です。
236デフォルトの名無しさん:2006/01/14(土) 02:42:05
selectの説明読んだ?timeval。
ほかに非同期IOとかもありま。
237デフォルトの名無しさん:2006/01/14(土) 02:43:15
#define TIMER_ID1 1
でいいと思うお

WM_TIMERが来たときにはwParamに識別子が入ってるのでそれで分別するべきだとおもうお
個人的な意見だがコールバックにした方がいいと思うお
238デフォルトの名無しさん:2006/01/14(土) 02:45:51
× でいいと思うお
○ でいいと思う

× それで分別するべきだとおもうお
○ それで分別するべきだとおもう

× コールバックにした方がいいと思うお
○ コールバックにした方がいいと思う
239デフォルトの名無しさん:2006/01/14(土) 02:46:55
>>236
セレクトの説明UNIXのやつも同じだと思い、読みました。
ですが記憶があやふやになってしまっているところもあります。すみません。
読み直します。

>>237
親切に設定例まで書いていただきありがとうございます。
wParamで分岐ですね!
unitで分岐していたのでいつまでたってもTIMERを拾わなかったのでしょうか・・
240デフォルトの名無しさん:2006/01/14(土) 02:47:17
また大漁だな
241デフォルトの名無しさん:2006/01/14(土) 03:00:36
・・・やはり思ったように行きません。
ちょっと挫折です・・
242デフォルトの名無しさん:2006/01/14(土) 03:08:53
SetTimer(hWnd,TIMER_ID1,300,NULL);
じゃないのか?
243デフォルトの名無しさん:2006/01/14(土) 03:14:16
>>242
回答ありがとうございます。
WM_CREATE:
 SetTimer(hWnd,TIMER_ID1,300,NULL);

break;

WM_TIMER:

FD_ZERO(&fds); /* 監視対象のディスクリプタ一覧をゼロクリア */
FD_SET(soc,&fds); /* リスニングソケットを監視対象に追加 */
select(soc + 1,&fds,NULL,NULL,NULL);

if(FD_ISSET(soc,&fds)){
//メモリの初期化と文字の表示
memset(sBuff3, 0, sizeof(sBuff3));
recv(soc, sBuff3, sizeof(sBuff3), 0);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff3);
return 0;
}

break;

としているのですが・・デバックでブレークポイントを作成してみているのですが・・switch(UNIT)で全部飛び越して一番下の行まで一気に飛んでいます・・もう挫折です。
244デフォルトの名無しさん:2006/01/14(土) 03:14:59
プラットフォームSDKのサンプルにソケットの非同期IOの例あるからそれ見とけ。
245デフォルトの名無しさん:2006/01/14(土) 03:18:48
>>244
アドバイスありがとうございます。
サンプルがあるのですね。情報ありがとうございます。
246デフォルトの名無しさん:2006/01/14(土) 03:27:20
やっぱわかんないです。
一日休んで頭すっきりしたところでもう一度取り組んでみようと思います。
そのときまたわからないことがあれば質問させていただきます。
今日は本当にありがとうございました。
247デフォルトの名無しさん:2006/01/14(土) 03:45:25
やっぱわかんないです ><;
248デフォルトの名無しさん:2006/01/14(土) 04:10:35
>>243
猫C見るかKillTimerとSetTimerについて調べれ
249デフォルトの名無しさん:2006/01/14(土) 04:18:07
>>217
メッセージループがないけど
250デフォルトの名無しさん:2006/01/14(土) 04:18:57
>>248
KillTimerもちゃんとウインドウ消すときの処理に加えてたんですけどね。
251デフォルトの名無しさん:2006/01/14(土) 04:20:23
>>249
あたりまえでしょ!そんなこと!
252デフォルトの名無しさん:2006/01/14(土) 04:20:33
>>249
え?おまえなにいってんの?

おれにはその短文では>>217が理解できると思わない。
253デフォルトの名無しさん:2006/01/14(土) 04:24:35
>>249
俺もそれは気付いていたけど
叩かれそうだから迷ってたんだよ。 テイウカ、 ツッコミドコロ マンサイダヨネ

底引き網漁・・・
254デフォルトの名無しさん:2006/01/14(土) 04:26:08
困ってることは分かるが何も分かっていないな、ということしか分からない。
255デフォルトの名無しさん:2006/01/14(土) 04:27:06
>>253
突っ込みどころ満載だからこのスレの意味があるってもんだ!!

修正したファイルをうpしてもいいがそれじゃ>>217
の勉強にならないもんな
256デフォルトの名無しさん:2006/01/14(土) 04:29:27
>>250
それじゃだめ。毎回KillしてSetしなきゃ。
257デフォルトの名無しさん:2006/01/14(土) 04:30:32
>>256
オレの無知さが明るみに出たな。
畜生。オレだって>>217レベルだお・・
258デフォルトの名無しさん:2006/01/14(土) 04:50:02
DialogBoxだからメッセージループは不要だろ…
CreateDialogなら必要だけどさ。
259デフォルトの名無しさん:2006/01/14(土) 05:08:29
おまえら自分の答えられそうな事にしか反応出来ないんだな
馬鹿の相手するとスレ全体が馬鹿っぽくなってくる

もう少しマシな話題にしてくれ
260デフォルトの名無しさん:2006/01/14(土) 05:13:22
じゃお前がましな回答してやってくれよ
氏のためになるようにな。
261デフォルトの名無しさん:2006/01/14(土) 05:30:46
COMスレが無いみたいなのでこちらにお邪魔します。
IFoo *pFoo;
pBar->SomeMethods(&pFoo); // IBar* pBar; であり、インスタンス作成済
// pFooで作業
pFoo->Release(); // ???
という状況です。pFoo->Release()するべきなのか、という質問です。

SomeMethodsのドキュメントに「pFoo使用後はRelease()を呼び出せ」と明記
してある場合はいいのですが、何も書いてないものもあるのです。
感覚的にはRelease()した方が良さげですが、一般的にこう考えるべきなのでしょうか?

// でも他メソッドではAddRef()を呼べと明示するものもあって、心に迷いが生じました。
// なのにサンプルではAddRef()なしでRelease()を呼出していて、それで動作しているので混乱中

AddRef()、Release()の戻り値もイマイチ信用できないと聞き、手詰りになってしまいました。
詳しい方、どうぞ御教示下され
262261:2006/01/14(土) 05:34:11
書き忘れました。環境は WinXP SP2 + VC7 + Platform SDKです。
(DirectShowまわり)
263207:2006/01/14(土) 05:46:45
>>208
即レスありがとうございました。
WS_VISIBLEを指定していても、
WM_PAINTを送ってやらないまでは表示はされないんですね。
264デフォルトの名無しさん:2006/01/14(土) 05:46:46
SomeMethods(&pFoo)でインスタンス作成したんなら
インスタンス作成した回数ぶんRelease()でいいんじゃない?

あとはエロくて詳しい人に任せます。
265デフォルトの名無しさん:2006/01/14(土) 05:51:59
普通はSomeMethods内でIFoo->AddRefして返してると思う。なんでRelaese呼び出ししてOK。
266デフォルトの名無しさん:2006/01/14(土) 05:58:28
IUnknownの実装でコンストラクタで参照数1にする例と0にする例があるな。
267デフォルトの名無しさん:2006/01/14(土) 06:43:26
標準ハンドルの親プロセスから子プロセスへの継承についてです。
ファイルやパイプのハンドルは特に問題なく継承できます。
しかし、コンソールのハンドルについては、子プロセスがGUIアプリの場合、継承ができないみたいなのですが?
もちろん子プロセスがCUIアプリの場合は継承できます。
GUIアプリにももちろんハンドルの値そのものは渡っているのですが、GUIアプリがそのハンドルを使おうとしてもエラーで使えません。
コンソールのハンドルをGUIアプリに継承させて使わせることができる方法をご存じの方、お教えください。
また、もし無理ならなぜこういう仕様になっているのかお教えください。
268デフォルトの名無しさん:2006/01/14(土) 07:23:07
GUIだから
269デフォルトの名無しさん:2006/01/14(土) 07:43:41
コンソールウィンドウの表示
デバッグ時に引数の値などをチェックする時にMFCならTRACE、Win32ならOutputDebugStringなどを使うでしょうがprintfのような入出力関数を使いたい場合はコンソールウィンドウを表示すれば出来ます。


#include <io.h>
#include <fcntl.h>

void OpenConsole()
{
int hCrt, i;
FILE *hf;

AllocConsole();
hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
hf = _fdopen(hCrt, "w");
*stdout = *hf;
i = setvbuf(stdout, NULL, _IONBF, 0);
}

終了時に解放してください。


FreeConsole();

結構重宝すると思います。
270デフォルトの名無しさん:2006/01/14(土) 07:45:34
http://www.geocities.jp/monalipse/c/api/Console.html
コンソールプログラムを起動したときにWindowsが
コンソール・ウィンドウを自動的に用意することからわかるように、
Windowsは実行ファイルを見てコンソールプログラムかどうかを識別している。

この情報は、実行ファイルのヘッダー部の特定のフィールドに埋め込まれている。
このフィールドの値が定数WINDOWS_GUI(=2)ならGUIプログラム、
WINDOWS_CUI(=3)ならコンソールプログラムになる。

コンパイラのオプション指定によってどちらかを設定するのである。

上記のオプションを指定するかどうかにかかわらず、C/C++コンパイラが
ソースコードから生成するマシン語は同じものである。
しかし、プログラムの開始位置がmain関数か、WinMain関数かという違いが生じる

271デフォルトの名無しさん:2006/01/14(土) 07:47:58
BOOL WriteConsoleEx(LPCSTR buf)
{
// スクリーン・バッファのハンドルを取得
HANDLE hOut = CreateFile( "CONOUT$", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, 0);
if( hOut != INVALID_HANDLE_VALUE){
DWORD sz;
WriteFile( hOut, buf, strlen(buf), &sz, NULL);
CloseHandle( hOut);
return TRUE;
}else return FALSE;
}
バッファのハンドルを取得するには、入力の場合に「CONIN$」、
出力の場合に「CONOUT$」という特殊なファイル名を指定して、
ファイル作成用APIであるCreateFileを呼び出せばよい
ファイル名以外の引数は、上記のソースの指定で固定と考えてかまわない。
こうして得たスクリーン・バッファのハンドルに対して、
ファイル書き込み用のWriteFileを呼び出すことで、コンソールに対して出力することができる
同様に、ユーザーが入力した文字列を取得するには、入力バッファに対してReadFileを呼びだせばよい
272デフォルトの名無しさん:2006/01/14(土) 07:48:40
SetStdHandleで標準入出力を割り当てることはできるが、
printf等の関数で出力できるかどうかはライブラリの実装次第である

// スクリーン・バッファのハンドルを取得
HANDLE hOut = CreateFile( "CONOUT$", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, 0);
BOOL ret = SetStdHandle( STD_OUTPUT_HANDLE, hOut);
printf("出力テスト");
273デフォルトの名無しさん:2006/01/14(土) 07:59:18
274デフォルトの名無しさん:2006/01/14(土) 09:22:52
#ifndef NDEBUG
int main()
{
    //これらは必要なら。
    HINSTANCE hinst = GetModuleHandle(0);
    int nCmdShow = SW_SHOWDEFAULT;
    PSTR pszCmdLine = PathGetArgsA(GetCommandLineA());
#else
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PSTR pszCmdLine, int nCmdShow)
{
#endif

まあコンソールがなくともATLTRACE2使えばprintfと同じように書式付でデバッグ出力できるし、
C++なら自分でデバッグ出力するストリームを書く方法もある。
275デフォルトの名無しさん:2006/01/14(土) 10:11:38
>*stdout = *hf;
276デフォルトの名無しさん:2006/01/14(土) 10:23:21
やるならfreopenとかだよな。
277デフォルトの名無しさん:2006/01/14(土) 10:48:37
>>269
m9(^Д^)プギャー
278デフォルトの名無しさん:2006/01/14(土) 13:08:32
>>277
277は269の書くことが理解できないほどのゴミ
279デフォルトの名無しさん:2006/01/14(土) 13:17:16
>>277-278
小学生みたいな煽り合いはよそでやりなさい
280デフォルトの名無しさん:2006/01/14(土) 13:47:30
CD/DVDからファイル読み出すときに何倍速でドライブから読み出すかって
どうやって変更したらいいの?
標準のファイルI/O APIではそれらしいのなかったよ・・
281デフォルトの名無しさん:2006/01/14(土) 14:09:02
WindowsのAPIでそんなことができるのか…
282デフォルトの名無しさん:2006/01/14(土) 14:22:02
DeviceIoControl経由で直接ATAPIなりのコマンド投げるんでそ。
ファイルI/Oなんかで探してるヌルいヤシには無理かと。
283デフォルトの名無しさん:2006/01/14(土) 14:23:13
うちのマシンのCD-ROMドライブは8倍速固定ドライブなだ
284デフォルトの名無しさん:2006/01/14(土) 14:25:37
俺はヌルいヤシだったのか ○| ̄|_
285デフォルトの名無しさん:2006/01/14(土) 14:36:21
気持ちよさそうなヤツめ
286デフォルトの名無しさん:2006/01/14(土) 14:50:58
ぬるぽ
287デフォルトの名無しさん:2006/01/14(土) 14:55:51
びらびらがぐちょぐちょのぬるぬるでほかほか
288デフォルトの名無しさん:2006/01/14(土) 15:04:02
  =≡= ∧_∧    ガッ
   /   ( ・∀・) /
 〆   ┌  |    つ 人
  ||  γ ⌒ヽヽコノ   <  >_∧∩
  || .|   |:::|∪〓  V`Д´)/ ←>>286
./|\人 _.ノノ _||_.      /
289280:2006/01/14(土) 16:21:23
なるほどDeviceIoControlってのがあるのか
もうちょっと詳しく頼む
ATAPIコマンド直接ってことはある程度のファイルシステムを
実装する必要あるってこと?
それは大変だ・・
もうちょっと簡単にやる方法ないかな?
290デフォルトの名無しさん:2006/01/14(土) 16:24:01
ねーよデブ。
291デフォルトの名無しさん:2006/01/14(土) 16:41:26
ファイルシステムは関係ないっつーの。
デバイス(ドライブ)に対して動作を制御するための命令を出すの。

そういう命令が実際あるかどうかは知らないし、そこに関しては
WIN32API外の話だ。
292280:2006/01/14(土) 17:13:01
じゃあファイルの先頭セクタがどこかどうやって知ればいいの?
293デフォルトの名無しさん:2006/01/14(土) 17:14:46
>>292
おまいの最初の質問はそういう話じゃなかったろ?
294280:2006/01/14(土) 17:22:41
ATAPIコマンドで直接制御しないといけないんでしょ?
そうなるとセクタ番号わからないとできないはず
それとも何倍速かだけATAPIコマンドで指定して
ファイルの読み込み事態は普通のReadFileでやってもいいの?
295デフォルトの名無しさん:2006/01/14(土) 17:41:35
自分で読み書きするなら、単にウェイト入れてコントロールすればいいじゃん。

今時のドライブは「何倍速」とかいうコントロールは出来ないと思う。
そもそもドライブ自体が可変速で動いてるし。
296デフォルトの名無しさん:2006/01/14(土) 18:14:27
>>269
void OpenConsole()
{
AllocConsole();
freopen("CONOUT$", "w", stdout);
}
で十分。逝って良し。
297デフォルトの名無しさん:2006/01/14(土) 18:49:08
>>295
出来ないわけないだろ。
CD2WAVとか使ってみろ。
298280:2006/01/14(土) 18:51:22
そうかな
普通CD/DVDからファイル読み出したら最高速でドライブ動くみたいで
うるさいでしょ?それを避けたいのよ
CD/DVDプレイヤーとかだとうるさくならないからできると思うんだけど
299デフォルトの名無しさん:2006/01/14(土) 19:10:37
>>298
そういうソフトなら既にあるな。
http://cdromtool.sourceforge.net/
ソースも公開されているし。
300デフォルトの名無しさん:2006/01/14(土) 19:53:09
うるさいなら8倍速以下のドライブ使えばいいじゃない。
301280:2006/01/14(土) 19:53:53
おおサンキュウサンキュウ
302デフォルトの名無しさん:2006/01/14(土) 19:58:43
>>298
ただのデータ読み出しと音楽/動画再生を一緒にすんじゃね
303デフォルトの名無しさん:2006/01/14(土) 21:34:03
指定したソフトから特定のAPIが呼ばれたときにその処理をすり替える、
つまりAPIをフックするプログラムを作りたいんですが、
参考になるソースとかはないでしょうか。
304デフォルトの名無しさん:2006/01/14(土) 21:45:05
画像ファイルをスライドショーするフラッシュファイル(swf)を作成する
アプリを作りたいのですが、フラッシュファイル(.swf)を書き出すAPI・仕様とか、
サンプルプログラムがあったらURLを教えてください。
(QuickTime APIで可能でしたでしょうか?)
ご教授よろしくおねがいします
305デフォルトの名無しさん:2006/01/14(土) 21:49:10
>>303
つ[listexp]
306デフォルトの名無しさん:2006/01/14(土) 22:03:57
>>305
凄い!こんな便利なものがあったなんて。
ありがとうございました。
307280:2006/01/14(土) 22:18:42
>>298
>ただのデータ読み出しと音楽/動画再生を一緒にすんじゃね
どうして?
ファイルI/Oに関しては同じではないの?
何か異なるの?
おれ別に音楽/動画再生するわけじゃないけど
同じような感じでストリーミング処理を実現したいんだ
今教えてもらったcdromtoolのソース読んでる
SCSIコマンド直接投げてるっぽいとこがある
ATAはまた別かな?
308デフォルトの名無しさん:2006/01/14(土) 22:48:33
ATAPIってSCSIコマンドをIDEバス上で投げてるわけだが
309デフォルトの名無しさん:2006/01/14(土) 23:00:21
>>298
CDの音楽の再生には遅くても問題ないから遅くなり、従って音も静かになる。
そもそも音楽の再生されるときの早さが1倍。

逆にファイルなどのデータを読み出すのは(静穏性などを考えなければ)早いほうが良いに決まっている。
だからこそ速度が上がることがCD/DVDドライブの性能向上とされた。
310280:2006/01/14(土) 23:15:22
>>308
なるほどそういうことか
サンキュウサンキュウ
311280:2006/01/14(土) 23:19:24
>>309
つまり295が言うように自前でwaitでも入れてゆっくり読めば
ディスクの回転は自然と落ちると言ってるわけ?
でもそれやったけどそうならないから質問したんだ
312デフォルトの名無しさん:2006/01/14(土) 23:20:19
わかったから、もう黙って作れ。
313デフォルトの名無しさん:2006/01/14(土) 23:48:03
>>311
どうしたらそう読める
314280:2006/01/15(日) 00:03:58
>>313
ここ
>CDの音楽の再生には遅くても問題ないから遅くなり、従って音も静かになる。
「遅くなり」ってのは自然とディスクの回転が遅くなるって意味じゃないの?

>>312もう黙ってようと思ってたんだけどごめんね
315デフォルトの名無しさん:2006/01/15(日) 00:08:22
>>314
「自然と」というがおそらくは音楽CDだけが1倍で動くように作られていると思う。
311のように自前でwaitを入れても、少しの時間全力で動くのと少しの時間止まるのが繰り返されるだけだと思う。
316デフォルトの名無しさん:2006/01/15(日) 00:34:31
CD読んでる間HDDをガリガリ言わせれば、CDの音は気にならない。
317デフォルトの名無しさん:2006/01/15(日) 00:39:02
CD読んでる間ガリガリ言えば、CDの音は気にならない。
318デフォルトの名無しさん:2006/01/15(日) 00:59:19
>>317
280は自分のPCのじゃないCDを静かに動かしてみたいと思ってんじゃねーの
319261:2006/01/15(日) 01:34:01
>>264-266
お返事ありがとうございました。
やはりRelease()を呼ぶべきですよね。
すっきりしました。どうもありがとうございました
320デフォルトの名無しさん:2006/01/15(日) 03:12:23
321デフォルトの名無しさん:2006/01/15(日) 04:24:38
>>303
そういうことをしたくなったときに買う本が『Advanced Windows』
322デフォルトの名無しさん:2006/01/15(日) 09:37:27
質問させていただきます。
SDKでスレッドを立ててその中で非同期通信を設定しました。
データが入ってきたときにエディットボックスに書き込むように書いたつもりですがエラーが出ます。
コンパイルしています...
main.cpp
c:\documents and settings\taka\my documents\visual studio projects\受信\main.cpp(91) : error C2664: 'GetDlgItem' : 1 番目の引数を 'LPVOID' から 'HWND' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
c:\documents and settings\taka\my documents\visual studio projects\受信\main.cpp(96) : error C2664: 'GetDlgItem' : 1 番目の引数を 'LPVOID' から 'HWND' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
c:\documents and settings\taka\my documents\visual studio projects\受信\main.cpp(120) : error C2664: 'GetDlgItem' : 1 番目の引数を 'LPVOID' から 'HWND' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
エラーからわかると思いますが
hThread1=CreateThread(NULL,0,fnThread1,hWnd,0,NULL); /* スレッド作成 */
をして
DWORD WINAPI fnThread1(LPVOID hWnd) {
...中略
SetWindowText(GetDlgItem(hWnd,IDC_EDIT2),"接続が確立されませんでした。");
として上記のエラーが出ました。どの用にしたらいいと思われますか?よろしくお願いします。
323322:2006/01/15(日) 09:49:04
要するにスレッドでの結果をダイアログに表示したいのです。

って・・・

誰も居ない・・
テラサビシス
324デフォルトの名無しさん:2006/01/15(日) 09:52:59
見てるよ
だけどapiと全然関係ないから無視しただけ
325322:2006/01/15(日) 09:53:45
わかるなら答えていただきたいです。
326デフォルトの名無しさん:2006/01/15(日) 10:02:26
>>322
>明示的なキャストが必要です
327デフォルトの名無しさん:2006/01/15(日) 10:06:27
>>326
それなんですけど、どうやればいいのかがわかりません。
この場合の明示的なキャストとはどうやればいいのでしょうか?
'void*' から非 'void' 型への変換・・・?
328デフォルトの名無しさん:2006/01/15(日) 10:08:55
GetDlgItem はどこにいったのだ
329デフォルトの名無しさん:2006/01/15(日) 10:11:37
ん?というと・・
HWND hwnd = GetDlgItem(hWnd,IDC_EDIT2);


ということでしょうか・・??
330328:2006/01/15(日) 10:12:11
ごめん あった

hWnd の使い方がおかしい
331デフォルトの名無しさん:2006/01/15(日) 10:12:42
>>327
お前はプログラムをやるのはまだ早いよ。
Cを最初から勉強しなおせ。
332デフォルトの名無しさん:2006/01/15(日) 10:13:04
hThread1=CreateThread(NULL,0,(LPVOID)fnThread1,hWnd,0,NULL);
つーか、今の時代にCreateThread?
333デフォルトの名無しさん:2006/01/15(日) 10:13:06
>>330
うーむ・・・
334デフォルトの名無しさん:2006/01/15(日) 10:13:49
>>331
Cもプログラムだろ、お前もやりなおせ
335デフォルトの名無しさん:2006/01/15(日) 10:16:39
>>331
すいません。最近VC++に手をつけ始めたもので・・汗
336328:2006/01/15(日) 10:18:14
要するに、GetDlgItem() の第一引数の型がおかしいって
コンパイラ様がおっしゃってるので、適切にキャストするよろし
337デフォルトの名無しさん:2006/01/15(日) 10:18:44
>>335
まずあれだ。
キャストって知ってるかい?
338デフォルトの名無しさん:2006/01/15(日) 10:20:05
>>336
ありがとうございます!!!

コンパイラ様のお告げの意味がわかるようにならないとですね・・
ありがとうございました。
339デフォルトの名無しさん:2006/01/15(日) 10:57:55
>>332
CreateThreadは使わない方が良いのでしょうか?
340デフォルトの名無しさん:2006/01/15(日) 11:00:05
>>338
お前はC/C++をやるのはまだ早いよ。
プログラムを最初から勉強しなおせ。
341デフォルトの名無しさん:2006/01/15(日) 11:04:43
>>340はああ言ってるけど、>>343お前はどう思う?
342デフォルトの名無しさん:2006/01/15(日) 11:08:33
>>341ははあはあ言ってるけど、>>343お前はどう思う?
343デフォルトの名無しさん:2006/01/15(日) 11:17:33
             /        ヽ/          ヽ
                l          l             l
            l         l          l
         ,. ‐'' ̄ "'' 、    ,,. --‐┴─-- 、     / ̄ "'' -、
       /      ,.-‐''"´           \ _/        ヽ
      l       /                   ヽ          l
       l     /  ●                l          l
      ヽ    l       (_人__ノ         ● ヽ         /  そんな事言われても
       ,,>-‐|   ´´     |   /       , , ,. ‐'' ̄ "' -、/      ウチ ポン・デ・ライオンやし
      /    l        ヽ_/           /          ゙ヽ
     l     ` 、               l            l
      l       ,. ‐'' ̄ "' -、   ,. ‐'' ̄ "'' -、            l
       l,     /         ヽ /        ヽ,         /
       ヽ、,,  l            l          l,,,___,,,/
         "'''l            l             l
              ヽ          /ヽ        /
             ヽ,___,,,/  ヽ,,___,,,/
                   /     |
                /       |
344デフォルトの名無しさん:2006/01/15(日) 11:21:09
音楽CDだってリッピングの場合はx倍速で動くじゃん
DVDビデオだって2時間の映画が単純コピーに2時間かかったりしない
345デフォルトの名無しさん:2006/01/15(日) 11:21:26
>>343には少しハードルが高かった模様。
>>346お前はどう思う?
346デフォルトの名無しさん:2006/01/15(日) 11:31:09
                | ̄``''- 、
                |      `゙''ー- 、  ________
                |    ,. -‐ ''´ ̄ ̄`ヽ、_        /
                |, - '´ ̄              `ヽ、     /
              /               `ヽ、ヽ   /
             _/                    ヽヽ/
           / / /   /  /  /            ヽハ
          く  / /!   |   〃 _/__ l|   | |   |  |  | | ||ヽ
           \l// / |  /|'´ ∧  ||   | |ー、||  |  | l | ヽ
            /ハ/ |  | ヽ/ ヽ | ヽ  | || /|ヽ/!  |/ | ヽ
            / |  ||ヽ { ,r===、   \| _!V |// //  .!   |
            | ||   |l |ヽ!'´ ̄`゙   ,  ==ミ、 /イ川  |─┘
            | ハ||  || | """ ┌---┐  `  / //  |
            V !ヽ ト! ヽ、    |     !    / //| /
               ヽ! \ハ` 、 ヽ、__ノ    ,.イ/ // | /
    ┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/
    |(/(/(/(/(/(/(/(/(/(/│||      |\  〃
  r'´ ̄ヽ.              | | ト    /    \
  /  ̄`ア             | | |  ⌒/     入
  〉  ̄二) >>322は死ねば| | |  /     // ヽ
 〈!   ,. -'                | | ヽ∠-----', '´    ',
  | \| |   .良いと思います   | |<二Z二 ̄  /     ',
  |   | |               _r'---|  [ ``ヽ、      ',
  |   | |  つかスレ違いです >-、__    [    ヽ      !
  \.| l.              ヽ、      [     ヽ    |
    ヽ|              \    r'     ヽ、    |
347デフォルトの名無しさん:2006/01/15(日) 11:33:15
   / ̄ ̄ ̄ ヽ
   ( ヌ … ヌルポ )      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ
   ヽ、_  _ノ      (   ぬるぽぬるぽ! )
       ヽ{          ヽ、_  _____ノ
           _,,, _     ノノ
     Σ   , -'"     `ヽ、
         / /  ィ ト  ヽ r、},々
      /  /,ィ ハ N \  }7凡 >
      ,彳 レレ' V   ヽN}Ll ヽ ぬるぽぬるぽ…
       ハM| ○//// ○ `ー、イ  }  ぬるぽぬるぽぬるぽ!
       {N{ヽl "" r-┐"" _6ノノNノ
     }ヽ、  ヽ _L__l_ ノ  _ノノノ
     {  `ー--'≪_ V  _≫'"  ノl l
     ll l l、_  r' ,ヘ 1  _,,-'"l l l
       l l l  ノ i レ'  V  l ヽ、_l l  バタバタ
      ヽ ̄ ノ|      ト、__彡


   _
 ,.'´   ヽ  ガッ
 ! ノ_,メ,_ハ〉  _
 l (!l.‘д‘ノ| , '´ィ´ `ヽ
  ! (とゝ )i卯ミノ从从リ *⌒) 
 ノ ノ/⊂彡☆#))Д゚ノリ
 ` `iララ′ と)j水!つ
348デフォルトの名無しさん:2006/01/15(日) 12:03:23
>>344
そうとは限らない。DVDビデオだと強制的に等倍になるドライブもある。
その場合ドライブのファームウェアを改造しなければ本来の速度を出せない。
通称 改ファーム。
349デフォルトの名無しさん:2006/01/15(日) 12:35:29
>>339
作ったスレッド内でCRTもMFCも使わないならCreateThreadでいいよ。
350デフォルトの名無しさん:2006/01/15(日) 12:54:26
んじゃオレはCreateThreadでいいや
351デフォルトの名無しさん:2006/01/15(日) 12:59:35
どこかで _beginthread 使った方が良いと書いてあったな
352デフォルトの名無しさん:2006/01/15(日) 13:17:19
画像ファイルをスライドショーするフラッシュファイル(swf)を作成する
アプリを作りたいのですが、フラッシュファイル(.swf)を書き出すAPI・仕様とか、
サンプルプログラムがあったらURLを教えてください。
(QuickTime APIで可能でしたでしょうか?)
ご教授よろしくおねがいします

353・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/01/15(日) 13:27:06
_beginthreadexのほうがいい。てかぶっちゃけ_beginthreadも非推奨。
354デフォルトの名無しさん:2006/01/15(日) 13:28:02
>>351
349じゃないが…CRTを使わないならCreateThreadでいい。
逆に使うなら_beginthreadでないとリークが発生する。
355354:2006/01/15(日) 13:30:00
あっと、353にあるように_beginthreadexが推奨だね、、、失礼をば
_beginthreadを_beginthreadexと読み違いてた
356デフォルトの名無しさん:2006/01/15(日) 14:40:41
>>355
おっけなるほど・・了解した。
357デフォルトの名無しさん:2006/01/15(日) 15:03:05
          ;".:^;         ;".:^;
         ;";'.::.:';       ;'.::.:';
        ;' ;.::;.:;.:'; ;       ;.::;.:;.:'; ':
       ;" ;'.:;.::;:::;';"" "" ;'.:;.::;:::;'; ':
      ;"                   ':,
     ;'                     ':,   
     ;                      ';   また頑張ってね♪
    ミ       ●       ●      ミ
     ミ                        ミ' ~;";^:
    ミ  """   ;"   ミ    ';   """ ミ oOOo ミ
    ';  """   丶,.,,,:" 丶,,,,:"   """ ;"':,_ .○,'    ))
     ':,                     ;"ミ   ミ
      ,,;                 _ _;" ;   ;'
      ; "                :'    ;'
      ;    ':,                 ;'
     ; ':,     ':,           ,、:'
     ミ ':,   ;.,,;.,.         ;.,..,;.,.  ',
  ....,.,ミ    ミ' ~;";^:ミ   X    ミ' ~;";^: ミ
 ミ  `"ミ  ミoOOo ミ       ミoOOoミ ミ
 ミ  ,.,.,...':,_ミ  ○ ;ミ   ';   ;ミ ○ ;ミ_:'
         ミ,.,;.,.;,,. 丶, ,:"丶,,:" ミ,.,;.;,.丶

358デフォルトの名無しさん:2006/01/15(日) 15:04:29
>>346
:;' /:/ `メ、 i: ハ: i: : ii:i ヽ: i: :ii; : : : :iヽ: :
i: :i: i: i/,ィ=ミヽi: iヽNi:i_`iL:H---i:i: ヽ
i: :i :i / {.iトgj:i ヽ! lルィ丁゙)‐ミ「!: :ii/: : i
;':/ヾム⊂つ'´     i:.;{iil1:ソ i:i:::i !: : i:
: i: /: iト        、,,ミニっ /i/゚: o i .
: i:/: : i    、`_      ̄/.:/: : : i: :    >>322さんに
: /: .::ハ   ゙llllllル `ヽ    //. : :/! i: .   <あやまれ!
/: .::/:::/`、  lll/: : : : :} /〃:./: /i iハ!
i. ::/i::/::::::i::ヽ`三ー 'ノ , イ/: /: /.::i i::::::
::::///::::::::i:::i:..ヽ---<::::/:::/: :/: : i iヽ::
359デフォルトの名無しさん:2006/01/15(日) 15:05:04
           __, ----- 、
     ___「「 |    ̄⌒ヽ¬、\
    / ̄ブ /  |       \   ヽ
   〃   / /  ハ |ヽ   ヽ\  ヽ  ヽ
      // / | ||l  |ト、ヽ  \ \ ヽ   !
    // /l | || ヽ ヽ\>┼\ ヽヽ  |
    ||  | | | |」十 ヽ ヽ ヾィ¬ミヾ | 川|
    lハ | | | トxrテミ     ├1:::リ}| |}}リト〉
      ヽ !トlハ {{ ヒハ     ヽニソ | レ1∧|
       ヽV八ハ ゞ┘ ,   "" | | || {
       // /jハ ""  一   , イ /| l| ハ リテラです。
        // // / /`丶 、 __/ ||/l| /l| | ヽ
     // /// | / |川r┤    |//|/ || | | ヽ
    / ///川レ┬ '" /   /|ハ| >┬L|ヽ !
  ./ / // / | || |  /ヽ ァ'´  ||_メ/ /⌒ヽ}}
/ //  /レ7 」 || ヽ |  /  __乂レ'´ /     _ヽ
  / /  /ハ/ |  ̄\」 /r‐ '´ ̄ } \/     トミヘ
 / /  / //  }‐ ¬厂!'´   ヽ/  }}     \ハ
 |/  / //|  /   _L」      |   / , -------- ヘ
 || 〃/〈 |  |厂 //个、`ー、 /  //        
360デフォルトの名無しさん:2006/01/15(日) 15:05:38

               /  /     /   |      \ ヽ
               / /  /   / /    ||  |  i  ヽ i
              i /  / /  / / /    ||  ||  |│ |ノス
               |//  / /___, -一ァ|  /! |ト、|│ | | く」
                |,-‐¬  ̄---┘'7 |!  ハ! |,、-┼十|! | | |
          , -‐ ''"  し' '´_ /,ィ二l |ト、/!ヽト、\_ヽ!|!l | ハ |
       ,r/      __   ,イ|リ ヾハ! ヽ!  ,ィ⌒ヾミリノ!/リ  |
      / ||ヽ  -'     / ̄ )` __      |ヒノ:} '` ,イ/ |  | 
    ,r '   ヾ、  ,-、____ , イ ̄,r==-      ==-'  レ' /|  |   
  / ヽ    `ーソ  ' | |ト、,ヘ ′""          "" / / || |   
. /    \_  /  | ハ ヽ`゙'ヘ       ' '__. ィ  / / | |  |  
           /   / / |  ヽ 川\    ヾ三ニ‐'′//! |  | |  |   妹のクレアです!!
        /    / / 八  \川| |`ト- ..  __ , イ‐ァヘ |  | ||  |!
      /    / / /  \  \ 「`ー- 、    /  .〉  ト、|  ヽ、
     ,イ    /-─=¬ニヘ、_  \   厂\ 厂ヽ /!|   | `ー=ヘ
 -‐  ̄ /─ '  ̄     ├- ヽ\  \ノ\ \ 人 ハ!ヽ ||  |-┤ ヽ
      /          /!‐-- | |\   ト、_`ヽ oヽ  ト、!  ||  |‐┤- ヽ
  // 〉      __ /  ├‐-  ||  | 川-‐  | |  厂7! ハ!  ├:┤  ̄ヽ
  / / ー ─    ̄       ├‐- リ  || ハ!ヘ   | |  ト┤|/′ ヾ,┤   ゙i_
  ‐ '              〉‐-    | / /\ .|o | /ヽ/(′    ∨     \
‐--─ ──-r、___-、    /ー_     {(   '´>、! /ヽ/       |\       \
361デフォルトの名無しさん:2006/01/15(日) 18:32:08
>>359-360は勝手に偽名で自己紹介始めたけど、
本気でWin32APIの質問をしたいと言う>>363よ、どう思う?
362デフォルトの名無しさん:2006/01/15(日) 18:41:57
〉〉363に期待
363デフォルトの名無しさん:2006/01/15(日) 18:42:25
㍆㌋_㌆㌨㌰㌾㌈
364デフォルトの名無しさん:2006/01/15(日) 18:45:44
>>363
これは酷い・・・
>>366よ、この凍えきった空気を暖めてくれ!
365デフォルトの名無しさん:2006/01/15(日) 18:48:01
>>363
ワロスw
366デフォルトの名無しさん:2006/01/15(日) 18:50:19
意味わからん
367デフォルトの名無しさん:2006/01/15(日) 18:50:50
>>366
お前にはがっかりだ
368デフォルトの名無しさん:2006/01/15(日) 18:51:33
>>366
・・・
369デフォルトの名無しさん:2006/01/15(日) 18:54:37
             /        ヽ/          ヽ
                l          l             l
            l         l          l
         ,. ‐'' ̄ "'' 、    ,,. --‐┴─-- 、     / ̄ "'' -、
       /      ,.-‐''"´           \ _/        ヽ
      l       /                   ヽ          l
       l     /  ●                l          l
      ヽ    l       (_人__ノ         ● ヽ         /  そんな事言われても
       ,,>-‐|   ´´     |   /       , , ,. ‐'' ̄ "' -、/      ウチ ポン・デ・ライオンやし
      /    l        ヽ_/           /          ゙ヽ        ところで >>359-360 おはつです
     l     ` 、               l            l           可愛いなぁ 連絡先交換せーへん?
      l       ,. ‐'' ̄ "' -、   ,. ‐'' ̄ "'' -、            l
       l,     /         ヽ /        ヽ,         /
       ヽ、,,  l            l          l,,,___,,,/
         "'''l            l             l
              ヽ          /ヽ        /
             ヽ,___,,,/  ヽ,,___,,,/
                   /     |
                /       |
370デフォルトの名無しさん:2006/01/15(日) 18:56:03
>>369が二次元の世界で会話を始めちゃったよ・・・
>>372はどうすべきだと思う?
371デフォルトの名無しさん:2006/01/15(日) 18:57:16
自己解決しました。
372デフォルトの名無しさん:2006/01/15(日) 19:01:50
だが断る
373デフォルトの名無しさん:2006/01/15(日) 19:06:23
>>369をポン・デ・ライオンと言われてもかなり微妙なラインだと思う。
>>376はどう思う?
374デフォルトの名無しさん:2006/01/15(日) 19:13:11
技術板で何やってんだよ…他所行けや
375デフォルトの名無しさん:2006/01/15(日) 19:21:51
マ板にうってつけじゃないか。
376デフォルトの名無しさん:2006/01/15(日) 19:25:32
マ板行った事無いけど、そういう所なのか
377デフォルトの名無しさん:2006/01/15(日) 20:11:27
>>366よ、>>363が分からんと申すか。

そのまま横に読めばいいんだよ。
つまり、





マルカイミォナピボルエー
378デフォルトの名無しさん:2006/01/15(日) 20:30:33
・・・・っというAPIを探してるんですが、
どのファイルをインクルドーしたらいいのでつか?
379デフォルトの名無しさん:2006/01/15(日) 20:32:23
>>378
お好きにドウゾ。
突っ込む気にもなれない
380デフォルトの名無しさん:2006/01/15(日) 20:36:30
APIって中でどんなことしてるんだろう
381デフォルトの名無しさん:2006/01/15(日) 20:47:17
A・・・あなたの
P・・・パソコンで
I・・・生きている
382デフォルトの名無しさん:2006/01/15(日) 20:50:47
>>381によりAPIは専ら日本語が得意だということが判明。
383デフォルトの名無しさん:2006/01/15(日) 20:53:50
            _,、-‐‐'ー- 、,_ヽ_
           / ,、 -‐ ''"´;: ; ヽ
          / / ,、‐''"´´  ;: ;;`ヽ
         / (/  ,、-‐''"´´ _, ,丶          そおおおんあわけねええだろぉ?
         i  (ゝ /, , 、ー''"、´   _ヽ
         |  /'''_ー-<___, -'´ lー''"ノ ヽ.  , へ、 _
         、 'l { `ヽ;ー-、-,ー‐,r''1 ; ;ヽ<''ヘ  ヽー---‐'''"""""
          r、 iヽ  ヽ' `'   .|、  ,. |  |
         {λヽ.ヽ       ,,ソ ヽ-' t' __ノ   ,______
         \ゝ、iヽー '`ー'''`1´     ~ヽ、、、/~    ̄ ̄,~"=
   、‐'''''ヽ    `'ヘ.',ヽ   , 、 {              ,、- '´   
  /     \    ヾ ヽ⌒ヽ ヽ {       , ‐、_   /       
.  |        ゛‐-ー'.,!\\__  `ヽ. ,、   /   `'´        ,
  、        / / | \ \゛、ー'>' ノrー' ´    | ,       /
  r;       / /  |\,_\ `""´r''| ト、      | |     /
   i        /  |   フ 丶、___ノヽ.      |/ /  /
  rヽ\      (   |   ,ヘ   | | ヽ \     ‖/ /
384デフォルトの名無しさん:2006/01/15(日) 21:27:54
指定されたパスがディレクトリなのかファイルなのかの判定をしたいです。

GetFileAttributes()を使用してみたのですが、
FDドライブやCD-ROMドライブを指定された際、
FDやCDが入っていないと、キャンセル、再実行、続行の選択の
メッセージボックスが表示されていまいます。

メッセージボックスを表示させずに、属性を取得する方法はないでしょうか?
385デフォルトの名無しさん:2006/01/15(日) 21:33:14
>>384
SetErrorMode(SEM_FAILCRITICALERRORS);
386デフォルトの名無しさん:2006/01/15(日) 21:50:11
>>385
ありがとうございます。
387デフォルトの名無しさん:2006/01/15(日) 23:13:30
>>384
試してみんと分からんけど、
PathIsDirectory
という関数もある。
388デフォルトの名無しさん:2006/01/15(日) 23:24:18
>>384
HDDであることを確認してから読みに行くとか駄目なのかな?
389・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/01/15(日) 23:28:42
正直、シェルAPI使ったほうがいい。
390デフォルトの名無しさん:2006/01/15(日) 23:29:52
>>387
ありがとうございます。明日、そちらも試してみます。
(開発環境が会社にしかないので)

>>388
ユーザに指定されたパス(FDDやCD-ROMドライブも含む)から読み込んで・・・
という処理の流れになるので、HD上だけが対象じゃないんです。
391デフォルトの名無しさん:2006/01/16(月) 04:43:53
仕事でWin32APIを使っているひといる?
392デフォルトの名無しさん:2006/01/16(月) 04:46:44
スレ番が39だから、あんまり使ってる人いないんかなぁと、、
393デフォルトの名無しさん:2006/01/16(月) 05:45:10
↑Win32APIの国内利用者はネラーが大多数だと思っている中学生。
394デフォルトの名無しさん:2006/01/16(月) 06:00:19
ネラーの大多数はAPIって何の略?って聞かれても
>>381と答えるでしょうwww
395デフォルトの名無しさん:2006/01/16(月) 06:14:55
APIたん
396デフォルトの名無しさん:2006/01/16(月) 06:38:56
A あなたの
P ぱいぱい
I いじらせて
397デフォルトの名無しさん:2006/01/16(月) 06:44:30
にしても少ない気はしないかい?
398デフォルトの名無しさん:2006/01/16(月) 06:48:03
ひょっとして実は人気ないんちゃうんかとか不安になるじゃろがっ
399デフォルトの名無しさん:2006/01/16(月) 06:51:29
マナーが悪いから2chは嫌いなひと多いしなぁ
400デフォルトの名無しさん:2006/01/16(月) 07:12:39
他プロセスに{Send,Post}Messageする時、{W,L}Paramにポインタを格納しても、
送り先プロセスでは使えないからムダ。32bitに収まる値のみちゃんと渡せる

・・・って認識でOKですか?
またこれに関連し、「他プロセスに数十文字程度の文字列を渡したい」って思った時に
使うべきワザについて今調べています。
・メモリマップトファイルなる人 (使用経験なし)
・クリップボード
以外にもっと適切なワザはあったりするのでしょうか?キーワードだけで良いので
御教示頂けないでしょうか?
401デフォルトの名無しさん:2006/01/16(月) 07:21:22
WM_COPYDATA
402デフォルトの名無しさん:2006/01/16(月) 07:48:29
つ VirtualAllocEx()
403デフォルトの名無しさん:2006/01/16(月) 08:40:39
づ WM_SETTEXT
404デフォルトの名無しさん:2006/01/16(月) 10:10:44
PS/2とUSBにキードードをそれぞれ接続している状態(計2台接続)で、
WM_KEYDOWNが発生した際にどっちのキーボードが操作されたのか判定する方法ってありますか?
405デフォルトの名無しさん:2006/01/16(月) 11:43:02
>>404
オレは何でそんなことをする必要があるのか問い詰めたい。
406デフォルトの名無しさん:2006/01/16(月) 11:47:33
>>400
つGlobalAddAtom
407デフォルトの名無しさん:2006/01/16(月) 12:27:55
406に関連して思ったのだが、
アトムからそのアトムが持っている
文字列の長さを知る方法は無い?
408デフォルトの名無しさん:2006/01/16(月) 12:47:20
>>400
もひとつオマケに
named pipe

さらにオマケで
DLLでメモリ共有

個人的には、
小さなデータ:WM_COPYDATA
大きなデータ:メモリマップドファイル+PostMessageで通知
をよく使う。
409デフォルトの名無しさん:2006/01/16(月) 14:34:33
>>400
他にもメールスロットやソケットと言う手もある。
410デフォルトの名無しさん:2006/01/16(月) 15:43:52
>>404
あります。
411デフォルトの名無しさん:2006/01/16(月) 15:52:59
わからないなら黙っててください。
or
意地悪ですね。
412404:2006/01/16(月) 16:10:19
>>410 方法を教えて下さい。お願いします。
413デフォルトの名無しさん:2006/01/16(月) 16:59:13
以前マウスのポインタデザインを簡単に変更するAPIがないかどうかを
質問した者ですが、レジストリを直接変更しても設定が即座には反映
されませんでした(あたりまえか)。

設定値を変更した後に何か行なう必要があるんでしょうか?。
それともやはり何か簡単に変更できるAPIが存在するのでしょうか?。

■変更した部分
\HKEY_CURRENT_USER\Control Panel\Cursor の各値
414デフォルトの名無しさん:2006/01/16(月) 17:04:32
>>413
SetSystemCursor?
415デフォルトの名無しさん:2006/01/16(月) 17:12:03
SetSystemCursor で全部変えちゃえばできそうな気もしますが、
それだとマウスのプロパティにある「デザイン」は変わりませんよね。
「デザイン名」でズバッと変更できそうな気もするんですが・・・。
416デフォルトの名無しさん:2006/01/16(月) 17:13:59
>>415
適当なこと言ってみるけど、デスクトップテーマ関係の
APIがあったと思うから、そこでいじれるんじゃない?
417デフォルトの名無しさん:2006/01/16(月) 17:32:11
>>412
あるにはあるが・・・・・

趣味で作っているプログラムならあきらめろ。

仕事で作っているプログラムでどうしても必要というなら、
「i8042.sys・kbdHid.sysとkbdclass.sysの間に入れてどちらのキーボードからのIRPかを
アプリに通知するfilter-driver」を作成できる(デバドラのスキルを持つ)システムハウスを
探して依頼しろ。

filter-driverは少なくとも下げ進行のスレの雰囲気も読めない教えてクンに作れるシロモノではない。
418デフォルトの名無しさん:2006/01/16(月) 17:40:26
ググッてみました。
なるほど、作ってみますね
ちょうど大学で研究してるところなんですよ。
それを応用すれば、なんとかなりそうです。
親切に教えてくれてありがとうです。
419デフォルトの名無しさん:2006/01/16(月) 17:45:49
>>404,412,418
Raw Input APIはどう?XP限定で。
GetRawInputDeviceList()でデバイスを列挙しておいて
WM_INPUTで判別するような手順になりそうだが。
420413:2006/01/16(月) 19:03:30
うーん、デスクトップテーマっすか・・・。

マウスのデザインを保存すると

HKEY_CURRENT_USER\Control Panel\Cursors\Schemes

に設定が保存されるんですが、Windowsはこの値を取得し、
パースして SetSystemCursor でカーソルを変更して HKEY_
CURRENT_USER\Control Panel\Cursors にも値を設定する
などという面倒な事はやってないと思うんですが・・・。

やっぱデスクトップテーマ関連なんでしょうか・・・。。
421デフォルトの名無しさん:2006/01/16(月) 19:19:50
>400
WIN16から連綿と続く互換性の為に、有名なWM_系メッセージは
Windows側でマーシャリングしてくれたはず。
422デフォルトの名無しさん:2006/01/16(月) 19:21:47
SetWindowTextに〜なときにはWM_SETTEXTを使えと書いている有様。
423400:2006/01/16(月) 19:47:34
>>401
>>402
>>403
>>406
>>408
>>409

みなさま、色々と本当にありがとうございます。勉強になります。
これから詳細を調べてみます
424デフォルトの名無しさん:2006/01/16(月) 19:52:09
>404
WM_KEYDOWNなんかに頼らず、はなからDirectInput使ったらよくね?
425デフォルトの名無しさん:2006/01/16(月) 20:48:44
バカな424が降臨いたしました
426デフォルトの名無しさん:2006/01/16(月) 20:52:14
>>425
おれもDirectInput使えばいいと思ったんだけど?
427デフォルトの名無しさん:2006/01/16(月) 20:53:36
自演乙
428デフォルトの名無しさん:2006/01/16(月) 21:02:21
>>427
詳しく
429デフォルトの名無しさん:2006/01/16(月) 21:15:17
>>425-426
俺もそう思う。
DirectInputの使い方を知ってるなら、だけどね。
430デフォルトの名無しさん:2006/01/16(月) 21:16:26
レス番間違えちゃったぜw
>>424, 426な OTL
431デフォルトの名無しさん:2006/01/16(月) 21:59:26
>>424、426、429
キミたちはそれでやっておけば良いと思うよ、それがお似合いだ。すごく似合ってる
432デフォルトの名無しさん:2006/01/16(月) 23:27:29
リストコントロールのアイテムの名前を取得しようと、
LVITEM pItem;
TCHAR Buf[256];
for(i = 0; i < NumItem; i++) {
pItem.mask = LVIF_TEXT;
pItem.iItem = i;
pItem.iSubItem = 0;
pItem.pszText = (LPSTR)Buf;
pItem.cchTextMax = sizeof(Buf);
::SendMessage(hw, LVM_GETITEM, 0, (LPARAM)(&pItem));
TRACE(Buf);
}

このように書いたのですがSendMessage関数の返値が0のままで取得できません。
ハンドルとかちゃんと取得できてるんですが、何か指摘お願いします。
    ミミ ヽヽヽヽリリノノノ
    ミ   ,,、,、,、,、,、,、,、、 彡
     l  i''"  u   u i
     | 」 u ⌒' '⌒  |
    ,r-/  <。> < ゚ >|
    l   u   ノ( 、_, )ヽu|  
    ー'    ノ、__!!_,.、| 
    |     |    | |
    |     |    | |
     ∧  u  ヽニニソ  l
   /\ヽ    u  u /
 /     ヽ.  `ー--一' ノ/ヽ 
434デフォルトの名無しさん:2006/01/16(月) 23:43:56
>>432
本題とは全く関係ないけど、次のところをつっこむ。
1. ポインタ型でない変数の名前の頭にpを付けている。
2. C++ではforでループ変数を宣言するのが極めて一般的。(::を使っていることからC++と見受けられる)
3. TCHARの配列をLVITEMのメンバpszTextに代入するのにキャストは不要。
  しかもLVITEMのメンバpszTextの型はLPSTRではないのでかえって害。

4. LPARAMへはC++的にはreinterpret_castだろうな。これだけは好みの問題だろうけど。
435デフォルトの名無しさん:2006/01/17(火) 00:09:49
DLLから呼び出し元の実行ファイル名を取得できる関数ってないでしょうか?
436デフォルトの名無しさん:2006/01/17(火) 00:21:06
>>435
GetModuleFileName(NULL,
437デフォルトの名無しさん:2006/01/17(火) 00:40:31
>>432
hwがあさってのウィンドウになってんじゃない?
あと、pItem.cchTextMax = sizeof(Buf)/sizeof(TCHAR); じゃん?
ListView_GetItemText() はどうよ?
438デフォルトの名無しさん:2006/01/17(火) 00:42:18
リストボックスと間違えてるとか・・・。
それはないかw
439432:2006/01/17(火) 00:47:19
すみません。自己解決できました。
違うプロセスのコントロールを参照してました。
いったんWriteProcessMemoryでそのプロセス内に書いてからReadProcessMemory
で読んだらいけました。
バカな質問に付き合ってもらってホントにすみませんでした。
440デフォルトの名無しさん:2006/01/17(火) 01:06:43
>>436
ありがとうございます。
441デフォルトの名無しさん:2006/01/17(火) 01:08:00
ここらで誰かまとめてくだらい。
カーネルを介するプロセス間通信とmmap系のものと。
442デフォルトの名無しさん:2006/01/17(火) 01:12:28
>>441
メモリマップドファイル
VirtualAllocEx
名前付きパイプ
メールスロット
WM_COPYDATA
グローバルアトム
DLLでの共有セグメント
(WM_SETTEXT)

あと、COMもプロセス間通信できているよな。
443デフォルトの名無しさん:2006/01/17(火) 01:31:27
WM_COPYDATA,WM_SETTEXT,WM_GETTEXTも結局はWindowsが自動的にメモリマップトファイル作ってるだけだし。
444デフォルトの名無しさん:2006/01/17(火) 01:43:24
過程より界面
445デフォルトの名無しさん:2006/01/17(火) 06:59:28
ツールバーのデフォルトビットマップで、
STDとVIEW以外でなんか無いでしょうか。
更新、拡大、縮小があればいいなと思うんですが。
446デフォルトの名無しさん:2006/01/17(火) 09:55:55
>>442
名前無しパイプとソケットも結構使うと思う。
447デフォルトの名無しさん:2006/01/17(火) 14:28:17
COMのプロセス間通信の部分はRPCを使ってるらしいが、
RPC自体は名前付きパイプ、NetBIOS、Socketで実装されてるとさ。
448デフォルトの名無しさん:2006/01/17(火) 20:33:54
 こんにちわ。質問をさせて下さい。

 現在ブラウザからActiveXを介してローカルのEXEを起動するシステムを考えています。
 いくつかのサイトを調査しました。その中でハ○ゲームのゲームインストーラの動作
を見ていて、よく分かりません。

 ActiveX としては C:\WINDOWS\Downloaded Program Files\HgPlugiXJP21 Classとして
ダウンロードされています。

 サイトからダウンローダーを起動しているHTMLは以下の通りでした。

  location.href = "hangXme://http://gamestring.hangXme.co.jp:10000/?k22e..なんちゃら";

 試しに【ファイルを指定して実行】で hangXme: と実行してみると、該当EXEが起
動します。これはプロトコルとして登録されているのでしょうか?よく分からないので
すが rundll32.exe msconf.dll とかが関係しているのでしょうか?

 ちなみに 「ファイルの関連付け」としてはレジストリに以下が設定されています。

 HKEY_CLASS_ROOT\HanGXme\Shell\Open\Command

   値:C:\WINDOWS\Downloaded Program Files\HGStartXJP21.exe %1


 で、hangXame: を実行するとHGStartXJP21.exeが起動します。



 この辺の仕組みが分かりません。よろしくご教授下さい.
449デフォルトの名無しさん:2006/01/17(火) 20:39:46
そんなバックドアまがいなクソプログラム野郎はお帰りください
450デフォルトの名無しさん:2006/01/17(火) 20:46:58
プロトコルも関連付け可能。

なんでわざわざ伏字なの?
451デフォルトの名無しさん:2006/01/17(火) 20:51:53
 だけど、ネットゲームの世界ではそのやり方が標準ではないでしょうか?
 べりサインの証明書をつければ問題ないと思うのですが...

 確かにユーザーとしては不安な面もあるような気もしますが、ダウンロード元を信用してActiveXを
起動する訳ですから。
 それが信用できないとなると、一般のソフトウェアも使えないという事になるのでは?

 一般のソフトウェアだって、悪意があればローカルな情報を送信できる訳ですから。
452デフォルトの名無しさん:2006/01/17(火) 20:54:29
>>450
ありがとうございます。勉強してみます。

伏字にしないとまずいかなぁと思ったものですから...
453デフォルトの名無しさん:2006/01/17(火) 21:30:11
一般のソフトウェアにそんなバックドアまがいのがあったら大事だバカ
454デフォルトの名無しさん:2006/01/17(火) 21:31:18
寝糞んのとか、そいつらに悪意が無くても攻撃側に利用されりゃ一緒なんだよ
455432:2006/01/17(火) 21:38:43
またハマってしまいました。昨日と同じ要領でリストビューのアイテムを選択状態にしたいのですが、
次のコードだと、SendMessageが失敗を返してきます。
メモリの確保まではいってるんですが、何かアドバイス願います。

LVITEM lvItem;
LRESULT lResult = FALSE;
DWORD dwProcessId = 0;
HANDLE hProcess;
i iItem = 3;

ZeroMemory(&lvItem, sizeof(LVITEM));
lvItem.mask = LVIF_STATE;
lvItem.state = LVIS_SELECTED;
lvItem.iItem = iItem;
lvItem.iSubItem = 0;
lvItem.stateMask = LVIS_SELECTED;

GetWindowThreadProcessId(hListView, &dwProcessId);
hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwProcessId);

if ( hProcess ) {
LVITEM *pvlvi = (LVITEM *)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
::WriteProcessMemory(hProcess, pvlvi, &lvItem, sizeof(LVITEM), NULL);
lResult = (int)::SendMessage(hListView, LVM_SETITEM, 0, (LPARAM)pvlvi);
456デフォルトの名無しさん:2006/01/17(火) 21:58:19
hListViewがぬるぽだとか?
457432:2006/01/17(火) 22:03:11
>>456
書いてなくてすみません。
hListViewはちょっと上で取得してます。
同コントロールのアイテム名は読めてるんで、正しいものが入ってると思います。
458デフォルトの名無しさん:2006/01/17(火) 22:09:47
>>456
ガッ
459デフォルトの名無しさん:2006/01/17(火) 23:08:35
>>455
lvItem.pszTextのアドレスが指定されていない
460デフォルトの名無しさん:2006/01/17(火) 23:14:24
>>455
SendMessageの戻り値をキャストする必要はない。
461デフォルトの名無しさん:2006/01/17(火) 23:28:36
本題とは関係ないけど
なぜSendMessageの戻り値をintにキャストしてるんだろ
462デフォルトの名無しさん:2006/01/17(火) 23:33:02
::WriteProcessMemory(〜 のところをVirtualAllocExでぐぐると二番目にでてくるページの
Windows NT/2000 用の VirtualAllocEx() と WriteProcessMemory() / ReadProcessMemory() 〜
のようにやってみたらどうかな
463432:2006/01/18(水) 00:34:18
>>462
やっぱりだめみたいです。
リストビューを持つ他のアプリケーションやListView_SetItemState(...も試してみましたが
なぜかstateの変更だけがうまくいきません。削除や色の変更はできるのに。
別のWindowsXPSP2 proを使ってます。もう一台XPSP2 homeのマシーンでもできませんでした。
他のプロセスのstateはいじれないようになってるんでしょうか。
464462:2006/01/18(水) 00:49:59
>>462 で書いた「共有メモリを利用するには?」ってページのNT/2000用のサンプルに
LVM_SETITEMするものを付け加えて実行してみたらデスクトップのアイテム全部選択されたけど、
>>432 のOSはなに? きちんとさっきのページのとおりやってみた?
465462:2006/01/18(水) 00:50:57
書き忘れた。こっちはWinXPSP2。
466462:2006/01/18(水) 00:52:00
あ・・・よく読んでなかった。XPSP2proね。スマソ。
467462:2006/01/18(水) 00:59:36
となるとそのListView使ってるアプリがstateの変更をさせないようにしてるのかも。
そのアプリの名前は教えられないの?
468432:2006/01/18(水) 01:08:45
>>462
いくつかのアプリで試してみたんですが、
デスクトップ(エクスプローラ)は試してないんで
「共有メモリを利用するには?」のところのをコピペしてやってみます。
469デフォルトの名無しさん:2006/01/18(水) 01:34:05
下のように変更して動かしているんですが、まったく選択されません。
pLocalShared->mask = LVIF_STATE;
pLocalShared->iSubItem = 0;
pLocalShared->state = LVIS_SELECTED;
pLocalShared->stateMask= LVIS_SELECTED;
...
forループ内
::SendMessage(hSysWnd, LVM_SETITEM, 0, (LPARAM)pSysShared);
470デフォルトの名無しさん:2006/01/18(水) 01:40:32
追加する部分

pLocalShared->mask = LVIF_STATE;
pLocalShared->iSubItem = 0;
pLocalShared->state = LVIS_SELECTED;
pLocalShared->stateMask = LVIS_SELECTED;

// アイテムの状態をセット
for (int i = 0; i < nCount; i++)
{
pLocalShared->iItem = i;
WriteProcessMemory(hProcess, pSysShared, pLocalShared, dwSize, &dwNumberOfBytes);
SendMessage(hSysWnd, LVM_SETITEM, 0, (LPARAM)pSysShared);
}
471デフォルトの名無しさん:2006/01/18(水) 01:55:10
ハンゲームプロトコルこうぇーよ。
クソ!一生いかねー。
ドメイン0.0.0.0で登録しといた。
これでよし。だよな?
472デフォルトの名無しさん:2006/01/18(水) 01:58:42
ハンゲーやばいの??
473デフォルトの名無しさん:2006/01/18(水) 02:29:48
チョソと関わるとロクなことはない
474デフォルトの名無しさん:2006/01/18(水) 03:37:27
ミューテックスについてなんですけど
まずCreateMutex関数でオブジェクトを作成しますよね。
この関数の戻り値はオブジェクトに対するハンドルでして、プログラムは明示的にこのハンドルを閉じるには
CloseHandleにより閉じるとあります。

ですが例えばペンやブラシのオブジェクトの場合
DeleteObjectで明示的にオブジェクトを削除しなければいけないのですが
このミューテックス及びセマフォの様なオブジェクトはどういうタイミングでオブジェクトが削除されてるのでしょうか。

あんまし理解してなくてすいませんorz
475デフォルトの名無しさん:2006/01/18(水) 03:44:23
>>474
CloseHandleすれば、削除されます。
厳密に即時削除されるかは定かではないけれど。
476デフォルトの名無しさん:2006/01/18(水) 03:57:42
では例えば
まず初回に一意のミューテックスを作成しますよね。
ミューテックスの名称をTEXT("hoge")とでもしておきましょうか
そして後続のプロセスもTEXT("hoge")をCreateMutex関数にて作成しようとした場合
既にTEXT("hoge")のミューテックスオブジェクトは存在するのだから、そのオブジェクトのハンドルが返ってきます。

そしてプロセスが終了する時、又は明示的にCloseHandleを実行するとオブジェクトは破棄されるとありますが、
ミューテックスオブジェクトの所有権を取り合ってるプロセスが複数あるとして、そのうちの一つのプロセスを終了する場合
このミューテックスオブジェクトが破棄されてはまずいですよね
破棄されるならば所有権を取り合ってるプロセスが0個の時であるべきです。

このような時でもWindowsは自動的にオブジェクトを削除するタイミングを図っているのでしょうか
477デフォルトの名無しさん:2006/01/18(水) 04:00:59
カーネルオブジェクトで具ぐれ
478デフォルトの名無しさん:2006/01/18(水) 04:07:32
>>476
ヒント:参照カウント
479デフォルトの名無しさん:2006/01/18(水) 04:25:34
>>477-478
有難うございます。
キーワードにより検索してみます
480デフォルトの名無しさん:2006/01/18(水) 06:18:15
>469
オーナードローとか使ってて、LVITEMのstateではない
内部のメモリを参照して選択描画をしているとか。
481デフォルトの名無しさん:2006/01/18(水) 09:06:34
>>471-473

くわしく
482デフォルトの名無しさん:2006/01/18(水) 10:33:11
http://www.trendmicro.co.jp/vinfo/virusencyclo/default5.asp?VName=BKDR_SURILA.B
検知されるような糞プログラムってわけか?
483デフォルトの名無しさん:2006/01/18(水) 11:12:48
ウィンドウサイズを変更できない親ウィンドウを作成したいのですが、
どの様にすればいいのでしょうか

対象となるウィンドウは解説サイトで取り上げられるような極普通のカスタムウィンドウです。
全然思いつかないのでそこら辺を取り上げてるサイトがあれば嬉しいのですが・・・
484デフォルトの名無しさん:2006/01/18(水) 11:23:39
485デフォルトの名無しさん:2006/01/18(水) 11:23:49
>>483
ウィンドウを作成するときに、WS_THICKFRAMEを指定しない

WS_OVERLAPPEDWINDOWとかは、
WS_THICKFRAMEを含んでるんで、要注意
486デフォルトの名無しさん:2006/01/18(水) 11:35:56
WS_OVERLAPPEDのほうが要注意だけどな
487デフォルトの名無しさん:2006/01/18(水) 11:37:47
>>485
(WS_OVERLAPPEDWINDOW | WS_VISIBLE) ^ WS_THICKFRAMEとした所
見事境界がなくなり、システムメニューの"サイズ変更"も無効になっていました。
ありがとうございます。ちょっと強くなった気分(*´Д`)

>>484
読ませていただきます
488デフォルトの名無しさん:2006/01/18(水) 11:44:38
何この無能以前のミソッカス>>434と激甘教えたがりやども
489デフォルトの名無しさん:2006/01/18(水) 11:45:57
>>483>>434と間違えてるヤツが居るスレはここですか?
490デフォルトの名無しさん:2006/01/18(水) 11:57:58
>>483
WM_GETMINMAXINFO
491デフォルトの名無しさん:2006/01/18(水) 12:00:37
>>483
WM_GETMANKOINFO
492デフォルトの名無しさん:2006/01/18(水) 12:54:53
>>489
はい。ここで間違いありませんw
493デフォルトの名無しさん:2006/01/18(水) 13:38:33
いつからスレタイトルが「ハンゲは糞」になったんですか?
もうやってられません。WinAPIは永久に不滅です。
494デフォルトの名無しさん:2006/01/18(水) 14:11:38
「永久に不滅」って変だよね
頭痛が痛いみたいなもんで
495デフォルトの名無しさん:2006/01/18(水) 14:29:07
永遠に不滅
496デフォルトの名無しさん:2006/01/18(水) 14:30:54
>>494
いいじゃまいか
永遠に不滅です!!って誰か言ってた品
497デフォルトの名無しさん:2006/01/18(水) 15:05:24
>>493
(^ω^ ):「狐うどんと狐そば、どっち喰う?」
(゚д゚):「おれ、狐そばがいい。。。おれは狐そばがい…」(^ω^#):「一回言えばわかるお」

みたいなイライラを感じずにはいられない
498デフォルトの名無しさん:2006/01/18(水) 15:08:05
ウィンドウAから、子ウィンドウではないウィンドウBを呼び出します。

ウィンドウAで閉じる動作があった時、
ウィンドウBも閉じたいのでWM_CLOSE、WM_QUIT
などを送った所、閉じられはするのですが、
Ctrl + Alt + Deleteで見て見ると、残骸が残っているようです。

ここら辺に詳しい方がおられましたら、問題点などを教えてください。
499デフォルトの名無しさん:2006/01/18(水) 15:41:14
>>498
> 問題点などを教えてください。

・調査の仕方
・質問の仕方
に問題ありと思われ。
500デフォルトの名無しさん:2006/01/18(水) 15:54:52
とあるサイトで、BOOL型とC++のbool型がどちらも真の場合の判定に、

BOOL b1 = func1();
bool b2 = func2();

if ( (b1 && b2) || ! (b1 || b2) ) {
    // 処理
}

とあったんですが、これって
if( b1 && b2 ) {}
ではダメなのかな?と素人目に疑問が浮かびました…
上記の対処法の意図が分かりますでしょうか?
501デフォルトの名無しさん:2006/01/18(水) 15:59:08
>>500
どうみてもWin32API関係ありません
どうみてもそれじゃダメです

本当にありがとうございました
502500:2006/01/18(水) 16:00:18
確かにAPI関係なかったです…スレ違いすいません
ついでながらどうしてダメなのが教えてもらえませんか?
503デフォルトの名無しさん:2006/01/18(水) 16:01:12
b1=FALSE, b2=false
の時の事、考えてあげて下さい
504500:2006/01/18(水) 16:09:46
うっ…分かりません、本当に馬鹿なのかも知れません
b1=0で抜けるんじゃないんですか?
それともFALSEの定義の問題でしょうか…?
505デフォルトの名無しさん:2006/01/18(水) 16:15:23
どちらも真の場合の判定と書いてるけど、
どちらも偽でも、通るように書かれてる

とあるサイトとやらが勘違いしてるのか、
藻前さんが何か勘違いしてるのかは知らないけど

>if ( (b1 && b2) || ! (b1 || b2) )

>if( b1 && b2 )
は別物だよってこと
506505 スレ違い申し訳ない:2006/01/18(水) 16:23:21
>if ( (b1 && b2) || ! (b1 || b2) )
>if( b1 && b2 )
このふたつの違いは分かるんです、でも「どちらも真の場合の判定」ですので、
>>505さんがおっしゃったように
>if ( (b1 && b2) || ! (b1 || b2) )
ではダメなんじゃないかな?と思った次第です…
507506:2006/01/18(水) 16:24:21
名前欄505→500でした!
508デフォルトの名無しさん:2006/01/18(水) 16:27:58
>>499
ありがとうございます。
509デフォルトの名無しさん:2006/01/18(水) 16:50:49
>>506
本当に「双方真の場合の判定」と書いてあるのか?
だとするなら、それじゃダメだと思ったおまいが正しい
510デフォルトの名無しさん:2006/01/18(水) 16:50:53
>>500
そのサイト晒してみ
511500:2006/01/18(水) 16:57:45
ttp://www.aerith.net/cpp/typical_bug-j.html#bool-BOOL

のサイトなのですが・・・
BOOL型とbool型を==を使って判定してはならない、という事までは分かります
ですが最後の対処法が前レスで挙げた形になっているのです
もし私のとんでもない勘違いなら謹んで反省します
512デフォルトの名無しさん:2006/01/18(水) 16:59:29
>>500
「オレはドモルガンの法則知ってるぜ」って自慢したくて
そんな風に書いたんじゃないの
まぁ間違ってるんだけど
513デフォルトの名無しさん:2006/01/18(水) 17:01:32
>>511
文章の流れが不味いのは間違いないんだけど、
「安全な一致判定は、下記の通りに」って書いてあるじゃん。
「どちらも真」のコードだとは書いてない。
514デフォルトの名無しさん:2006/01/18(水) 17:02:13
>>511
そのサイトでは一致判定の方法を書いてるんであって
両方とも真の判定を行ってるわけじゃない

よって、お前が悪い
515500:2006/01/18(水) 17:04:17
あちゃー、やはり私の読み違いですか。反省します…
ということは先のコードで一致判定ができるということですね?むむむ…むずかしい
スレ違いすみませんでした
516デフォルトの名無しさん:2006/01/18(水) 17:04:58
BOOL b1 = func1();
bool b2 = func2();

としたとき、同じ結果である場合の判定は

if (b1 == b2) {
  // 処理
}

は誤りで

if ( (b1 && b2) || ! (b1 || b2) ) {
// 処理
}

が正しい。
サイトの記述通り。もう一度熟読すべし。
517デフォルトの名無しさん:2006/01/18(水) 17:14:41
どこにAPI使ってるんだ?
518デフォルトの名無しさん:2006/01/18(水) 17:29:55

xmlでurlを指定するとblogshot.netのようなスクリーンショットの
画像を返すようなプログラムをwindowsで作りたいのだが、
どこから調べればよいですか?
ちなみにlinuxでcは書いたことはあるが、
windowsでのプログラムはほとんど経験なし。
よろしく。
519デフォルトの名無しさん:2006/01/18(水) 17:37:57
>>518
まあ頑張ってくれ
APIで何か疑問があったらまた鯉
520デフォルトの名無しさん:2006/01/18(水) 17:56:28
GetMessege()が-1を返したときはどうすればいいですか?
521デフォルトの名無しさん:2006/01/18(水) 18:02:24
エラー処理をすればいいと思うよ
522デフォルトの名無しさん:2006/01/18(水) 18:40:53
Windowsって、ファイル名の大文字と小文字、区別しないんだな。
初めて知ったよ。


ていうかさ、ちょっとしたバックアップツール(差分コピー付)を
作ってたのよ。
バックアップ先に同名ファイルがあったら、退避するようにして。

で、まあ、当然日本語ファイル名は考慮するから、
コピー先に同名のファイルが存在しているかは、_mbsicmp()とかにするよな。
最初はこれ(_mbsicmp)が全角の"A"と"a"を同一視すると困ると思って試してみたけど
どうやらちゃんと区別してるっぽい(bcc55)。

で、動作確認のために、
"A.txt" を "a.txt" が存在するディレクトリにコピーしようとすると、
CopyFile()が失敗。
まさかと思ってエクスプローラでも確認したら
ちゃんと上書き確認が出やがる。

もしかして、Unicode版のAPIと_wcscmp()を使えば大丈夫か、と思って
_wcscmpの動作を調べたら、
"A"と"a"は区別するくせに、"a"と"a"を同一視しやがる。
使えねー。


結局、自分で「同一ファイル名か確認する」コードを書くのが良いのかね?
部分比較(strncmp)もしたいし
オリジナルのファイル名は尊重したいから、全部小文字に直すのは嫌だし。
比較のときだけ小文字に直す手もあるけれど。
523デフォルトの名無しさん:2006/01/18(水) 19:00:36
api使えよ
524デフォルトの名無しさん:2006/01/18(水) 19:19:56
FindFirstFileでいけないかね
525522:2006/01/18(水) 19:22:40
んー、適当なAPIあるかな?
Pathxxxとかざっと見渡しても、良さそうなのが見つからないんだけど。


やりたいことは、バックアップと同期。そのために、
・ターゲット側に同一ファイル名となるファイルが存在するかを確認
 ファイルが存在する場合
  そのままそのファイルに追記
  ファイル名を生かしたまま、別ディレクトリに移動
・コピー元側に存在しないファイルがターゲット側に存在するか確認
 存在したら、別ディレクトリに移動

という感じ。
同名とみなせるファイルがターゲット側に存在するかどうかを確認するだけなら
(実際にファイルシステムにアクセスするAPIを使えば)簡単なんだけど、
コピー元側のファイル1つ毎にOSを呼び出した上、
ターゲット側のファイルについても、
それぞれ毎回OS(ファイルシステム)にアクセスする必要があるよね?

FindFirstFile()で一覧を取って、サイズやタイムスタンプで
コピーする必要が無いときは何もしないようにしたいから
出来ればファイル毎に呼び出す形にはしたく無いんだけど。
さすがに毎回ディスクアクセスはしないとは思うけどさ。

で、FindFirstFileで取った"A.txt"と"a.txt"という名前を、
「同じファイル名である」と判定したいのですよ。
526デフォルトの名無しさん:2006/01/18(水) 19:36:53
PathFileExists?
527デフォルトの名無しさん:2006/01/18(水) 20:20:23
lstrcmp(茶ろわぁ("A.txt"),茶ろわぁ("a.txt"))
528デフォルトの名無しさん:2006/01/18(水) 20:27:09
>>525
::CompareString()をNORM_IGNOREKANATYPEとNORM_IGNOREWIDTHで
使うとか。
529528:2006/01/18(水) 20:28:09
この場合NORM_IGNORECASEか…
530デフォルトの名無しさん:2006/01/18(水) 20:30:20
"A.txt" と "a.txt" って、Win9xでは区別される。
Win2Kからは区別されなくなったんだよな。NT4はどうだったかな?
531522:2006/01/18(水) 20:57:02
おー、ありがとう。
>>528-529の方法(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE)で出来るっぽい。



と思ったら、>>530ですか。。。
532522:2006/01/18(水) 21:01:38
区別する、しないはOSかな?それともFSかな?

もしOSだとしたら、9xで"A.txt"と"a.txt"の両方を(FATに)作って
そのディスクを2Kで読んだらどうなるんだろう?

とりあえず、適当にFATの領域を作って、
「2K+FAT」の環境での動作から確認してみよう。
533デフォルトの名無しさん:2006/01/18(水) 21:06:08
XP上からFAT32に"A.txt"と"a.txt"はむりですた。
534デフォルトの名無しさん:2006/01/18(水) 21:18:52
>>530
これ、初めて知った。(2K/XPでも全角a/Aは区別されると思ってた。)

で、実験君。
98で"A.txt" と "a.txt"をFAT32に作成し、このHDDをXPに接続。
DIRすると"A.txt" と "a.txt"の両方が見えるが、エディタで"a.txt"を開こうと
すると実際に開かれるのは"A.txt"。
"A.txt"を削除すると、"a.txt"が開けるようになる。

既に納品済みのもので、これでトラブりそうなのがある・・・・・
535522:2006/01/18(水) 21:31:35
おー、みんな実験ありがとう。
区別する/しないはOSの動作で、
FAT上に両方あると、NT系では一覧では見えるけど開けないってことか。

っていうか、やっぱ知らなかった人、俺だけじゃないよね。
俺も別扱いするものだとばかり思っていたから。
>>530の、9xでは区別しなかったって聞いて、
そう思い込んでいた理由も納得した。
536デフォルトの名無しさん:2006/01/18(水) 22:14:26
コンピュータが(Win2kだとCtrl+Alt+Deleteとかで)ロックされているのを
検出する方法ってありますか?

ロックする方法はわかったんですが、状態を検出する方法がわかりません…。
537デフォルトの名無しさん:2006/01/18(水) 23:30:58
"A.txt"と、"A.txt"は区別されるようだな。
538520:2006/01/19(木) 00:09:16
>>521
どのような処理をすればいいか分かりません。
539デフォルトの名無しさん:2006/01/19(木) 00:10:46
解放するもん処理して終了すればいいじゃない
540デフォルトの名無しさん:2006/01/19(木) 00:21:38
>>538
好きに汁
541デフォルトの名無しさん:2006/01/19(木) 00:36:35
DLLをLoadLibrary()して、
DLL内部の関数をGetProcAddress()で取得後、そのDLL内関数を実行しました。

処理終了後、FreeLibrary()でLoadLibrary()の戻り値を渡したんですが、
その際に、関数内で宣言しておいた260バイトのchar配列の先頭エリア4バイトの
内容が破壊されていまいます。

なにか使い方が間違っているんでしょうか?
心当たりのある方いらっしゃいますか?

XPpro SP2、VisualStudio.NET2003です。
542デフォルトの名無しさん:2006/01/19(木) 00:42:25
おーい、誰かエスパー呼んでこい!
>>541がエスパーをご所望だ
543デフォルトの名無しさん:2006/01/19(木) 00:51:12
>>541
_stdcall とか _cdeclがらみ、と透視。
544デフォルトの名無しさん:2006/01/19(木) 01:04:12
「DLL内の関数」が static char hoge[260] を return していると妄想
545デフォルトの名無しさん:2006/01/19(木) 01:08:33
こんな感じです
int AAAA(char *pszSrcPath, char *pszLzhFilePath)
{
HINSTANCE hXXXX;
PFUNC pcsFunc;
int iResult;
char *pszHomeDir;
char szHomeDir[MAX_PATH];
char *pszLastSep;
// カレントディレクトリ取得
pszHomeDir = getcwd(szHomeDir, MAX_PATH);
strcpy(szParentDir, "D:\\TEMP");
// 対象データが存在するディレクトリに移動する
chdir(szParentDir);
iResult = -1;
// DLL読込
hXXXX = LoadLibrary("XXXXX.dll");
if (hXXXX != NULL) {
// Unlha()APIの呼び出し
pcsFunc = (PFUNC)GetProcAddress(hUnlha, "YYY");
if (pcsFunc != NULL) {
iResult = (*(pcsFunc)(FALSE);
}
// DLL解放
// →ここまではszHomeDirは正しい
FreeLibrary(hXXXX);
// →ここにくると、szHomeDirの先頭4バイトが別な値に書き換えられる。
}
chdir(szHomeDir);
return(iResult);

}
546デフォルトの名無しさん:2006/01/19(木) 01:24:09
warota
547デフォルトの名無しさん:2006/01/19(木) 01:27:50
せっかく伏字にしたのに「Unlha()APIの呼び出し」って・・・。
548デフォルトの名無しさん:2006/01/19(木) 01:34:34
スプレッドシートを扱いたいのですが、どのような方法があるのでしょうか?
549デフォルトの名無しさん:2006/01/19(木) 01:40:15
Excelを買えばいいよ
550デフォルトの名無しさん:2006/01/19(木) 02:16:47
>>545
PFUNCの定義は
551デフォルトの名無しさん:2006/01/19(木) 02:34:07
>>545
szParentDirって?
552デフォルトの名無しさん:2006/01/19(木) 04:28:51
>>522
CopyFileの第3引数をTRUEにしたら?
それなら実際に同名ファイルが存在する場合以外は余分なAPI呼び出しは発生しない
553デフォルトの名無しさん:2006/01/19(木) 09:01:09
>>545
> iResult = (*(pcsFunc)(FALSE);

カッコの対応も合ってないじゃん。
せめてコンパイルくらいは通して欲しいものだな。

# 出来れば、問題が再現する最低限のコードを、
# 再発する事も確認して載せて欲しいね。
554デフォルトの名無しさん:2006/01/19(木) 10:42:16
>>545
pszHomeDirを参照するところやszParentDirをセットしてるところでメ
モリ破壊を起こしてるかもしれない。pcsFuncの呼び出しでメモリ破壊
してるかもしれない。

・変に省略するな
・unlha.dllを使うことを隠す必要なんてない
555デフォルトの名無しさん:2006/01/19(木) 10:47:36
>>545
すでに>>543で正しい答えが書かれてると思うよ。
556541:2006/01/19(木) 11:22:56
543さんの透視の通りでした。
おさわがせしました。
557デフォルトの名無しさん:2006/01/19(木) 13:39:17
HRESULTとかLSESULTって何でしょうか・
558デフォルトの名無しさん:2006/01/19(木) 13:43:30
LSESULTに該当するページが見つかりませんでした。

検索のヒント
キーワードに誤字・脱字がないか確かめてください。
違うキーワードを使ってみてください。
より一般的な言葉を使ってみてください。
559デフォルトの名無しさん:2006/01/19(木) 13:59:05
>>557
LRESULTはともかくHRESULTはここをよーく読んどけ。
ttp://msdn.microsoft.com/library/en-us/com/html/15f3ae3e-1794-4948-a7aa-6309a703364b.asp
560498:2006/01/19(木) 15:02:07
>>498です。

9x系のバグのようです。
ttp://hp.vector.co.jp/authors/VA020994/Tips/sub3-2-013.htm

親を閉じる時、自動で一緒に子が閉じられたり、
オーナーを閉じる時、自動で一緒に非オーナーが閉じられますが、
それも手動の時と同じようにダメなようです。

もちろん、ボタンとかは大丈夫なので、
タイトルがあるウィンドウだとダメとかなんですかね。

いろいろメッセージの順序を工夫して実験しましたが、
親やオーナーのWM_CLOSEに誘発して
子や非オーナーを閉じる事自体がダメなようです。

子や非オーナーを閉じないと、親やオーナーは閉じられない、
親やオーナーを閉じようとした時、まず子や非オーナーが閉じられ、
もう一度親やオーナーを閉じようとすると、閉じる事が出来る、
みたいにしないといけないようです。
561デフォルトの名無しさん:2006/01/19(木) 16:23:30
>>498
ウィンドウBでPostQuitMessage()を呼んでいたりしないよな?
後、WM_QUITは送るな。

って言うか、ウィンドウAのWM_CLOSEを受信に、
ウィンドウBにWM_CLOSEを送信するだけでいけない?
562520:2006/01/19(木) 17:05:59
>>539-540
分かりました。そうします。
563デフォルトの名無しさん:2006/01/19(木) 17:11:51
>>498
A の WM_DESTROY ハンドラで B に WM_CLOSE を PostMessage すればOK。
だと思うけど。
564498:2006/01/19(木) 18:35:03
>>561
子や非オーナーの場合は、PostQuitMessageが
無くても大丈夫という意味ですか?

Bの方は、単体でも起動できるプログラムなので、
普通にPostQuitMessageをしていました。

実験してみます。

>>563
それをやっていますが、うまくいきません。
PostとSendを変えたり、Sleepでまってみたりしたんですが、
それではダメなようです。
565デフォルトの名無しさん:2006/01/19(木) 19:17:43
>>564
> Bの方は、単体でも起動できるプログラムなので、

ウィンドウAとBは別のプロセスなのか?
状況があまりにも見えなさすぎ。
566498:2006/01/19(木) 19:24:54
http://www.sm.rim.or.jp/~shishido/mdialog.html
ここの様な感じです。

そこでは、EnableWindow(hwMain,FALSE);をしているので、
Bを閉じずにAを閉じる事が出来ないので問題ありません。

作りたいのが、ビットマップビューアーみたいなソフトなので、
A、Bどっちにも常にさわれるようにしたいので、
EnableWindow(hwMain,FALSE)がない状態です。
567498:2006/01/19(木) 19:31:50
>>564
実験した結果はダメでした。

ただ、子、非オーナーなどBのウィンドウには
PostQuitMessageが必要ない事が分かり、勉強になりました。

PostQuitMessageの引数にhWndがないという事で、
hWndを終了というよりかは、hInstanceを終了する感じなんですかね。
568デフォルトの名無しさん:2006/01/19(木) 19:33:09
>>566
モーダルとモードレスでは仕組みが違う。
そのサイトのやり方では藻前のやりたい事は出来ない。
基礎から勉強し直した方がいいよ。
569デフォルトの名無しさん:2006/01/19(木) 19:34:26
>>566
ただのバグでしょう。
モーダルダイアログでDialog側のディスパッチループが走っている最中に
外側のディスパッチループを終了しようとしていたり、
シングルスレッドなのに「Sleepで待つ」とか書かれていたり、
ちょっと正常な設計とは思えません。

モードレスダイアログに変更してください。
570デフォルトの名無しさん:2006/01/19(木) 19:36:33
というか、GetMessageのループを脱出するためのモノだな。
PostQuitMessageは。
571498:2006/01/19(木) 19:42:54
ありがとうございます。

>>568>>569
キーワードをいただきました。
別ウィンドウの出し方は、それぐらいしか知らなかったので。

>>570
理解しました。
572デフォルトの名無しさん:2006/01/19(木) 21:06:21
GetLastErrorとFormatMessage
使うときバッファの長さはいくらあれば足りますか
573デフォルトの名無しさん:2006/01/19(木) 21:10:34
>>572
FORMAT_MESSAGE_ALLOCATE_BUFFERを指定すれば向こうでメモリ確保してくれる。
このときが(俺にとっては)LocalFreeを使う唯一の機会になっている。
574デフォルトの名無しさん:2006/01/19(木) 21:13:52
なるほど
575デフォルトの名無しさん:2006/01/19(木) 21:32:22
>>572
MSDNにサンプルまで載ってるのに…
576デフォルトの名無しさん:2006/01/19(木) 22:20:35
>>575
俺なんかあのサンプルをまんまコピーして使ってるよ
577デフォルトの名無しさん:2006/01/19(木) 23:02:52
DIBとして確保したメモリって、連続していることが保証されてましたっけ。

それとも必ず pointer[x + y * width] みたいにアクセスする
必要がある(==最後にゴミがつく可能性がある)のでしたっけ。
578デフォルトの名無しさん:2006/01/19(木) 23:47:35
DIBが4byte境界に揃えられない状況ってあったっけ?
579デフォルトの名無しさん:2006/01/19(木) 23:50:40
おまいら心がすさんでるな。
丁寧におしえてやろうって言う心が無いな。
たとえスレ違いでもわかるなら答えてやるって心意気がほしいな。

おれは答えないけどな。
580デフォルトの名無しさん:2006/01/19(木) 23:50:43
ピザでも食ってろDIB
581デフォルトの名無しさん:2006/01/19(木) 23:54:44
>>580
ピザウマスwww
582577:2006/01/20(金) 00:08:36
>>578
DirectDrawでのバッファなんかだとゴミが付くんですよね。
で、DIBはどうだったかなぁと。
583デフォルトの名無しさん:2006/01/20(金) 01:05:20
タブコントロールを使いたいのですがいまいちわかりません。
2種類、CreateWindowで指定して作る方法とリソースファイルから作る方法がありますが
どっちでやってもタブコントロールの上にボタンとかをおきたいのですが
どっかいいサンプルなどおいてある場所教えていただけませんか?
584デフォルトの名無しさん:2006/01/20(金) 01:16:10
585デフォルトの名無しさん:2006/01/20(金) 02:56:01
swith (uint)
case ...

以外でボタンが押されたことをあらわすやつってある?
質問の意味がわからない人は言ってください。
多分これでわかると思いますけど。わからなかったらスマソ
586デフォルトの名無しさん:2006/01/20(金) 03:06:05
>>584
わたしも参考になりました。
ありがとうございます。
ちなみに>>583とは別人です。

あと質問させてもらいます。
エディットボックスで変換確定してエンターボタンを押すと
もうひとつのウインドウに表示させたいのですが、
エディットボックスで変換修正確定してエンターボタンを押すと

実質そのエンターボタンがIDC_BUTTONを押したときのような操作をするapiはあるのでしょうか?
質問の文がわかりにくいのはわかりますが・・同表現したらいいのかわかりません。
よろしくお願いします。
587デフォルトの名無しさん:2006/01/20(金) 03:22:24
>>586
EN_CHANGE使うんじゃ駄目?
588デフォルトの名無しさん:2006/01/20(金) 03:44:29
VC6にて、ActiveXでWebページ内で動くプログラムを作ってます。
リソースエディタでFORMVIEWのダイアログを作り、ClassWizard にて CFormView派生のクラスを作成。
CSampleCtl (プロジェクトをSampleとして作った場合のActiveX Controlのクラス) にて、
OnCreate で フォームビューのクラスを Create しているのですが、失敗してしまいます。(Create で 0 が返る)

失敗するのは、コントロールウィザードから TreeView(Microsoft TreeView Control) などをフォームに貼り付けた場合で、
スタティックテキストやエディットボックスのみのフォームでは失敗せず、ブラウザでの表示も確認しています。

TreeViewやListViewを使いたいのですが、どうすればいいのでしょうか。
プロジェクトは、プロジェクトウィザードのMFCActiveXコントロールから作成しています。
589デフォルトの名無しさん:2006/01/20(金) 04:46:52
CreateThreadを勉強のために使っています。
CreateThreadに複数の引数を渡すには
構造体をつかうということがわかりました。
他のやり方がありますか?
590デフォルトの名無しさん:2006/01/20(金) 07:10:14
乱数を取得するWINAPIって無いですか?
C++で自作DLLを作ってるんですがプログラムサイズを縮小化したいので
乱数取得にMSVCRT.DLLのrand関数を使いたくないんですが
591デフォルトの名無しさん:2006/01/20(金) 08:40:22
592デフォルトの名無しさん:2006/01/20(金) 08:46:31
っつーかMTレベルが欲しいならアレだが
MSVCRTと同じアルゴリズムのrandで十分なら
線形合同式一行書くだけだろ
593デフォルトの名無しさん:2006/01/20(金) 08:47:38
ちょっと、毛色は違うけど
CryptGenRandomとかはどーだwww
594デフォルトの名無しさん:2006/01/20(金) 08:49:45
CryptGenRandom呼ぶよりは線形合同法を自分で書くほうが小さくなる希ガス。
595デフォルトの名無しさん:2006/01/20(金) 08:51:09
http://www001.upp.so-net.ne.jp/isaku/rand.html

/*UNIX*/
static long x=1;
void srand(unsigned s) { x=s; }
long rand() { x=x*1103515245+12345; return x&2147483647; }

/*DOS-Windows*/
static long x=S;
int rand() { x=x*A+C; return(int)(x>>16)&32767; }
void srand(unsigned s) { x=s; if (F) rand(); }

/usr/5bin/cc A=1103515245, C=12345, F=0, S=1
TurboC 1.5 A=22695477, C=1, F=0, S=1
Visual C++: A=214013, C=2531011, F=0, S=1
Borland C++: A=22695477, C=1, F=1, S=22695478

X[n]=A*X[n-1]+C (mod 4294967296)
596デフォルトの名無しさん:2006/01/20(金) 08:54:24
>>585
ちょwwwわかんねぇwww
597デフォルトの名無しさん:2006/01/20(金) 08:55:51
乱数ってこんな単純な仕組みだったんですか?
598デフォルトの名無しさん:2006/01/20(金) 08:59:20
うん
599デフォルトの名無しさん:2006/01/20(金) 09:15:35
MTはもっと面倒だけどね。
600デフォルトの名無しさん:2006/01/20(金) 09:22:35
標準Cのrandよりいいのか・・・
601デフォルトの名無しさん:2006/01/20(金) 10:57:32
>>577
1lineがlong境界で揃うのは32bitDIBだけじゃないんですか?
8bitで横が4の倍数もか。
602デフォルトの名無しさん:2006/01/20(金) 11:10:22
>>601
だけじゃない

幅、bppに関わらず常に4の倍数バイト
圧縮したときはシランがw
603デフォルトの名無しさん:2006/01/20(金) 11:44:17
>>566
あの記事のコードでSendMessage{WM_COMMAND, IDOK}で終了することはできません。
メッセージループはGetMessageで待ったままになるからです。
DialogBoxの詳しい解説はJeffrey Richter:"Windows95:A Developer's Guide"
(新古書入手可能です)

あなたの要求を満たす方法は、単にCreateWindow/DestroyWindow
だけで良いと思います(メッセージループ不用)。
604デフォルトの名無しさん:2006/01/20(金) 17:55:35
VC++超初心者会議室

はどこに行っちゃったんでしょうか?
605デフォルトの名無しさん:2006/01/20(金) 18:53:52
複数のJpegファイルから動画ファイルを作成するソフトを作ろうと思って
Windows Media Encoderを触っていたのですが、実現の方法がわかりませんでした。
そもそも、Media Encoderで連続したJpegからWMVって作れるのでしょうか???
606デフォルトの名無しさん:2006/01/20(金) 19:03:13
604
ttp://m--takahashi.com/bbs.htm
旧ドメインは失効したと書いてある。
607デフォルトの名無しさん:2006/01/20(金) 19:26:08
605
Windows Media エンコーダ SDKを使ったことないけど
エンコードはDirect Showではないだろか。
608デフォルトの名無しさん:2006/01/20(金) 20:56:20
>>606
90日経ってから取り戻すつもりなのか?
絶対に業者に取られるな
609デフォルトの名無しさん:2006/01/20(金) 21:18:27
すいません、ちょっとお尋ねします。
EnumWindows(EnumWindowsProc LPARAM)で、EnumWindowsProcを呼び出す時、
EnumWindowsProcにクラスや構造体のポインタを渡すいい方法って
ありますでしょうか。
610デフォルトの名無しさん:2006/01/20(金) 21:21:40
つ LPARAM
611609:2006/01/20(金) 21:39:54
早速のレス、ありがとうございます。う〜む、やはり渡すとしたら
LPARAMで渡すんですよね・・・前に試した時は、KOUZOU* pSt;
EnumWindows( EnumProc (LPARAM)pSt);と言う形で投げて、
EnumProc( hwnd, lp);でうけて、lp->member;と使おうとしたら、
「->の右にこれるのは、クラスのポインタだけじゃ!」
と怒られちゃったんですが、なんか私、勘違いしていますか?
重ね重ねの質問ですいませんが、よろしくお願いします。
612デフォルトの名無しさん:2006/01/20(金) 21:53:58
KOUZOU* pSt = (KOUZOU*)lp;
pSt->member;
とか
((KOUZOU*)lp)->member;
とかして元の型に戻さないと。
613デフォルトの名無しさん:2006/01/20(金) 22:03:22
C++ならreinterpret_cast<KOUZOU*>(lp)->member推奨。
614609:2006/01/20(金) 22:07:16
>>612,613
そ、そうか・・・戻し損ねていたのか・・・orz

ご指摘、ご教授どうもありがとうございます。感謝、感謝です。m(--)m
615498:2006/01/20(金) 22:51:25
>>603
こういう感じでOKですか?(コーディングスタイルがきもいので注意)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1514.txt

一応、残骸が残るバグはなくなりました。
ただ、他に問題がありましたら教えてください。

この方法でOKなら、リソースや可変長配列を
使う必要がないので、こちらの方が楽な気がします。
616デフォルトの名無しさん:2006/01/20(金) 22:55:56
winmainからウィンドウ作らずにダイアログを作ったんですがこの状態で
きーが押されてるとかとれますか?
617デフォルトの名無しさん:2006/01/20(金) 22:57:26
教えてくんで悪いけど、良書があったら紹介して欲しい
618デフォルトの名無しさん:2006/01/20(金) 23:06:07
>>616
WM_GETDLGCODE
619デフォルトの名無しさん:2006/01/20(金) 23:34:45
>>617
Matt Pietrek:"Windows Internals"
Windows3.1の解析本。たぶん新古書入手可能。
620デフォルトの名無しさん:2006/01/20(金) 23:37:31
Thanks
621デフォルトの名無しさん:2006/01/20(金) 23:57:56
初歩的なこと聞きますが、
DrawTextで文字列をウィンドウに出力させるプログラムつくったんですが、
ウインドウに収まらず、縦スクロールつけたんですが、スクロールさせると
消えてしまいます。なんかいい方法あったらご教授ください。
622デフォルトの名無しさん:2006/01/21(土) 00:16:15
>>621
つ裏画面
623デフォルトの名無しさん:2006/01/21(土) 00:31:50
InvalidateRect()
624デフォルトの名無しさん:2006/01/21(土) 00:32:47
塚WM_PAINTで描いてねんでねか?
625621:2006/01/21(土) 00:37:06
WM_PAINTで書いてますよ。
626デフォルトの名無しさん:2006/01/21(土) 00:55:08
ならWM_VSCROLL/WM_HSCROLL受けて
よしなに描き直せば
627デフォルトの名無しさん:2006/01/21(土) 01:59:48
>>591-600
遅くなりましたがthxです うまく組み込めました!
628デフォルトの名無しさん:2006/01/21(土) 02:39:23
今色々本見比べてるんだけどエントリポイント?が
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)

int PASCAL WinMain(HINSTANCE hInst,HINSTANCE hPrev,char *CmdLine,int CmdShow);
ってあるんだ。
WINAPIとPASCALってどう違うんでしょうか?
629デフォルトの名無しさん:2006/01/21(土) 02:49:38
WTypes.h
#define FAR _far
#define PASCAL _pascal
#define WINAPI FAR PASCAL

ついでに言うとWin32では_far、_nearは意味を持たない。
630デフォルトの名無しさん:2006/01/21(土) 07:00:02
>>628
スタックに積んだ引数を呼び出し側でpopするか、呼ばれた側でpopするかの違い。
631デフォルトの名無しさん:2006/01/21(土) 07:45:42
>>629
それからWin32ではWINAPIは__stdcallだな(__pascalとはスタックに積む順番が違う)
>>630
それは__cdeclとの違い
632デフォルトの名無しさん:2006/01/21(土) 09:06:10
>>628
Win16ではPASCALだったがWin32でWINAPIになった。
互換性のためWin32のヘッダでは#define PASCAL __stacallと定義されている。

蛇足だが本当にpascal形式が使いたければ__pascalと書けば使える。
633628:2006/01/21(土) 09:33:45
皆さんレスありがとうございます
つまり今はWINAPIを使うのが普通って事ですか。
スタックに積んだ引数ってのが想像しにくい(スタックて後入れ先出しだっけ・・・
とりあえずおいて置きます
634デフォルトの名無しさん:2006/01/21(土) 09:57:09
今はWINAPIを使うのが普通
635デフォルトの名無しさん:2006/01/21(土) 10:01:02
>スタックて後入れ先出しだっけ

参照されるときは結局
[ebp+NN]とかアドレッシングしてアクセスされるから
後入れ先出しとは言えないですね。

呼ぶ側がパラメータをスタックにPUSHしてからCALLするだけだから
後入れ先出しの順はパラメータが左からか右からかの違いに相当します。
636デフォルトの名無しさん:2006/01/21(土) 10:19:15
SetClassLong関数を用いて背景色を設定する場合

SetClassLong(hWnd, GCL_HBRBACKGROUND, (LONG)CreateSolidBrush(RGB(0,0,0)));
などとすれば出来ますよね。
そこでCreateSolidBrush作成したオブジェクトについてなんですが、こいつは遅かれ早かれ
開発者がDeleteObject削除しなければなりませんよね?
今勉強しているサイトにはどこにも説明が無いので聞く所存なのですが、

HBRUSH hBr = CreateSolidBrush(RGB(255,0,0);
SetClassLong(hWnd,GCL_HBRBACKGROUND,hBr);
DeleteObject(hBr);
の様に、SetClassLongで現在設定されているブラシは削除するのはまずいのでしょうか?
637デフォルトの名無しさん:2006/01/21(土) 11:02:16
まずい
WM_DESTROYWINDOW
あたりを受け取ってから
DeleteObject
638デフォルトの名無しさん:2006/01/21(土) 14:01:49
皆さん、
一番かっこいい名前のWin32APIって何だと思いますか?
639デフォルトの名無しさん:2006/01/21(土) 14:15:27
IReconcilableObject::GetProgressFeedbackMaxEstimate
640デフォルトの名無しさん:2006/01/21(土) 14:39:38
やっとこのスレに書き込まれていることが大体理解できるようになった
完全に理解するにはあと3ヶ月だな
641デフォルトの名無しさん:2006/01/21(土) 14:40:58
>>636
MSDNのWNDCLASSEXの項にはUnregiserClassExを呼んだ時に背景のブラシは削除されると書いてある。
あと、SetClassLongPtrを使いなさい。
642デフォルトの名無しさん:2006/01/21(土) 14:46:07
リストボックスのテキストを全部または特定の行だけ消す方法がわかりません。
タブコントールにリストボックスをくっつけて特定のタブが選択された時に
そのタブにのっかってるリストボックスにテキスト表示はできたんですが、
WM_PAINTのときに書いてたらタブを一度他のところに切り替えてもう一度タブ
を戻したら表示させたテキストが複数になちゃいました。
そうならない方法どなたか教えて頂ければうれしいです。
643デフォルトの名無しさん:2006/01/21(土) 16:05:54
>>638
SetLayeredWindowAttributes
644デフォルトの名無しさん:2006/01/21(土) 17:24:33
>>640
3ヶ月後にはこのスレに書き込まれていることが釣りに思えてくる
645デフォルトの名無しさん:2006/01/21(土) 18:41:24
実際釣りなんだがな
646デフォルトの名無しさん:2006/01/21(土) 19:09:00
>>645
そうわかるまでにはもう三ヶ月かかる
647デフォルトの名無しさん:2006/01/21(土) 20:54:07
スクリーンセーバーが起動したりスタンバイしないようにソフトウェア側で制御するには
どうしたらいいでしょうか?
ウィンドウズメディアプレイアーを再生しているときみたいに、
自分のアプリケーションが起動している間はスクリーンセーバーが
起動したりスタンバイ状態になってほしくないのです。
Winsockで通信中にスタンバイ状態になると挙動がおかしくなるので困っています。
648デフォルトの名無しさん:2006/01/21(土) 21:02:26
>>647
SystemParametersInfo()でSPI_SETSCREENSAVEACTIVEを使って
スクリーンセーバーが動いてることにしちゃったり、
WM_POWERBROADCASTを処理してBROADCAST_QUERY_DENYを
返したり。
649647:2006/01/21(土) 21:27:24
>>648
ありがとうございます。
やってみます!
650デフォルトの名無しさん:2006/01/21(土) 22:34:25
>>588なんですがわかりませんか?
651デフォルトの名無しさん:2006/01/21(土) 23:42:53
>>647
SystemParametersInfo()は推奨できない。

自分のアプリケーションがアクティブなときだけ拒否したい場合は
WM_SYSCOMMANDメッセージのSC_MONITORPOWERと
SC_SCREENSAVEにFALSEを返せば防げばいい。

WinSockで問題があるなら、スクリーンセーバーはどうでもいいと
思うので、WM_POWERBROADCASTのPBT_APMQUERYSUSPENDを
処理すればいいかと。
あるいは、スタンバイ状態に移行するときと復帰したときの処理を
ちゃんと書いて、スタンバイ状態になっても問題ないようにするとか。
652デフォルトの名無しさん:2006/01/22(日) 03:05:42
>>650
スレタイを100回ぐらい読むといいよ

当然、大声でやると効果的
653デフォルトの名無しさん:2006/01/22(日) 12:03:28
>>652
何言ってるんですか?
TreeViewもListViewもWin32APIで作れるじゃないですか。
654デフォルトの名無しさん:2006/01/22(日) 12:28:20
プロジェクトは、プロジェクトウィザードのMFCActiveXコントロールから作成しています。
655デフォルトの名無しさん:2006/01/22(日) 12:46:29
100回じゃ足りない奴もいるってことか、勉強になるスレだ

656デフォルトの名無しさん:2006/01/22(日) 13:04:08
死ねばいいってことでFA?
657デフォルトの名無しさん:2006/01/22(日) 13:40:52
650≠653なんて言っても興味ないと思うけど、つまりMFC相談所にいけと。
ActiveX関係がなかったんでWin32でここに書いたんだけど、誘導ってことでMFC相談室行ってきます。
658デフォルトの名無しさん:2006/01/22(日) 15:35:53
>>657
【OLE】オートメーション総合スレ【ActiveX】
http://pc8.2ch.net/test/read.cgi/tech/1137771139/
659デフォルトの名無しさん:2006/01/22(日) 17:44:37
Win32APIって全部スレッドセーフなんですか?
660デフォルトの名無しさん:2006/01/22(日) 17:58:31
>>659
俺は全部がスレッドセーフかどうか知らないけど、中にはこんなのも存在する。

そもそも作成したスレッドからしか触れないからスレッド安全かどうか気にする必要のないというものもある。
ヒープ関係の関数はスレッドセーフにしない代わりに高速化するという指定を与えられる。
661デフォルトの名無しさん:2006/01/23(月) 02:15:47
計算結果をウィンドウを開いて描画しようと思ってます。
printf,scanfなどの関数を併用することはできますか?
描画はできるんですけどこういう関数は全部無視されちゃいます。
ちなみにborland c++ compiler5.5使ってます
662デフォルトの名無しさん:2006/01/23(月) 02:23:44
printf()とかscanf()はコマンドプロンプトとかにしか使えない
WinAPIには文字出力とかの概念は存在しないからTextOut()で文字を描画する
663661:2006/01/23(月) 02:42:28
ありがとうございます。
じゃあ、ファイルポインタ使ってデータファイル読み込み→
計算→描画 的なことはできないんですかね?
664デフォルトの名無しさん:2006/01/23(月) 02:48:41
は? TextOut使えって言ってるじゃん?
665661:2006/01/23(月) 03:00:36
説明が悪かったです。すいません。
データファイル読み込み→計算→計算結果を図で描画
ということをしようと思ってます。
666デフォルトの名無しさん:2006/01/23(月) 03:02:19
>>661,663
計算結果をテキストで出力したいだけなら、
コンソールアプリケーションにする。

GUIを使いながらprintf等も使いたいなら
AllocConsole()を使ってコンソールを割り当てると楽。
667661:2006/01/23(月) 03:20:18
>>666
ありがとうございます。AllocConsoleでscanfも使えますか?
scanfでデータファイル名指定、データファイルを読み込んで計算
ということもやりたいんですけど。
668デフォルトの名無しさん:2006/01/23(月) 03:25:15
やってみれ
669661:2006/01/23(月) 03:27:16
>>668
やってみます
こんな時間に付き合っていただいて本当にありがとうございました。
おやすみなさい
670デフォルトの名無しさん:2006/01/23(月) 05:08:45
テンプレにある猫でも〜〜 1章〜15章あたりで勉強すると良いよ
671デフォルトの名無しさん:2006/01/23(月) 05:34:17
>>667
出力なら>>296
入力はCONIN$に変えればいいかも。
672デフォルトの名無しさん:2006/01/23(月) 09:03:17
>>661-671
sprintf()やsscanf()に一言も触れないのか?
潜在的なセキュリティリスクに関する議論も再燃するはずだったのだが。
673デフォルトの名無しさん:2006/01/23(月) 09:11:42
独りでやってろ
674デフォルトの名無しさん:2006/01/23(月) 09:12:36
再燃再燃再燃再燃セキュリティリスク
再燃再燃再燃再燃セキュリティリスク
再燃再燃再燃再燃セキュリティリスク
再燃再燃再燃再燃セキュリティリスク
再燃再燃再燃再燃セキュリティリスク
再燃再燃再燃再燃セキュリティリスク
再燃再燃再燃再燃セキュリティリスク
再燃再燃再燃再燃セキュリティリスク
675デフォルトの名無しさん:2006/01/23(月) 13:46:16
sprintf()やsscanf()というAPI
676デフォルトの名無しさん:2006/01/23(月) 13:56:40
sscanf()はまだしも、何でsprintf()が出てくるのだろう。
677デフォルトの名無しさん:2006/01/23(月) 14:32:24
彼は最近ようやく知った情報を、語りたくてしかたなかったのだよ
678デフォルトの名無しさん:2006/01/23(月) 15:48:08
自プロセスが動かされているユーザを他のユーザに切り替える事は可能ですか?
CreateProcessAsUserで別プロセスとして起動させるしかないんでしょうか?
679デフォルトの名無しさん:2006/01/23(月) 16:20:30
通常のウィンドウ内で日本語入力した時に出る文字達の位置を
エディタの様に変えることは出来ないでしょうか?
680デフォルトの名無しさん:2006/01/23(月) 17:38:25
>>679
できるはず。できるからこそエディタはそうなっているんだ。

俺もやりかたは知らないけれどとりあえず。
681デフォルトの名無しさん:2006/01/23(月) 17:42:30
WM_IMESTARTCOMPOSITIONでImmSetCompositionWindow
682デフォルトの名無しさん:2006/01/23(月) 20:59:22
>>676
前スレで脆弱性になる/ならないで論争やったからじゃね?
683デフォルトの名無しさん:2006/01/23(月) 21:16:28
諸々のハンドルの多くは実行ユーザに対してのみアクセス権限が割り当てられている。
プロセス実行中にユーザを切り替えることが可能になったら、
他のユーザに切り替えたあと、あらゆるハンドルが扱えなくなるので、メンテナンスが面倒だと思う。

ハンドルを子プロセスで継承可能&ユーザアクセス権限を設定して、
ハンドル値を子プロセス実行文字列の引数や共有メモリで渡すことでハンドルをそのまま使える。
684デフォルトの名無しさん:2006/01/23(月) 23:13:58
どうせアクセス権を設定しなきゃならないなら
その後子プロセスを作っても作らなくても面倒さに変わりはないんじゃね?
685デフォルトの名無しさん:2006/01/23(月) 23:18:20
新たに設定するユーザの権限外のアクセスが(既存ハンドルを通じて)行えると、
セキュリティホールの原因になるんじゃない?
686デフォルトの名無しさん:2006/01/23(月) 23:41:25
>>684-685
チャットじゃないので疑問形で同意を求める風を装う甘えた文章はやめろ。
断言できないのなら回答するな。
687デフォルトの名無しさん:2006/01/23(月) 23:43:05
>>686
しきってんじゃねーよカス
688デフォルトの名無しさん:2006/01/23(月) 23:46:07
今日も機嫌が悪いなw
689デフォルトの名無しさん:2006/01/23(月) 23:46:39
ここは質問スレ。質問するなら質問しろ。回答するなら回答しろ。
断定を避けつつ他人の同意を求める文章は荒らしも同然。
690デフォルトの名無しさん:2006/01/23(月) 23:47:20
まあ、689みたいな書き込みも一種の荒らしなんだけどな。
691デフォルトの名無しさん:2006/01/23(月) 23:51:40
>>690
他の荒らしを黙らせるための書き込みは構わないと思う。

>>684-685
ピントがずれてる。
結論からいうと、必要性が判らないうちは回答するなということだ。
末尾を?にすれば許してもらえるなどと思わないほうがいい。
692デフォルトの名無しさん:2006/01/23(月) 23:58:06
>>691
黙れ
693デフォルトの名無しさん:2006/01/24(火) 00:02:47
694デフォルトの名無しさん:2006/01/24(火) 00:04:08
>>692の1行書き込みの方が>>684-685よりはるかに好感がもてる。
断言できない読書感想文的な無駄なオナニー書き込みより罵倒の方がはるかにマシ。
695デフォルトの名無しさん:2006/01/24(火) 00:04:52
696デフォルトの名無しさん:2006/01/24(火) 00:05:18
自演乙w
697デフォルトの名無しさん:2006/01/24(火) 00:15:27
たかが語尾ひとつでそこまでキモく粘着できるのが信じられんが
そんなに断言してほしけりゃしてやる

どうせアクセス権を設定しなきゃならないなら
その後子プロセスを作っても作らなくても面倒さに変わりはない。

新たに設定するユーザの権限外のアクセスが(既存ハンドルを通じて)行えると、
セキュリティホールの原因になる。

正直何が違うのかさっぱりだね
698678:2006/01/24(火) 00:53:28
変なこと聞いてすいませんでした。
699デフォルトの名無しさん:2006/01/24(火) 02:05:51
なんだこの流れ
700デフォルトの名無しさん:2006/01/24(火) 02:15:49
なんだこのスレもLDショックかよ。
だからあれほど素人は(ry
701デフォルトの名無しさん:2006/01/24(火) 07:42:02
アクティブじゃなくてもキーボード操作に反応するようにしたいのですが
どうやればいいですか?
702デフォルトの名無しさん:2006/01/24(火) 07:44:53
GetAsyncKeyStateをタイマでも使ってポーリングしとけば。
703デフォルトの名無しさん:2006/01/24(火) 07:46:58
効率ワルwww
704デフォルトの名無しさん:2006/01/24(火) 08:42:26
効率のいい方法とやらを教えてくれないか
705デフォルトの名無しさん:2006/01/24(火) 08:50:49
タイマだったらどうしてもラグがあるから
グローバルフックの方がいいかと
706デフォルトの名無しさん:2006/01/24(火) 09:12:06
質問させてください。
win2k,VC6で開発をしています。

ユーザーアカウントに独自の追加情報を加える必要があり色々と
調べてみた結果。windowsのアカウント設定ツールからは使われて
いない(NetUserSetInfoで実際に設定してみて、設定ツール上の
どこにも反映されていないことで確認しました)USER_INFO_*構造体の
usri*_usr_commentの部分に追加できないかと考えています。
ですが、実際に使用するにあたって本当にユーザーが勝手に使ってよい
領域なのかどうかいまいち確証がもてずに困っています。
usri*_usr_commentの使用についてのドキュメント等をご存知の方が
居られましたらお教えいただけると助かります。

よろしくお願いします。

707デフォルトの名無しさん:2006/01/24(火) 11:20:53
自分で自身を解放するクラスをつくりたいんですけど、

void test ()
{
 CTestClass *t = new CTestClass() ;
}

test()で、CTestClassが確保されて起動、その後CTestClass内で処理が必要なくなったら自身を消して解放みたいな。
やっぱりマネージャクラスのようなものが必要なんでしょうか?
708デフォルトの名無しさん:2006/01/24(火) 11:32:43
delete this;
709デフォルトの名無しさん:2006/01/24(火) 11:33:12
>>707
つ[delete this;]
710デフォルトの名無しさん:2006/01/24(火) 11:39:13
つ 「200%スレ違い」
711707:2006/01/24(火) 11:57:52
レスどうもです。

>delete this;
ほんとだ、消えた!。
自分は消せないと思ってた、勉強不足でした。
712679:2006/01/24(火) 12:42:57
ありがとうございました。
無事解決しました。
713デフォルトの名無しさん:2006/01/24(火) 14:41:42
deleteの動作を理解してれば自分を消せないなどと思わなかったろうに
714デフォルトの名無しさん:2006/01/24(火) 15:05:42
CBindStatusCallbackを使ったサンプルコードどっかにないですか?
googleしまくってんだけど、なかなか参考になるコードが無くて、よろしくお願いします。
715デフォルトの名無しさん:2006/01/24(火) 15:08:56
スレ違いATLスレにでもいてら
716デフォルトの名無しさん:2006/01/24(火) 15:48:05
サウンドカードからのデジタル出力を停止させるAPIって存在するの
でしょうか?アナログからの出力はできてもかまわないのですが、デジタル
出力だけ停止させたいのですが。
717デフォルトの名無しさん:2006/01/24(火) 16:07:49
c:\hoge\fuga\moge\unko.txt っていうファイルを作成したい。

hogeもfugaもmogeも存在しないとき、一気にディレクトリつくるAPIなかったっけ?
718デフォルトの名無しさん:2006/01/24(火) 16:13:17
SHCreateDirectoryExかね
719デフォルトの名無しさん:2006/01/24(火) 16:19:14
MakeSureDirectoryPathExists()
720デフォルトの名無しさん:2006/01/24(火) 16:22:30
ちょっとライブラリ使おうとして
プラットフォームSDKをダウンロードしようと思ったら、
MSNになくなったようです。

SDKに変わるものって何になるのでしょうか?
環境はwin2kとXPです。

馬鹿にも解るように優しく教えて下され
721デフォルトの名無しさん:2006/01/24(火) 16:28:53
MSNにあったらビックリだな。
722717:2006/01/24(火) 16:40:48
>>718-719
OoOooOoooOhhh thx!!!
どっちにしようかな〜
723デフォルトの名無しさん:2006/01/24(火) 17:07:16
うちの古いMSDNライブラリにないと思ったら、
SHCreateDirectoryExってWinMeや2000以降なのね。
724デフォルトの名無しさん:2006/01/24(火) 17:11:02
うむ、挙げてから気づいてちょっと使いづらいかなと思った。
725デフォルトの名無しさん:2006/01/24(火) 17:38:47
制限ユーザの為に、レジストリーに書き込めないんですけど、回避方法ありませんか?
726デフォルトの名無しさん:2006/01/24(火) 17:39:58
ini
727725:2006/01/24(火) 17:51:58
COMコンポーネントの登録の必要があるんですが、iniファイルで代用できるって事ですか?
728デフォルトの名無しさん:2006/01/24(火) 17:57:00
最初からそういえコラ
729デフォルトの名無しさん:2006/01/24(火) 19:11:59
>>727
Windows XP なら manifest で出来る。
730デフォルトの名無しさん:2006/01/24(火) 19:17:33
>>701
普通にグローバルキーフック
猫でもSDK編161章
731デフォルトの名無しさん:2006/01/24(火) 19:20:37
>>725>>727
HKEY_CLASSES_ROOT以下は制限ユーザーでも書き込めると思うが。
732720:2006/01/25(水) 01:07:07
D抜けてるし_| ̄|○
意味は通じてるんだから
教えてくれても良いのに(´・ω・`)
733デフォルトの名無しさん:2006/01/25(水) 01:12:22
俺は素でMSNだと思ってた
つかMSNってまだやってるのかね
734デフォルトの名無しさん:2006/01/25(水) 02:00:38
IEのデフォルトスタートページがMSNですよ。
735デフォルトの名無しさん:2006/01/25(水) 02:50:40
LRESULTってなにを返せばいいの?
736デフォルトの名無しさん:2006/01/25(水) 03:13:35
>>732
MSDNのDLサイトから消えたのは2003のSDKに一本化されたからじゃないの?
737デフォルトの名無しさん:2006/01/25(水) 08:28:08
>>735
LRESULTの数値を返せばいいの
738デフォルトの名無しさん:2006/01/25(水) 08:30:43
>>735
特に必要が無ければ0を返せば良い。
これ位訊かなくても本に書いてあるだろ。
739デフォルトの名無しさん:2006/01/25(水) 12:52:23
>>706
情報タダ取りか?
ちゃんと結果を報告しろよ、クズ!!
740デフォルトの名無しさん:2006/01/25(水) 13:11:19
デスクトップ上のウィンドウをWnumWindows関数で列挙して
それを全部半透明にするとデスクトップが暗くなります。
最初はデスクトップまで半透明になっているから暗くなってるのかと思ったのですが、
デスクトップのハンドルを除いて、後を全部半透明にしても暗くなります。
(というかデスクトップのハンドルは列挙されていないっぽい)
デスクトップをそのままにして、他を全部半透明にするにはどうしたらいいでしょうか?
741デフォルトの名無しさん:2006/01/25(水) 13:15:52
暗くなるってどんなのよ?
単に暗い色の壁紙が透けて見えるようになったから、とかじゃないだろうな?
742デフォルトの名無しさん:2006/01/25(水) 13:17:38
spy++で壁紙部分のウィンドウが何かみてみろ。
743デフォルトの名無しさん:2006/01/25(水) 13:26:05
"Program Manager"というウインドがそれっぽい。
744デフォルトの名無しさん:2006/01/25(水) 13:31:09
borland c++を使って勉強中の者です。
不器用なので、フリーのリソースエディタを上手に使えなくて
DialogBoxIndirectでダイアログを作成する事にしたんですが
DialogProcのWM_INITDIALOGで、自前のクラスをnewしたら
deleteする時に止まっちゃいました。

ためしに、DialogProc内にstaticで持つのを止めグローバルにして
DialogBoxIndirectから処理が返ってきた後、deleteしたんですが
それでもダメでした。

DialogBoxIndirectで作成したダイアログに貼り付けた
子ウインドウを、無事に削除する方法を教えてください。
よろしくお願いします。
745デフォルトの名無しさん:2006/01/25(水) 13:32:14
{
static CListView *listview = NULL;

switch(uMsg){
case WM_INITDIALOG:
if((listview = new CListView(hwndDlg)) == NULL){
ERROR;
}
return TRUE;

case WM_COMMAND:
switch(LOWORD(wParam)){
case IDOK:
ここで止まる→delete listview;

EndDialog(hwndDlg, IDOK);
return TRUE;
}
break;
}

return FALSE;
}
746デフォルトの名無しさん:2006/01/25(水) 13:36:10
GetDesktopWindow();
747デフォルトの名無しさん:2006/01/25(水) 13:48:22
>>744
borland c++はよく知らないけど
ダイアログがでてる間に消しちゃダメだろ
748デフォルトの名無しさん:2006/01/25(水) 14:06:07
自前のクラスにバグがあるのでは?
749デフォルトの名無しさん:2006/01/25(水) 14:19:34
ウインドウ作ったらDestroyWindowで破棄する。
子ウインドウの場合は親がやってくれるから自分で破棄する必要はない。
だからdeleteするとすればダイアログが閉じた後で
750デフォルトの名無しさん:2006/01/25(水) 14:21:38
>>744
貼りつけた子ウィンドウはどこでどうやってcreateしたのですか?
751デフォルトの名無しさん:2006/01/25(水) 14:49:09
CListViewのデストラクタがおかしいんじゃねの?
752デフォルトの名無しさん:2006/01/25(水) 16:52:11
解決にならないだろうけど・・・

if(listview!=NULL)
{
  delete listview;
  listview = NULL;
}
753デフォルトの名無しさん:2006/01/25(水) 18:34:00
>>745
止まるって、具体的にはどうなる?
delete が返ってこないということ?
それともそこでエラー?
754725:2006/01/25(水) 19:55:24
制限ユーザでのレジストリーに書き込み(コンポーネントの登録)の件ですが

>729
>Windows XP なら manifest で出来る。
成功しました情報ありがとうございます。
http://www.microsoft.com/japan/msdn/windows/windowsxp/sidexsidewinxp.asp
このサイトが参考になりました。

>731
>>725>>727
HKEY_CLASSES_ROOT以下は制限ユーザーでも書き込めると思うが。
HKEY_CURRENT_USER以外は書き込みが出来ませんでした。

XPでは起動に成功を見たのですが、以前2000での起動が出来ません。
何方か解決方をご存じの方はいらっしゃいませんでしょうか?

具体的には、制限ユーザで自作したアプリをインストールし動作させようとしているのですが、
動作には、インストーラに同梱したコンポーネントが必要なのですがこのコンポーネントのシステムへの登録が
制限ユーザでは出来ずに、起動に失敗してしまいます。(regsvr32で登録エラーを起こしてしまいます)
以上です、よろしくお願いします。
755デフォルトの名無しさん:2006/01/25(水) 20:50:57
GetCursorInfoがエラーする。
compileは通るんだけど、実行すると戻り値が0で、ラストエラーは「パラメータが間違っています。」(コードは87)
ん〜、誰か教えてぇ〜〜〜
756デフォルトの名無しさん:2006/01/25(水) 20:55:26
cbSize
757デフォルトの名無しさん:2006/01/25(水) 21:34:32
>>755
パラメータが間違ってる、と親切に教えられてるのに、
何故、無視するのだね?
758デフォルトの名無しさん:2006/01/25(水) 22:31:36
>>745
そもそもnewは例外を投げるからNULLかどうかの比較は意味がない。
どうしてもやりたければstd::nothrow。
if ((listview = new(std::nothrow) CListView(hwndDlg)) == NULL)
759デフォルトの名無しさん:2006/01/25(水) 22:37:08
VC だか何だったかは new に失敗しても、例外を投げずに 0 を返した気がする。
なので、念のためチェックしといた方が良いと思う。
760デフォルトの名無しさん:2006/01/25(水) 22:41:20
>>759
744-745はBorland C++と書いてある。おそらく無料版だろう。
そいつのnewは例外を投げる。
761デフォルトの名無しさん:2006/01/25(水) 22:44:25
VC++6だな。
VC++2003だと、C++のヘッダをインクルードすると、例外を投げるようになるはず。
762デフォルトの名無しさん:2006/01/25(水) 22:46:07
>>760,761
ほほー、勉強になりました。
サンクス。
763740:2006/01/25(水) 23:09:21
>>741-743
ありがとうございます。
見た感じですが、デスクトップの画面の大きさの
真っ暗なウィンドウがある感じです。
根拠は、半透明にしてから同様の方法で全てのウィンドウの透明度をなくした場合、
デスクトップが真っ黒になるからです。
"Program Manager"を調べてみます。
764740:2006/01/25(水) 23:21:03
ウィンドウハンドルからキャプションを取得して、
"Program Manager"を持つウィンドウを除いたら解決しました!
ありがとうございました!
765デフォルトの名無しさん:2006/01/26(木) 00:45:51
printfでAとWが切り替わるのはどれになりますか?
766デフォルトの名無しさん:2006/01/26(木) 00:46:39
エスパーの方、出番です。
767デフォルトの名無しさん:2006/01/26(木) 00:50:30
ワロス、全然分かんねぇw
768デフォルトの名無しさん:2006/01/26(木) 00:52:47
wprintf, _tprintfとかをご所望ニカ?
769デフォルトの名無しさん:2006/01/26(木) 01:15:53
 _tsetlocale
 _tprintf
770デフォルトの名無しさん:2006/01/26(木) 06:24:48
仕事の関係でドイツ語版のWindowsXPを使っているんだけど、
テキストを入力するときに言語バーのところで日本語を選べるものと
選べない物があるんだけど、これってどういう風に作ると選べるように
なるかわかる人いる? 具体的にはIEのフォーム(URL入力欄はNG)や
Office系はOK。秀丸、EmEditor、xyzzyに始まりEclipse、VisualStudio等
ほとんどのテキストエディター系は入力不可。
正直仕事に支障が出ているので簡単なテキストエディタを作ろうと
思ってるんだけど、普通にTextBoxを配置しただけではやはり日本語は
選べないみたい。ヒントでもいいので何か情報求む。
スレ違いなら誘導お願いします。
771デフォルトの名無しさん:2006/01/26(木) 06:49:06
GlobalIMEがどうこう、と言う話はきいたことあるな。
772デフォルトの名無しさん:2006/01/26(木) 07:22:42
>>770
ざっくり見つけた限りだとこのへんか?

Techniques for Handling Input Languages in Win32
http://www.microsoft.com/globaldev/getWR/steps/WRG_kybrd.mspx#EVE

> by using Unicode edit controls or rich edit controls,
> you enable your application to handle multilingual text input.
773デフォルトの名無しさん:2006/01/26(木) 08:24:20
コントロールパネルの地域と言語のオプションでドイツ語追加して試してみたら(WinXPSP2)、
VC6.0は入力した文字が?になってだめだったけど、秀丸(5.13b2)、メモ帳、VS2003では入力できた。
774デフォルトの名無しさん:2006/01/26(木) 15:53:32
フォルダを開いたときなどに鳴るカチッっていう音は
プログラム上では、どうやって鳴らすんでしょう?
775デフォルトの名無しさん:2006/01/26(木) 16:08:30
OpenFolder
776デフォルトの名無しさん:2006/01/26(木) 16:44:11
既定のサウンド設定
777デフォルトの名無しさん:2006/01/26(木) 16:52:01
外してるような気がしつつMessageBeep
778デフォルトの名無しさん:2006/01/26(木) 17:02:51
WMCreateIndexerの使い方教えてください。
ASFファイルにインデックスをつけたいだけなのですが。
779デフォルトの名無しさん:2006/01/26(木) 17:49:17
ブラウザでエンコードを自動判別していますが、
あの処理ってどこから情報を取ってくるんですか?
ダウンロードしたhtmlを解析して?
それとも、HttpSendRequestに対応するフラグがあるの?
780デフォルトの名無しさん:2006/01/26(木) 17:59:31
・HTTPヘッダ
・BOM
・meta要素
・ファイルのバイト列の癖から類推
781デフォルトの名無しさん:2006/01/26(木) 18:01:39
・永年の勘
782デフォルトの名無しさん:2006/01/26(木) 18:04:52
>>779
参考資料
[IE5]文字セットと Internet Explorer 5 の自動選択機能について
http://support.microsoft.com/default.aspx?scid=kb;ja;413581
783774:2006/01/26(木) 18:27:11
皆さん、ありがとうございます。
ttp://forums.belution.com/ja/vc/000/207/29s.shtml
のような記事を見つけたのですが、
レジストリから直接取得するしか無いんでしょうか。
とりあえずは、レジストリからの値の取得の方法を調べねば。
784デフォルトの名無しさん:2006/01/26(木) 19:01:47
特定のキー(たとえばCtrl-Spaceとか)を押すと、
自作のウインドウアプリケーション A (起動済みでバックグラウンドかアイコンになってる)が
フォアグラウンドかつフォーカスがあたるようにしたいのですが、
A の中でどういうAPIを使って操作をしておけばいいでしょうか。
785デフォルトの名無しさん:2006/01/26(木) 19:10:40
RegisterHotKey でできる。

WM_HOTKEY を受け取ったら、フォアグラウンド & フォーカスの処理をすれば良い。
786デフォルトの名無しさん:2006/01/26(木) 19:19:13
グローバルフック
787デフォルトの名無しさん:2006/01/26(木) 19:20:05
激しく右フック
788デフォルトの名無しさん:2006/01/26(木) 20:00:08
ストリームの一覧を所得したいです
789デフォルトの名無しさん:2006/01/26(木) 20:04:51
そうですか
俺は五億円ほど所得したいです
お互いがんばりましょう
790デフォルトの名無しさん:2006/01/26(木) 20:06:37
>>789
つ 所得税
791デフォルトの名無しさん:2006/01/26(木) 21:02:18
>>790
与えてどうするよ
792デフォルトの名無しさん:2006/01/26(木) 21:03:32
コンソールが勝手に閉じて動作が分かりません
どうすればとまるの?
793デフォルトの名無しさん:2006/01/26(木) 21:07:57
>>792
スレ違い
794デフォルトの名無しさん:2006/01/26(木) 21:09:26
>>792
なんのこっちゃ?
VC6ならCtrl+F5とか
795デフォルトの名無しさん:2006/01/26(木) 21:10:50
あ、VC6じゃなくてもか
VCならCtrl+F5
796デフォルトの名無しさん:2006/01/26(木) 21:16:07
昔懐かしのgetch()
797デフォルトの名無しさん:2006/01/26(木) 21:21:44
apiと関係あるか?
798デフォルトの名無しさん:2006/01/26(木) 21:22:15
799779:2006/01/26(木) 21:52:27
>>780
>>781
>>782
ありがとうございます!
探ってみまーす!
800デフォルトの名無しさん:2006/01/26(木) 22:29:22
>>736
thx
801デフォルトの名無しさん:2006/01/26(木) 22:32:45
>>799
IMultiLanguage2::DetectInputCodepage
802799:2006/01/27(金) 08:18:50
>>801
インターフェイスがあるんですねー。
調べてみます。

ありがとうございます!
803778:2006/01/27(金) 09:34:44
Windows Media Format SDKをインストールして
サンプルのdscopy.cppを↓のように書き換えました。

int __cdecl _tmain(int argc, TCHAR *argv[])
{
  USES_CONVERSION;

  // Initialize COM
  HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
  if (FAILED(hr))
    return hr;

  WCHAR wszTargetFile[MAX_PATH];
  MultiByteToWideChar(CP_ACP, 0, "c:\\hoge.asf", -1,
   wszTargetFile, NUMELMS(wszTargetFile));

  hr = IndexFileByFrames(wszTargetFile);

  CoUninitialize();
  return hr;
}

実行すると↓のエラーが出ます。

Indexing Failed (hr=0x8000ffff)!
Press any key to continue

何かわかる人はいらっしゃいませんでしょうか?
804デフォルトの名無しさん:2006/01/27(金) 12:55:20
居るんではないでしょうか
805デフォルトの名無しさん:2006/01/27(金) 12:57:17
>>803
その問題とは関係ないけど:

USES_CONVERSION 使えるなら IndexFileByFrames( A2W("c:\\hoge.asf") ); でいいし、
さらにこんなテストなら IndexFileByFrames( L"c:\\hoge.asf" ); でも十分だと思う。
806デフォルトの名無しさん:2006/01/27(金) 13:29:00
指定パス下を一括で読み取り専用解除する方法ってないですか?

1つ1つSetFileAttributesするしかない?
807デフォルトの名無しさん:2006/01/27(金) 13:34:57
system( "attrib -R * /S /D" );
808デフォルトの名無しさん:2006/01/27(金) 13:52:04
Beep() って鳴らしつづけるの無理?
809デフォルトの名無しさん:2006/01/27(金) 17:44:35
while( 1 )
{
    Beep( 100, 10000 );
}
810778:2006/01/27(金) 17:49:02
CopyASF()を呼べばインデックスをつけてくれるようですが
再エンコードするみたいで時間かかりますね。
インデックスだけつけたいのですが、困りました。
811デフォルトの名無しさん:2006/01/27(金) 17:57:51
>>809
説明が足りなかった。
非同期で鳴らし続けるってこと。
しかもそれじゃ10秒ごとにプチプチ言うよ。
途中で止められないし。
812778:2006/01/27(金) 18:03:38
昔は
10 BEEP 1
でよかったね。
813デフォルトの名無しさん:2006/01/27(金) 18:40:40
>785,786
RegisterHotKeyとグローバルフックの両方を試して、上手くいきました。
グローバルフックでは、キーを押しても反応しないアプリケーション
(キー入力を吸い取ってる?)があるようなので、
今回はRegisterのほうを使います。ありがとうございました。
814デフォルトの名無しさん:2006/01/27(金) 19:47:22
ウィンドウをクライアント領域のサイズを指定して生成することができる関数ってないでしょうか?
横スクロールゲームなので指定サイズのクライアント領域を持ったウィンドウが必要だす
815デフォルトの名無しさん:2006/01/27(金) 20:14:14
>>814
AdjustWindowRect
816デフォルトの名無しさん:2006/01/27(金) 20:31:07
1. アクティブなウィンドウをデスクトップの一番下に沈めて
2. 1.の後一番手前に来たウィンドウをアクティブにする

というユーティリティを作りたいんですが、2.のウィンドウを検索する方法がわかりません。
どう書けばいいんでしょうか?
817デフォルトの名無しさん:2006/01/27(金) 20:37:46
>>815
ありがとうございました
818デフォルトの名無しさん:2006/01/27(金) 21:26:32
>>816
GetWindowのGW_HWNDNEXTでいいんじゃない?

それと、Win98、Win2000以降はSetForegroundWindowに
制限があるので要注意。
819デフォルトの名無しさん:2006/01/27(金) 21:55:39
>>818
MSDNドキュメントを鵜呑みにしたか?
ドキュメントにあるような制限は実際にはない。
820デフォルトの名無しさん:2006/01/27(金) 22:05:25
821デフォルトの名無しさん:2006/01/27(金) 22:14:55
>>819
分かってないのはお前の方だ。あの制限は全部ちゃんとある。
しかし、フォアグラウンドプロセスからSetForegroundWindowを
呼んだ場合は、普通に実行できる。(これも書いてある)
あの制限は主に、フォアグラウンドではないプロセスから
SetForegroundWindowを呼んだ場合のもの。

816のやろうとしている事は明らかに、SetForegroundWindowの
制限に引っかかる。
822デフォルトの名無しさん:2006/01/27(金) 22:18:13
>>821
本当に自分の目で確認したのか?
実際にテストコードを書いて試したか?
823デフォルトの名無しさん:2006/01/27(金) 22:38:45
福井県ってほんとに実在するのかな?
友達に訊いてまわったけど自分の目で福井県を見たやつは
一人もいないんだ。
824デフォルトの名無しさん:2006/01/27(金) 22:42:50
目で見えないから存在しないというのは
愚かな思い違いだ
825デフォルトの名無しさん:2006/01/27(金) 22:53:23
SetForegroundWindowうまくいかんのよねえ
HWND_TOPMOSTで代用してるけど
これはこれで色々問題あって
826デフォルトの名無しさん:2006/01/27(金) 22:54:43
>>821の色よい返事はまだ?
(・∀・)ニヤニヤ
827デフォルトの名無しさん:2006/01/27(金) 22:56:38
>>819の根拠ってなんなんだろ。
流出ソースでも読んだのかな。

漏れが試した範囲ではXXXだから、
誰のどのPCでもそんな制限など付かないはずニダ
とかじゃないだろうな・・・
828デフォルトの名無しさん:2006/01/27(金) 23:13:00
カスタマイズ系のソフトで
HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundLockTimeout
がいじってあったりすると「ドキュメントにあるような制限は実際にはない」と思えちゃうかも。
829デフォルトの名無しさん:2006/01/27(金) 23:22:38
あと実験コードちょろっと書いて、デバッガで実行すると
>?フォアグラウンドプロセスがデバッグ中である。
により、制限が無いように見えちゃうとか。
830デフォルトの名無しさん:2006/01/27(金) 23:30:50
>>827-829
自分で試したのか、お前ら?
831デフォルトの名無しさん:2006/01/27(金) 23:31:49
つまり、福井県は実在するの?しないの?
832デフォルトの名無しさん:2006/01/27(金) 23:33:24
>>830
君は試してないのかい?
833デフォルトの名無しさん:2006/01/27(金) 23:37:25
>>825
うまくいかないってのが、タスクバーでボタンが点滅するだけ
っていうのならば、それがSetForegroundWindowの制限。
820のリンク先にその制限を突破するコードがある。

>>819,822,826,830,832
いい加減痛いから、それ以上恥の上塗りをするのはやめた方がいいぞ。
834デフォルトの名無しさん:2006/01/27(金) 23:39:02
>>830
830ha
ドキュメントに「XXXはダメ」って書いてあっても、
自分の環境で試してOKだったら行うのかい?

漏れはそんなことしたこと無いよ。
逆にドキュメントでOKとなっていても、
試してダメ⇒回避コード作成ってのはあるけど。
835デフォルトの名無しさん:2006/01/27(金) 23:46:04
スレ違いかもしれませんが質問させてください。
ファイル(アイコン)のドラッグドロップはDragAcceptFiles()使って
WM_DROPFILES取れば得られるみたいですけど、
リッチテキストのテキスト等のドロップはどういう仕組みで行われているのでしょう?
visualstudioのコードエディタとMSNメッセンジャの入力フォーム間とかでもD&Dできるので
アプリ内じゃない処理が行われてると思うんですが。
他のアプリのリッチテキストからのD&Dを許可する方法なぞあれば教えてください
836デフォルトの名無しさん:2006/01/27(金) 23:49:10
('A`)
837デフォルトの名無しさん:2006/01/27(金) 23:52:23
>>835
RegisterDragDrop
838デフォルトの名無しさん:2006/01/28(土) 00:11:36
drug & drop out
839デフォルトの名無しさん:2006/01/28(土) 03:03:42
どうしても思い出せないので質問させて下さい。
"C:\test1\test2\test3\" というディレクトリを作りたいとき、
test1 や test2 の存在しなくても、一発で test3 までの
ディレクトリを作成してくれるAPIがあったと思うのですが、
どなたか教えて頂けないでしょうか?
確か、winhelp.dll の MakeSureなんとかかんとか API だったと思うのですが。。。
840デフォルトの名無しさん:2006/01/28(土) 03:04:27
こないだ出たばっかりだな
841839:2006/01/28(土) 03:07:51
>>840
すいません。719で既出でした。
スレ汚し失礼しました。
842デフォルトの名無しさん:2006/01/28(土) 06:58:06
>>835
OLEドラック&ドロップ
843デフォルトの名無しさん:2006/01/28(土) 07:43:48
9xでCreateRemoteThread()と同じことをやるにはどうしたらいいのでしょうか?
844デフォルトの名無しさん:2006/01/28(土) 08:53:30
>>843
等価な処理は無理。
845デフォルトの名無しさん:2006/01/28(土) 13:11:19
>>843
多分無理と思う。DLLインジェクションがやりたいのなら、SetWindowsHookexでもできると思うが。
多分9x系で使えるはず
846デフォルトの名無しさん:2006/01/28(土) 15:55:14
スタンバイから復帰するためのAPIってありますか?
847デフォルトの名無しさん:2006/01/28(土) 16:09:52
>>846
スタンバイ状態の時はアプリケーションは動作していないと思うが?
848デフォルトの名無しさん:2006/01/28(土) 17:16:26
ワロスww
849デフォルトの名無しさん:2006/01/28(土) 18:09:10
>>846
一応、SetWaitableTimerで出来るが、お前さんのやりたいことは
これでいいのか?
850デフォルトの名無しさん:2006/01/28(土) 18:27:35
それくらい推察しないと
エスパーとしては失格です。
851デフォルトの名無しさん:2006/01/28(土) 19:06:50
既に起動してる別のプロセス(自作)にちょこっと仕事させて、処理が終わり次第
自分が復帰する状況を実現したいです。安易には

// 何か処理
SendMessage(...); // 別プロセスに投げる。ハンドラは記述済
// 何か処理

というのを思いつきます。他に名前付きイベントオブジェクトで

// 何か処理
SignalObjectAndWait(...); // 別プロセスを起こし、処理終了後SetEventなど呼ぶ
// 何か処理

などともできそうです。どう実装してもいいんですが、なるべく
パフォーマンスを良くしたいです。
どちらかと言われれば、どちらを選べばよいでしょうか?
852846:2006/01/28(土) 20:35:42
>>849
それです!ありがとうございます。
エスパー合格です。
853デフォルトの名無しさん:2006/01/28(土) 20:38:00
>>847-848
おいおい何年前のPCの話してんのよw
スタンバイから(RTC等で)復帰なんてAPMの当時から実現してるってw
でなきゃタスクスケジューラは魔法か何かかw
854デフォルトの名無しさん:2006/01/28(土) 20:45:26
そういうレベルの話はしてないと思うよw
855デフォルトの名無しさん:2006/01/28(土) 20:48:41
そういう話じゃないの?
856デフォルトの名無しさん:2006/01/28(土) 20:50:53
おいおい何のレベルの話してんのよw
857デフォルトの名無しさん:2006/01/28(土) 20:52:22
そういうことで、はい次、次。

あ、Wake on LAN でも起こせるよ。
858108:2006/01/28(土) 20:52:23
>>846 852
おまえ>>105でも同じ質問してたろ
108で答えてんのに無視しやがって
梨の礫だけはやめろ
859デフォルトの名無しさん:2006/01/28(土) 20:53:55
もう回答も出てこれにて一件落着なんだから、
自分が賢いことを証明する為に言い争うのはやめれ。
860846:2006/01/28(土) 20:55:45
別人です。すみません。
過去の発言を見ないで質問したためこんなことになりました。
861デフォルトの名無しさん:2006/01/28(土) 20:56:49
>>846
プッw
言いがかりww
862デフォルトの名無しさん:2006/01/28(土) 20:57:39
>>846>>858
修正
863デフォルトの名無しさん:2006/01/28(土) 21:04:39
>>860
あ、そーでしたか。こちらこそ失礼しました。
MSDNのサンプルで分ると思うけど
「ロック音」ってオープンソースのアプリあるから
それ参考になるかもよ。

>>861-862
どこのスレだか忘れたけど
かなり前にも同じ質問の回答で無視されたもんで、つい
864846:2006/01/28(土) 21:22:37
サンプルまで教えていただきありがとうございます。
865デフォルトの名無しさん:2006/01/29(日) 00:42:16
このソースでファイルを開くダイアログが出ないのですが、何が原因なのでしょうか。

-----

OPENFILENAME ofn;
char szFileName[MAX_PATH] = "*.txt";
char szFile[MAX_PATH] = "";

memset( &ofn, 0, sizeof(ofn) );

ofn.lStructSize= sizeof(ofn);
ofn.hwndOwner= hWnd;
ofn.lpstrTitle= "ファイルを開く";
ofn.lpstrFilter= "テキスト文書 (*.txt)\0Perlスクリプト (*.cgi)\0*.cgi\0すべてのファイル (*.*)\0*.*\0\0";
ofn.lpstrFile= szFileName;
ofn.lpstrFileTitle= szFile;
ofn.nMaxFile= MAX_PATH - 1;
ofn.Flags= OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrDefExt= "txt";

GetOpenFileName(&ofn);
866デフォルトの名無しさん:2006/01/29(日) 00:47:55
>>865
コピペで出るが他に何かおかしなことしてないか?
867デフォルトの名無しさん:2006/01/29(日) 01:00:55
>>865
Win2000+VCならそのコードで普通に表示されたよ。

おそらくlStructSizeがらみの問題では?
ここちょっとややこしいんだよね。
↓こんなの一応貼っとくけど
ttp://homepage3.nifty.com/aokura/tips/trouble.html
868デフォルトの名無しさん:2006/01/29(日) 08:38:07
BCC5.5.1でもコピペでちゃんと動いた罠
869デフォルトの名無しさん:2006/01/29(日) 11:00:17
>>816
そのウインドウ切り替えをしたいときに
http://techtips.belution.com/ja/vc/0012/
の例のように
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,(LPVOID)0,0);
するのではなく、あなたのアプリケーションをインストールするときに
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
すべきだどMicrosoftは言っています。
そういうわけで
http://techtips.belution.com/ja/vc/0012/
は完璧な回答ではないと思います。

http://support.microsoft.com/kb/97925/ja
Windows 2000 では、呼び出し元のスレッドでフォアグラウンド ウィンドウを
変更できない限り、SystemParametersInfo の呼び出しが失敗するので、
セットアップまたはパッチ アプリケーションから呼び出さなければなりません。
870デフォルトの名無しさん:2006/01/29(日) 12:11:12
関連づけを変更して自分のソフトで開くようにしたいのですが、
レジストリをいじるのだと思いますが、どのようにやればよいのでしょうか?方法を教えてください。
871867:2006/01/29(日) 12:21:04
>>868
そっちのOSは2000かXPなんでしょ。
commdlg.hと867のリンク先とttp://diarynote.jp/d/59398/の中ほどの項をよく読んでみてよ
できればWindows2000発表前の古いSDK(VC6付属のとか)のcmmdlg.hも。
Windows2000で構造体のサイズが拡張されたけど
拡張後のサイズ88で9xやNTで動かそうとしたとき起こる。
なのでBCCに限らず、VCでも起こりうる。
(フリーズするのではなくて、表示されずにそのままスルーされる。)
865の実行環境は9xかNTなのでは?

>>865
とりあえず
lStructSize=OPENFILENAME_SIZE_VERSION_400;とするか
#define _WIN32_WINNT 0x0400としてみてよ
それで駄目なら他の問題だ。
872デフォルトの名無しさん:2006/01/29(日) 12:22:59
>>869
英語版も合わせてよく読め。SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE を
指定するのは、SetForegroundWindowの動作を、95,NT4と同じようにするために
アプリのインストール時に恒久的に変更する場合のことだ。
873デフォルトの名無しさん:2006/01/29(日) 13:02:25
pingツールを作成したいのですけど、(正確にはICMPプロトコル使用のクライアントソフトです)
知識が足らないばかりかソケットの作成はsocket関数で行い
インターネットの場合引数にAF_INET、TCPならSOCK_STREAM ...
程度の事しか判りません。

どこかWinSockでの指針を示しているサイトはないでしょうか・・
874デフォルトの名無しさん:2006/01/29(日) 13:05:44
icmp.dll
875デフォルトの名無しさん:2006/01/29(日) 13:13:54
>>874
ありがとうございます。ちと勉強してきます
876デフォルトの名無しさん:2006/01/29(日) 15:40:30
>>870
「関連付けを変更するためには、レジストリをどのように変更すればよいか」
というのは、AIP全く関係ないのでスレ違い。

レジストリを操作するAPIは適当にググったりMSDN調べたりすればすぐわかる。
877デフォルトの名無しさん:2006/01/29(日) 16:17:17
ビジネスソフト板のExcel総合相談所 40スレから誘導されてきました

環境:WinXP,Excel2002VBA

POSTメソッドで検索した結果(書籍情報)を、Excelの表に書き下ろすマクロを作っています。
WebBrowser.Documentプロパティを使うと簡単なのですが、HTMLの表示が余計なので
WebBrowserを介さずに、直接DOMオブジェクトを取得したいと考えています。

いろいろ調べたところ、
- MSXML.DOMDocumentで、POSTして読み込んだXMLのDOMを取得できる
- MSXML.XMLHTTPで、POSTして読み込んだHTMLのソースを取得できる
- MSHTMLで、URL指定して読み込んだHTMLのDOMを取得できる
というところまで分かった(実行できた)のですが、
POSTして読み込んだHTMLをDOMにする方法が見つかりません
ご教示くださいますよう、お願いいたします。
878デフォルトの名無しさん:2006/01/29(日) 17:00:57
ExcelのマクロにAPIを直接使用できるの?
879デフォルトの名無しさん:2006/01/29(日) 17:07:55
>>876
で、どのスレが最適なんですか?
880デフォルトの名無しさん:2006/01/29(日) 17:18:38
>>878
はい。おそらくものによるんだと思いますが、VBE(エディタ)の「参照設定」メニューで
Microsoft XML v3.0などを選択してearly bindingしたり
Set obj = CreateObject("MSXML2.XMLHTTP")のようにlate bindingしたりして
そのままobj.openとかobj.sendとか使うことができます。
881デフォルトの名無しさん:2006/01/29(日) 17:31:05
>>878
できるよ。

>>880
それはActiveXだね。
882デフォルトの名無しさん:2006/01/29(日) 17:38:57
WinHTTPでURLとPOSTDATAを指定して、ファイルに保存して、
そのファイルをURLと指定して、MSHTMLに食わせるとか?
883デフォルトの名無しさん:2006/01/29(日) 18:05:30
>>870
良く知らんけどぐぐったらこんなんが出て来た。
http://sgry.sakura.ne.jp/articles/fileassociation.html
> Windows XP で新しくなった関連づけシステムについて
> 調べてわかった事を書いていきます
884865:2006/01/29(日) 19:00:00
#define _WIN32_WINNT 0x0400
で直りました。
ありがとうございました。
885デフォルトの名無しさん:2006/01/29(日) 20:39:25
>>884
GetOpenFileNameはそれで済むかもしれんが
defineすることによる他への影響は??
886デフォルトの名無しさん:2006/01/29(日) 21:02:15
BackupReadの使い方を教えてください
887デフォルトの名無しさん:2006/01/29(日) 21:34:13
888デフォルトの名無しさん:2006/01/29(日) 21:58:53
現在WindowsXP、VisualC++で入力支援系のプログラムを書いています。
'a'〜'z','0'〜'9'をRegisterHotKey()で登録し、
WM_HOTKEYが来たら自分自身をSetWindowPos()、SetFocus()で
アクティブにしたうえで、Hotkeyを解除、その先は通常に入力〜と言った感じで
任意のエディタやアプリケーションに対する入力に被せています。

しかし、これだと最初の1文字の入力がHotkeyとして食われてしまうため、
アクティブになった直後にkeybd_eventで同じ入力を送って補完するようにしています。

自分のマシンだとこれで上手くいくのですが、
他のマシンで試すと、なぜかkeybd_eventが無視されてしまい、最初の一文字が入力されません。
SendInput()も試してみましたが同様でした。

また、他の部分でkeybd_eventを実行してみたら正常に動作しています。
フォーカスを切り替えた直後のkeybd_eventに問題があるようです。
ただ、SetFocus()とkeybd_eventのSleep()を噛ましてみてもダメでした。
何かいい解決策はありますでしょうか。

対象のマシンも同様にWindowsXPでパフォーマンスは少し下くらい、
VC++は入っていませんが、.netのSDKやらplatformSDKやらが入っています。
889デフォルトの名無しさん:2006/01/29(日) 22:35:47
>>888
キーボード設定のリピート入力時間設定が大きく違うとかいうオチ?
890デフォルトの名無しさん:2006/01/29(日) 23:03:01
>>885
それが心配なら#define _WIN32_WINNT 0としてしまえばよい。

俺は大抵それに加え_WIN32_WIDOWSと_WIN32_IEも0にしている。
891デフォルトの名無しさん:2006/01/29(日) 23:38:47
プリントスクリーンと同様のことが出来るAPIってあります?
自分のPCだとプリントスクリーン経由で画像のキャプチャーをすると失敗することがあって困ってます・・・
892・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/01/29(日) 23:43:14
>>891
動画とかはわざとキャプチャ不能にしてることがあるよ。


GetDC() で対象ウィンドウ(NULLを指定すればデスクトップ全体)のDCを取得して
CreateCompatibleDC()してCreateCompatibleBitmap()
893デフォルトの名無しさん:2006/01/29(日) 23:44:41
質問です。
同じプログラム内で2度以上PostQuitMessageが呼ばれるのは問題ないのでしょうか??
用途は、2枚目のウインドウを破棄するときに、メインとは違うところで行われているディスパッチメッセージを抜けたいのです。
PeekMessageにウインドウハンドルをいれて監視してるのですが、WM_DESTRYやWM_QUITやWM_CLOSEが捕獲できませんでした。
PeekMessageのウインドウハンドルをNULLにした場合でも結局WM_DESTRYやWM_CLOSEは捕獲できませんでした。
こういう使い方って問題ないのでしょうか?
894デフォルトの名無しさん:2006/01/29(日) 23:45:21
GetDC
895・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/01/29(日) 23:49:09
>>893
PostQuitMessageを送るとメッセージループが終了するんで、それ以降メッセージ処理しようがない気が。。。。
896デフォルトの名無しさん:2006/01/29(日) 23:49:38
>>892>>894
ありがとうございます。
897デフォルトの名無しさん:2006/01/29(日) 23:53:08
>>889
設定調べてみましたが、両方とも全く同じデフォルト値のままでした
898デフォルトの名無しさん:2006/01/30(月) 00:20:23
>895
>PostQuitMessageを送るとメッセージループが終了するんで
直ぐには終わらない。WM_QUITは優先順位がものすごく低いから、
キューに貯まったメッセージが全部消えて無くなるまではやってこない。
899デフォルトの名無しさん:2006/01/30(月) 00:21:19
>>895
レス感謝!
メッセージ処理をしているところが2箇所あるんです。
えーっと、windowsにはscanf等の代わりとなるようなGUIの入力ダイアログがありません。
なので、自作しようと思って、表示とかは問題なくできたんですけど、(createwindowexでコントロールを貼り付けた。)
一つの関数に押し込めて便利に使いたいので、
その関数の中で専用のメッセージ処理を行いたいのです。
それで、その専用のメッセージ処理から抜ける際に何をフラグにして抜けるか非常に悩みまして、
一応、WM_QUITをフラグにしたんです。
で、WM_QUITを生成するためにはPostQuitMessageを呼ぶことになってしまって・・・。
こんな感じで大丈夫なのかと思って質問しました。
ぶっちゃければ、2枚目以降のウインドウを破棄したときに最後に呼ばれるメッセージがわかれば問題ないと思いますが、検討がつきません。

なんか妙案ありませんか??
900899:2006/01/30(月) 00:25:34
ああ、そうだ。
一応これでも今のところは意図の通り動いてはいます。
が、ちょっと挙動に不安がのこるので非常に気になっています。
901デフォルトの名無しさん:2006/01/30(月) 00:34:11
>>899
そういうときは普通モーダルダイアログを使う。
902デフォルトの名無しさん:2006/01/30(月) 00:48:05
>>901
あー、ダイアログか。
うーんあんまり使ったことないので候補から外れていました。
その手も模索してみようと思います。
レス感謝。

やっと寝れます。=D
903デフォルトの名無しさん:2006/01/30(月) 01:17:50
>>892
>動画とかはわざとキャプチャ不能にしてることがあるよ。
それ、単にオーバーレイ表示なだけな気が‥‥それ
904デフォルトの名無しさん:2006/01/30(月) 03:22:44
WM_DESTROYとWM_CLOSEとWM_QUITの違い分からないのですが
教えてください!あと、終了するときはDestroyWindow()とCloseWindow()
とPostQuitMessage(0)とexit(0)のどれが本当は正しいんですか?
(exit(0)が一番楽だけど・・・)
905デフォルトの名無しさん:2006/01/30(月) 03:38:00
>>904
WM_DESTROY:ウインドウが消滅し始めるとき
WM_CLOSE:ユーザーがウインドウを閉じようとしたとき(Xを押したとき、とか)
WM_QUIT:アプリケーションが終了しようとするとき

ウインドウとアプリケーションとの区別が付けば分かるかな?
DestroyWindowとCloseWindow、PostQuitMessageとexitの関係も同じようなもん。
またウインドウのメッセージループを1つのスレッドと考えると、
それを終らせるメッセージをWindowsに投げるのがPostQuitMessage
普通に強制終了させるのがeixtかな?

1アプリで複数ウインドウのソフト作ったらわかるかも。
まぁMSDN嫁。
906デフォルトの名無しさん:2006/01/30(月) 03:44:37
>>888
そんな変なことするより、RegisterHotKeyを使うのを
やめた方がいいかと。

>>904
WM_CLOSEはウィンドウの閉じるボタンが押された直後等に
送られてくるメッセージ。まだこの時点では閉じるのを拒否
することができる。(ファイルを保存するか聞くのはここ)

WM_DESTROYはウィンドウが破棄される直前に送られてくる。
もうこの時点では後戻りはできない。
後始末等が必要なときは、ここで処理するのが普通。

WM_QUITは最後、これでおしまいってときに送られてくる。

普通はWM_DESTROYもWM_QUITもアプリケーションから直接
送ったりはしない。DestroyWindow(), PostQuitMessage()を使う。

CloseWindow()というAPIはウィンドウを閉じるのではなく、
最小化するだけなので全然関係ない。
907デフォルトの名無しさん:2006/01/30(月) 04:18:36
>>905-906
即スレありがとうございます!謎が解けました。
これで今日も眠れます!
908デフォルトの名無しさん:2006/01/30(月) 10:00:24
>>905
> PostQuitMessageとexitの関係も同じようなもん

全くの別物な訳だが。

PostQuitMessage : 指定されたスレッドが自らの終了を要求したことをシステムに伝えます。
exit : C標準関数で、プロセスを終了する。mainでのreturnはこの処理と等価。
909デフォルトの名無しさん:2006/01/30(月) 12:41:59
APIなのかツールなのかわかりませんが
パフォーマンステストで実行前に
Winのディスクキャッシュをクリアしたいんですが
どうすればいいんでしょうか?
メモリ分のダミーファイルを読み込むだけでいいんでしょうか?
910デフォルトの名無しさん:2006/01/30(月) 16:26:33
>>908
そのあとかいてるやんw
911デフォルトの名無しさん:2006/01/30(月) 17:00:33
>>909
AUTOEXEC.BATのSMARTDRV.EXEをコメントアウト(;^ω^)
912デフォルトの名無しさん:2006/01/30(月) 17:16:48
>>911
Win16ならともかくWin32でそれはないだろ。
913デフォルトの名無しさん:2006/01/30(月) 17:17:42
>>905
C/C++のexitに対応するのはExitProcessだろ。
914デフォルトの名無しさん:2006/01/30(月) 20:49:03
>913

c/c++のexitはCRTの終了処理が含まれるから厳密にはちがうよ
915デフォルトの名無しさん:2006/01/30(月) 21:12:25
>>914
論点はそこじゃないと思うのだが……。

PostQuitMessage()とExitProcess()はまったく違うぞ。
916デフォルトの名無しさん:2006/01/30(月) 21:18:29
>>914 自体はすばらしい洞察だと思うが
917デフォルトの名無しさん:2006/01/30(月) 22:26:23
じゃ、プラスモデあげる
918デフォルトの名無しさん:2006/01/31(火) 02:36:23
他プロセスのデバイスコンテキスト(?)を得るにはどうすれば良いでしょうか?
よろしくお願いします。
919デフォルトの名無しさん:2006/01/31(火) 03:02:18
プロセスにデバイスコンテキストなど無い
920デフォルトの名無しさん:2006/01/31(火) 03:03:47
GetDC
921デフォルトの名無しさん:2006/01/31(火) 03:22:26
Get DC card
922デフォルトの名無しさん:2006/01/31(火) 03:23:00
>>918

FindWindowEx関数で該当するウィンドウのハンドル(HWND)を受け取り
GetDC乃至BeginPaintでデバイスコンテキストを取得すればいいんじゃまいか?
923918:2006/01/31(火) 03:31:19
>>919-922
なんとか解決できそうです、ありがとうございました。
924デフォルトの名無しさん:2006/01/31(火) 11:26:07
Spy++で表示されるウィンドウキャプションと
GetWindowText関数で取得したウィンドウキャプションが一致しません。

Spy++はどのようにウィンドウキャプションを取得しているのでしょうか?
925デフォルトの名無しさん:2006/01/31(火) 11:35:30
>>924
志村!逆!逆!
926デフォルトの名無しさん:2006/01/31(火) 11:41:44
逆ですか?
Spy++の動きがわかればそれを真似すればよいかなと...
もっと簡単な方法があるのでしょうか?

ちなみにGetWindowText関数で取得した値は、
SendCommand関数でWM_GETTEXTを送ったときと同じ値が返ってきます。
927デフォルトの名無しさん:2006/01/31(火) 11:53:01
>>924
取り方が違うんじゃなくて、取ってる対象が違う希ガス
928デフォルトの名無しさん:2006/01/31(火) 11:58:59
>>924
GetWindowTextは同一プロセス内のみ
929デフォルトの名無しさん:2006/01/31(火) 12:01:37
>>926
> SendCommand

SendMessageだろ?
930デフォルトの名無しさん:2006/01/31(火) 12:06:11
SendCommandって関数もあるみたいよ
931デフォルトの名無しさん:2006/01/31(火) 12:33:38
ごめんなさい。SendMessageでした。
932デフォルトの名無しさん:2006/01/31(火) 12:42:21
>>930
メッセージを送るのはSendMessageだろ?
933デフォルトの名無しさん:2006/01/31(火) 13:06:00
自己解決しました
934924:2006/01/31(火) 13:17:36
すいません。
解決してません。
935924:2006/01/31(火) 14:14:10
次のURLにあるコードではうまく取得することができました。
ttp://support.microsoft.com/kb/112649/JA/

>>928さんが言ってみえることが関係するのでしょうか?
936928:2006/01/31(火) 14:37:41
>>935
MSDNをよく読め。
同一プロセスの時と違うプロセスの時とで動作が変わる事が書かれている。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/getwindowtext.asp
937924:2006/01/31(火) 14:53:30
日本語のMSDNしか目を通していませんでした。
読んでみます。ありがとうございました。
938デフォルトの名無しさん:2006/01/31(火) 15:00:54
グローバルのキーイベントどうやって取得したらいんですか?
よろしくお願いします。
939デフォルトの名無しさん:2006/01/31(火) 15:07:33
>>937
日本語のほうにも書いてあるぞ。
MSDNにしては完璧に訳してある。
940デフォルトの名無しさん:2006/01/31(火) 15:36:09
>>938
グローバルフック
941デフォルトの名無しさん:2006/01/31(火) 16:02:46
Sleepの動作を詳細に教えてください
942デフォルトの名無しさん:2006/01/31(火) 16:09:26
指定された時間分(単位ミリ秒)Sleepします
943デフォルトの名無しさん:2006/01/31(火) 16:13:19
>>941
MSDNライブラリじゃ足りない?

インシデント消費して、MSに聞いてみれ
944924:2006/01/31(火) 16:16:33
やっぱりわかりません。
同一プロセスでないとGetWindowTextはNULLを返すということではないのでしょうか?
今回の場合NULLではなくWM_GETTEXTと同じ値を返します。

Timerイベント内(>>935)でGetWindowTextを呼び出すのと、
EnumChildWindowsのコールバック関数内で呼び出すのに違いがあるのでしょうか?
もちろんウィンドウハンドルは同じ値です。
945924:2006/01/31(火) 16:46:11
プロセスIDを調べたら解決しました。
EnumChildWindowsを実行していうほうが同一プロセスで、
Timerイベントのほうが別プロセスでした。
そのため返す値が違ったようです。
スレ汚して本当にすみませんでした。
946デフォルトの名無しさん:2006/02/01(水) 10:50:28
HEX文字を数値に変換するAPIを教えてください
947デフォルトの名無しさん:2006/02/01(水) 11:16:28
sscanf
948デフォルトの名無しさん:2006/02/01(水) 11:57:18
APIじゃなきゃ嫌
949デフォルトの名無しさん:2006/02/01(水) 12:06:51
電卓を関数電卓にして外部操作しろ。
950デフォルトの名無しさん:2006/02/01(水) 12:08:20
StrToIntEx
951デフォルトの名無しさん:2006/02/01(水) 12:13:30
>>948
wsprintf 
952デフォルトの名無しさん:2006/02/01(水) 12:22:14
>>951
逆だろ
953デフォルトの名無しさん:2006/02/01(水) 12:38:41
test
954デフォルトの名無しさん:2006/02/01(水) 12:40:22
特定のドメインのアクセスを検知や抑制をしたいんですけど、
どんな方法がありますか?
955デフォルトの名無しさん:2006/02/01(水) 12:47:38
ISAPIフィルター
956デフォルトの名無しさん:2006/02/01(水) 16:29:34
WindowsのAPIでユーザがローカルLogonしたことを検知するAPIはあるのでしょうか?
957デフォルトの名無しさん:2006/02/01(水) 18:31:11
APIはあるにはある。(WlxLoggedOutSAS)
しかしAPI以外の方法をすすめる。
958デフォルトの名無しさん:2006/02/01(水) 19:13:32
すいません、質問させていただきます。
ディスプレイの電源が入っているかどうかを調べるAPIってありませんかね?
また、ディスプレイ関連で接続されているディスプレイの最大解像度を取得する関数なんか、無いですかね?
959デフォルトの名無しさん:2006/02/01(水) 20:25:30
解像度はEnumDisplaySettingsで取得。
960デフォルトの名無しさん:2006/02/01(水) 21:00:14
>>958
ディスプレイの電源状態が何に必要なのかが気になる。
961デフォルトの名無しさん:2006/02/01(水) 21:07:24
>>960
単純に、ディスプレイの電源状態を確認して、ディスプレイの電源が付いたと同時になんらかのプログラムを起動させることを考えています。
例えば、動画とかが電源ONと同時に頭から見れたら便利ですよね?
962デフォルトの名無しさん:2006/02/01(水) 21:14:00
961は天才
963デフォルトの名無しさん:2006/02/01(水) 21:14:06
モニタの電源がついてから安定するまで10秒ぐらいかかるうちのモニタはどうすれば
964デフォルトの名無しさん:2006/02/01(水) 21:25:24
Sleep(10000)する
965デフォルトの名無しさん:2006/02/01(水) 21:26:57
>例えば、動画とかが電源ONと同時に頭から見れたら便利ですよね?
別に?
966デフォルトの名無しさん:2006/02/01(水) 21:35:44
どうしても見つからないので教えて下さい。
印刷プレビュの実装に関して教えてもらえませんか。
MFCを使えばちょちょいの様ですが(MFCは使って無いので???ですが)、SDKに実装する方法を知りませんか。
正直、自分でガリガリ構築するのは…無理かと思ってます。
そこで、市販でも構わないのでクラスライブラリやDLLを探しているのですが…
一般的にはどの様にしているのでしょうか?
# やはりMFC?
# SDKベースでMFCの印刷プレビューを実装する方法でも構いません。
どなたか宜しくお願い致します。m(__)m
967デフォルトの名無しさん:2006/02/01(水) 21:39:26
コンボボックスにCB_ADDSTRINGメッセージを送信しても、CBS_SIMPLEの物以外が無反応で困ってますorz

ソース(VC6.0で作成。MFCとかは使用していません)
http://tnet1.s18.xrea.com/prog/ComboBox_Test.zip

左から順に
CBS_DROPDOWN、CBS_SIMPLE、CBS_DROPDOWNLIST
968デフォルトの名無しさん:2006/02/01(水) 21:49:42
>>967
ちゃんと追加されてる。

コンボボックスの高さが足りないため表示されないだけ。
969デフォルトの名無しさん:2006/02/01(水) 22:08:36
>>966
印刷も結局のところDCを使った描画です
970デフォルトの名無しさん:2006/02/01(水) 22:14:35
>>966
SDKで印刷プレビュー実装しているの探し見たけど、やっぱり
>>969の言う通り、DC使った描画だったよ。印刷の仕方からして
当然といえば当然だけど。
MFCは実装するというより、AppWizard使って作れば最初からつけられる。
「Doc-Viewをサポート」にチェックするだけ。
971デフォルトの名無しさん:2006/02/01(水) 22:22:54
956です。ありがとうございます。

>>957
>しかしAPI以外の方法をすすめる。

これは何かAPIで問題があるからAPI以外と言うことをお勧めしてくれてるのでしょうか?
それともDebugが難しいから?
972デフォルトの名無しさん:2006/02/01(水) 22:43:05
>>968
リソースのコンボボックスの高さを弄ったら見事にできました。
ありがとうございました!
973デフォルトの名無しさん:2006/02/01(水) 23:00:52
>>966
自分は「猫でも分かる...」を参考に作った。
win98 と winXP でドライバのセットが違うのが面倒だった。
ページが複数になるとき、狙ったページを見るとか、印刷するとかが面倒。
MS Word のようなヘッダ、フッタ、ページ番号などを付けようとすると
更に面倒。
bmp の方があっさりしている。
974デフォルトの名無しさん:2006/02/02(木) 00:58:43
>>971
調べないで答えるがターミナルサービスAPIでできそうな希ガス
975デフォルトの名無しさん:2006/02/02(木) 06:14:54
パーティションを切っている場合、同一ハードドライブでも複数のドライブレターが付きますが、
2つのドライブレターが、同一のHDDに属しているかどうかを見分ける方法を教えてください。
976デフォルトの名無しさん:2006/02/02(木) 09:57:14
>>975
見分ける必要がどこにあるのかを教えて下さい。
977デフォルトの名無しさん:2006/02/02(木) 10:05:37
>>976
Fire File Copyのようなファイルコピー援用ソフトだと必須だな。
やり方は知らんが。
978デフォルトの名無しさん:2006/02/02(木) 10:06:41
>>975
読み出し方は忘れたが、HDD にはメーカ名や Ser No. やオレはこういうものだ、
こう読み取ってくれえというのが付いているから読み取って比べれば。
デバイス・マネジャなんぞで出てくるヤツ。
979デフォルトの名無しさん:2006/02/02(木) 11:34:12
>>976
何のためにこのスレに居座っているのか教えてください。
980デフォルトの名無しさん:2006/02/02(木) 12:24:55
>>979
なぜ教えなければならないのか教えてください。
981デフォルトの名無しさん:2006/02/02(木) 12:37:50
踊るなよ
982デフォルトの名無しさん:2006/02/02(木) 17:04:11
>>981
なぜ踊ってはいけないのか教えてください。
983デフォルトの名無しさん:2006/02/02(木) 20:08:46
画面に表示されている文字列を取得するAPIってあります?
タイトルバーやダイアログメッセージの取得方法は分かりますが、
画面上に配置されているリストボックスやラベルの文字列も取得をしたいのです……
984デフォルトの名無しさん:2006/02/02(木) 20:14:04
>>983
それら全てウィンドウです
985デフォルトの名無しさん:2006/02/02(木) 20:14:52
>>983
あるよ
ヒントは>>984
986デフォルトの名無しさん:2006/02/02(木) 20:15:31
>>983
それは別プロセスのウインドウ?

昔からあるコントロールは、大抵取得するメッセージがあるはず。

最近のコモンコントロールは、別プロセスから取得できないから、
どうしてもやりたければ、DLL注入してごにょごにょってことになるのかな。
そこまでしてやりたいのかどうかは知らないけど。
987デフォルトの名無しさん:2006/02/02(木) 21:26:59
>>966
WTLはどう?
988デフォルトの名無しさん:2006/02/02(木) 21:58:54
次スレまだぁ?
989847:2006/02/02(木) 22:09:44
>>853
勉強になった。サンクス。そのことに関して調べてみよう。
990デフォルトの名無しさん:2006/02/02(木) 22:11:27
>>971
MyGina.dllを作成するのははだめという訳じゃない。
ミスって回復コンソールからレジストリを復旧するとか
OS再インストのおまけが付きとか、
Myサービス作ってLogonを通知するのがメンドイとか
ドキュメントが少ないとか。
たとえばLogon後に適当なEXEを走らせて検知する方が簡単かと思う。

>>975
CreateFile()→DeviceIoControl()使って
"\\\\.\\C:"でIOCTL_DISK_GET_DRIVE_LAYOUT
したものと
"\\\\.\\D:"でIOCTL_DISK_GET_DRIVE_LAYOUT
したもののシグニチャが一致したらそうなる
ようだ。ただしコードは未確認。
991デフォルトの名無しさん:2006/02/02(木) 22:46:21
こっちに書くかDDKスレに書くか悩んだのですが……

特定のポートに刺さっているUSB機器(自作)のファームアップデート時に、
物理的にコネクタ抜き差ししているのですが、この抜き差しの作業ををAPIで擬似的に
再現することは可能でしょうか?
 デバイスマネージャからの接続ポートの無効化→有効化で出来るか、と考えた
のですが、それを実現できる関数の名前が分からずにいます。
 上記手段を使う場合にググるべき関数の名前か、その他一般的手段のヒントを
教えてもらえませんでしょうか?
992デフォルトの名無しさん:2006/02/02(木) 23:05:05
>>991
http://www.codeproject.com/system/DevicePropertySheet.asp

と同じような感じでDevMgr.dllをハックしてみては?
993デフォルトの名無しさん:2006/02/02(木) 23:14:27
>>991
USB機器側が自作なら、機器側で抜き差しをエミュレート(D+=D-=Low)
するのが簡単確実。
994デフォルトの名無しさん:2006/02/02(木) 23:16:28
SetupDiRemoveDeviceとか。
995991:2006/02/02(木) 23:40:35
 うお、短時間にいろいろとありがとうございます。

>992殿の手段と >994殿のAPI、チェックしてみようと思います。

>993殿
 ファームアップデートした段階で応答なくなっちゃうんです(死
で、再起動するには抜き差し……と。
996デフォルトの名無しさん:2006/02/02(木) 23:44:56
ret = CreateNewThread("Win32API質問箱 Build40");
997デフォルトの名無しさん:2006/02/03(金) 00:31:45
998デフォルトの名無しさん:2006/02/03(金) 02:32:42
999デフォルトの名無しさん:2006/02/03(金) 02:33:49
1000デフォルトの名無しさん:2006/02/03(金) 02:34:33
1000ならぬるぽ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。