Win32API質問箱 Build23

このエントリーをはてなブックマークに追加
320デフォルトの名無しさん
突然質問で失礼します。
CDialogの継承クラスにおいて
ワーカスレッドからメインスレッドに15msecおきに
SendNotifyでユーザ定義メッセージを送って
関数を実行させようとしています
しかし、どうしてもランダムに
200msec前後の遅延が発生します
どうにか15msecぐらい間隔で目的の関数を
呼び出すことはできないでしょうか?
どうか、アドバイスをよろしくお願いします
321デフォルトの名無しさん:04/10/04 23:47:06
ウィンドウメッセージを使ってその精度が維持できると思っているのが間違い。
timeSetEvent() でもつかったら?
322デフォルトの名無しさん:04/10/05 00:23:21
初心者の質問に答えていただきあいがとうございました。
323デフォルトの名無しさん:04/10/05 06:14:14
モードレスで作成したプロパティシート(ページではない)を削除する
方法ってどうしたらいいのでしょう?
モードレスにしたプロパティシートのハンドルを引数にして
DestroyWindowでおこなうとWindows APIバイブル2のサンプルCD
(CHAPTER4のGETTABCT.MAK)ではなっているのですが、VC.NET2002
でおこなうと、終了処理の後にハングしてしまいます。
宜しくお願いします。
324デフォルトの名無しさん:04/10/05 09:22:47
ReadDirectoryChangesW を使って,
全ドライブのファイル操作の監視をしたい.

CreateFile で監視するディレクトリィのハンドルをとって,
わたしてやるんだが,例えば,cドライブを見たければ,
"c:\\" とか指定すればいいんだが,
全ドライブを指定することはできないだろうか?

GetLogicalDriveStrings で生きてるドライブ名をとって,
個別にそれぞれ CreateFile で開いて,
ReadDirectoryChangesW で監視するってのは
あほらしくてやってられない.

一発でできないだろうか?
325デフォルトの名無しさん:04/10/05 13:12:49
休止状態から指定時刻に復帰するプログラムを作りたいのですが、どのAPIを使用すれば良いのでしょうか?
アドバイスお願いします。
326デフォルトの名無しさん:04/10/05 13:21:07
>>324
盲目的に全ドライブ監視は危険。メディアの入れ替えで恐ろしいことが起こる。
やるなら個別でやるべき。
327デフォルトの名無しさん:04/10/05 15:07:05
他のアプリが最大化しているか、などの状態を取得するAPIありますか。
328デフォルトの名無しさん:04/10/05 15:20:41
>>324
漏れの6連装CDドライブをガチャガチャ言わすのはオマエか!
329デフォルトの名無しさん:04/10/05 15:24:28
>>327
ウィンドウを列挙して、ウィンドウが最大化しているかどうか調べれば良いかと
330デフォルトの名無しさん:04/10/05 15:52:33
ありがとうございます。
列挙と言うとEnumWindowとかですか?
具体的なキーワードを頂けるとありがたいです。
331デフォルトの名無しさん:04/10/05 16:11:16
半角を全角にするAPIはありませんか?
332デフォルトの名無しさん:04/10/05 16:25:54

void replace(char* text,char* key,char* rep)
{
  char *p,buf[256];
  p = strstr(text,key);

  while(p!=NULL){
    *p='\0';
    strcpy(buf,p+strlen(key));
    strcat(text,rep);
    strcat(text,buf);

    p = strstr(p+strlen(rep),key);
  }
}

[使い方]

replace(buf,"ア","ア");
replace(buf,"イ","イ");
replace(buf,"ウ","ウ");
replace(buf,"エ","エ");
replace(buf,"オ","オ");
replace(buf,"カ","カ");
replace(buf,"キ","キ");
replace(buf,"ク","ク");
replace(buf,"ケ","ケ");
replace(buf,"コ","コ");
replace(buf,"サ","サ");
333デフォルトの名無しさん:04/10/05 16:32:09
>>331
LCMapString
334デフォルトの名無しさん:04/10/05 16:59:50
>>333
さんくすくす。
335デフォルトの名無しさん:04/10/05 17:57:03
>>327
IsZoomed
IsIconic
GetWindowPlacement
336デフォルトの名無しさん:04/10/05 19:09:51
>>335
おおー、ありがとうございます
337デフォルトの名無しさん:04/10/05 19:39:23
>>321
マルチメディアタイマを使ってみたのですが
10000回に1度くらいの割合で
イベント10回くらいをスルーしちゃって
コールバック関数内で呼び出してある関数が
実行されてないようです
どうしてでしょう?
コールバック関数内の処理を軽くしても
改善されませんでした
原因に心当たりのある方
是非アドバイスをよろしくお願いします
実行されていないようです
338デフォルトの名無しさん:04/10/05 19:48:58
俺を最強のプログラマにするAPIはありませんか?
339デフォルトの名無しさん:04/10/05 20:59:45
TerminateProcess(>>338, 0)
340 ◆FIcNi4f8js :04/10/05 21:32:19
>>337
必ずコールバックされると思っているのが間違い。
コールバック関数の中で前回呼ばれた時のシステム時間との時間差を計算して、
呼ばれなかった分の穴埋めを行う処理をしないといけない。
341デフォルトの名無しさん:04/10/05 21:33:20
ウィンドウの枠の上下左右の一箇所だけ枠なしとかにすることはできる
でしょうか?
342 ◆FIcNi4f8js :04/10/05 21:34:53
SetRegion とか LayeredWindow とかを使うとできるよ。
343デフォルトの名無しさん:04/10/05 21:35:43
>>341
WM_NCHITTEST と WM_NCCALCRECT と WM_NCPAINT と WM_NCACTIVE あたりを
自前で実装すれば可能。
344デフォルトの名無しさん:04/10/05 21:46:10
>>337
1.コールバック関数から SendNotifyMessage を呼んでいる時、メインスレッドで
  直前のメッセージ処理が終わるまで待っている状態。
  メッセージを使わないようにする。
  表示の更新だけなら InvalidateRect のみとか、
  直接 dc 取得してワーカースレッドから描いてしまうとか。
2.GDI に対して描画要求を過剰に繰り返し行うと起こる現象。
  描画部分を小さくしたり、DrawDibDraw とか DirectDraw を使えば良くなるかも。
345デフォルトの名無しさん:04/10/05 21:47:49
>>340
コールバック関数内にグローバル変数の
イベント発生カウンタを持っているのですが
そのカウンタとコールバック関数内の
一部の関数が走った回数が一致しません
イベントカウンタの方が大きい値になります
従って、コールバック関数は呼ばれているのですが
その中の関数が走ってないように見えます
どうしてでしょうか?
346341:04/10/05 21:51:16
>>342,343
さんくすこ
347デフォルトの名無しさん:04/10/05 21:52:13
>>345
ファイルIOはそれなりに高速なので、ログでも書き出して動作を検証すべき。
あとコールバック処理中に再びコールバックが呼ばれるケースとかも考慮するべき。
348デフォルトの名無しさん:04/10/05 21:56:02
>>347
ありがとうございます
349デフォルトの名無しさん:04/10/06 10:04:35
VS.NETで作成できるWindowsインストーラーでサイレントインストール時に
インストール先をiniファイルなどやオプションなどに記述して
変更する方法はないものでしょうか。
宜しくお願いいたします。
350デフォルトの名無しさん:04/10/06 18:14:04
微妙にすれ違い
351デフォルトの名無しさん:04/10/06 22:29:01
IMEが変換を確定したタイミングはどうやって知る事ができますか
352デフォルトの名無しさん:04/10/06 23:27:57
>>351
WM_IME_COMPOSITION とかでどう?
353デフォルトの名無しさん:04/10/07 01:49:57
>>349
こちらへどうぞ。

インストーラー相談室
http://pc5.2ch.net/test/read.cgi/tech/997727326/
354デフォルトの名無しさん:04/10/07 02:52:23
「未解決の外部シンボル
"int __cdecl InitInstance(struct HINSTANCE__ *,int)"
(?InitInstance@@YAHPAUHINSTANCE__@@H@Z)
が関数 _WinMain@16 で参照されました。」
というエラーが出るのですが、何をリンクすればこのエラーがなくなるのでしょうか?
#includeしているのは
#include <windows.h>
#include <windowsx.h>
#include <winsock2.h>
#include <stdlib.h>
#include "resource.h"
なのですが、、、このエラーだけはどうすれば回避できるのか
わかる方がいましたら教えてください。
355デフォルトの名無しさん:04/10/07 09:02:19
>>354
リンクするライブラリが足りないとか?
356デフォルトの名無しさん:04/10/07 09:30:19
Win32 API の CreateThread を使うときに,
実際スレッドで動かす函数として
ある特定の型の函数への指示子をわたしてやるんだが,
この函数って大局じゃないとうまく動かない.

類の要員函数ではいけないの?
357デフォルトの名無しさん:04/10/07 09:44:36
氏ね
358デフォルトの名無しさん:04/10/07 09:51:06
>>354
恐らくなにかのサンプルをコンパイルしようとしてるかどっかからのコピペ
コードなんだと思うけどInitInstanceは普通自分で定義するんじゃないか?
ソース全部見ないと正確にはわかりません。

>>356
クラスメンバなら大丈夫。そうじゃないときは暗黙のうちにthisがわたされる
から無理。4番目のパラメータにthisわたしてクラスメンバからメンバ関数を
呼び出せばいいと思う。
359デフォルトの名無しさん:04/10/07 09:51:58
>>354
InitInstance というと AppWizard が自動生成するスケルトンに入っている関数か?
CreateThread に渡そうとして引数を変えたのにプロトタイプを直し忘れたとか、そーゆーオチか?
360デフォルトの名無しさん:04/10/07 10:05:10
354です。MAPI.Libをリンクするとそのエラーはなくなりましたが、
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\lib\MAPI.Lib
: fatal error LNK1136: ファイルが無効であるか、 または壊れています。
というエラーが出て結局ビルドできません。
361デフォルトの名無しさん:04/10/07 10:20:00
>>360
単に、別のリンクエラーが出て、そこで止まっただけ
362デフォルトの名無しさん:04/10/07 10:32:08
>>360
関係なさそうだな
そんなとこに InitInstance なんてねえもん
363デフォルトの名無しさん:04/10/07 15:35:15
該当スレが分からなかったので、ここで質問させてください。

すでに起動しているWindwosMediaPlayerを
外部からメッセージを送って操作する方法はありますか?
具体的には、あるタイミングで、WMPですでに選択されている
ファイルの再生をスタートさせるだけです。

よろしくお願いします。
364デフォルトの名無しさん:04/10/07 15:42:45
WindowsサービスからユーザがWindowsにログオン/ログオフするのを検知したいんだけど、
どうしたらいいんでしょうか?

とりあえずイベントログを定期的にチェックして検知とか考えました。
そんなめんどくさいことしないでもイベント通知してもらえたりするんでしょうか?

GINA使わないでやりたいです。

よろしくお願いします。
365デフォルトの名無しさん:04/10/07 16:47:53
函数と書きたいだけの厨房発見
366デフォルトの名無しさん:04/10/07 17:01:01
厨房と書きたいだけの(rya
(ryaと書きたいだけの
と書きたいだけの
367デフォルトの名無しさん:04/10/07 19:38:41
>>354
InitInstance は Windows API ではないので、中身は自分で書きましょう。
ウィンドウクラスの登録用に、習慣的にその名前を使っていただけ。
368デフォルトの名無しさん:04/10/07 19:58:35
>>363
WM_COMMAND送りつければいいんじゃ?
369デフォルトの名無しさん:04/10/07 20:21:04
>>363
MicrosoftR Windows Media? Player 7 SDK
Windows Media Player コントロール Version 6.4
ただし VBアプリから起動させる場合
370デフォルトの名無しさん:04/10/07 22:42:08
>>354
int WNAPI WinMain(〜)
が書いてある行より手前に
int InitInstance(HINSTANCE, int);
と書いてみろ。
371デフォルトの名無しさん:04/10/07 23:01:34
WNAPI
372デフォルトの名無しさん:04/10/08 05:30:38
GUIDを文字列にしてくれるAPIはありませんか?
自分で作ってもいいのですが、標準で用意されているような気がしてなりません。
373デフォルトの名無しさん:04/10/08 06:07:40
StringFromGUID2
374デフォルトの名無しさん:04/10/08 06:33:56
猫でもわかるの122章のプログラムを実行したのですが、次のような問題が発生します。
・DLLのロードに失敗する。
・hMyLibをstaticにしないと強制終了する。
・WM_PAINTメッセージが複数回ディスパッチされる。
元のソースコードは、構文的に間違っていないと思います。
対処法が全く分からず、困っています。どうすれば良いのでしょうか?
OSはWinXPHome、コンパイラはBCCを使用しています。
375デフォルトの名無しさん:04/10/08 07:55:48
リストビューについて質問です。
カラムの挿入でiColに好きな値を設定できないようなのです。
iOrderで順番も入れ替わるし、iColとサブアイテム番号の対応は自分で管理しないといけないのでしょうか?
376デフォルトの名無しさん:04/10/08 08:57:21
>>374

もうちょっと詳細に教えてくれ。

>・DLLのロードに失敗する。
LoadLibraryの後でGetLastErrorを呼んでエラーコードを調べる。

>・hMyLibをstaticにしないと強制終了する。
できればどの行で強制終了するのかデバッガ(BCCじゃ無理か?)で調べる。

>・WM_PAINTメッセージが複数回ディスパッチされる。
これは多分仕様。(違うかも)
377374:04/10/08 09:39:31
>>376
エラーコードを調べようとして、次のようにソースコードを書き換えたのですが、強制終了します。
case WM_PAINT:
hMyLib = LoadLibrary( "dll04.DLL");
wsprintf(str,"%d",GetLastError());
MessageBox(hWnd,str,"",MB_OK);
書き方に問題があれば、指摘して下さい。(^_^;)
378デフォルトの名無しさん:04/10/08 11:20:23
>>377
DLLの方に問題があったりしないか?
379374:04/10/08 11:37:58
MessageBox(NULL,"","",MB_OK);をWM_PAINTメッセージの処理部分の所々に挿入しながら検証していたのですが、
コンパイルを繰り返す内に、メッセージボックスが表示されなくなり、強制終了するようになりました。
最初は、画面の右下の方に表示されていました。中央に表示されないのが変だと思っていたのですが...。
また、メッセージボックスが表示される時に鳴る警告音が立て続けに20回くらい鳴ります。
そのため、WM_PAINTメッセージが複数回ディスパッチされていると判断しました。
>>378 実行ファイルと同じ場所に置いてあるので、問題ないと思うのですが...。
380デフォルトの名無しさん:04/10/08 11:44:14
>>379
WM_PAINTハンドラ→MessageBox→モーダルループ→無効領域がクリアされてない→WM_PAINT発生→WM_PAINTハンドラ→・・・
で無限ループに陥ってるかも。
381デフォルトの名無しさん:04/10/08 11:45:08
それはWM_PAINT処理にMessageBoxなんか入れたことが原因だろ。
382デフォルトの名無しさん:04/10/08 11:49:19
つか、WM_PAINTでメッセージボックス使うなよ・・・

OuputDebugStringでも使っとけ

デバッグ情報が表示できないなら、テキトーにフリーソフト使うと吉
ttp://search.vector.co.jp/search?query=OutputDebugString
383374:04/10/08 12:27:24
>>380
>>381
>>382
ありがとうございます。Turbo Debuggerをインストールしているのですが、使い方が分からないので困っていました。(^_^;)
紹介して頂いたデバッガを利用してみたいと思います。
384382:04/10/08 13:48:27
>>383
勘違いされてるような気がしないでもないので、
補足しておくと、
OuputDebugStringは文字列をデバッグ出力に送るAPI

リンク先のは、OuputDebugStringの出力を表示するツール

ちゃんとしたデバッガを使ってるなら、
それの使い方を覚えた方がいいと思われ
385374:04/10/08 14:56:43
>>384
いろいろ教えて頂きありがとうございます。Windowsプログラミングで簡単に文字列を出力する方法を知らなかったので、
仕方なくMessageBox関数を使用していました。OuputDebugString関数を使えば良いのですね。
>>379
無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
>>376
GetLastError関数の戻り値は0でした。やはり、DLLのロードに失敗しているようです。
386374:04/10/08 15:04:55
> >>379
> 無限ループになるのは当然ですね。つまらないミスでした。反省しています。(^_^;)
すみません、リンク先を間違えました。>>379ではなく>>380です。(^_^;)
387デフォルトの名無しさん:04/10/08 15:07:20
MessageBoxをループ内に配置するとエライ事になる。

ループ離脱条件を戻り値IDOK以外にしていたとする。
DestoryWindow()が親に送られたら地獄。
応答不能・シャットダウン不能となる。
DestoryWindow()APIがダイアログをIDOKで閉じるからである。
戻り値でループ離脱をする場合、十分注意しよう。
388デフォルトの名無しさん:04/10/08 15:48:47
>>385
winerror.hを見れば分かるが、
GetLastErrorの戻り値が0ということは直前のAPIは成功している

http://msdn.microsoft.com/library/en-us/debug/base/system_error_codes__0-499_.asp
389デフォルトの名無しさん:04/10/08 15:57:57
質問です。
階層構造が複雑で、子孫ウインドウが多数存在するトップレベルウィンドウがあります。
ウィンドウを非アクティブからアクティブにしたときに、そのウィンドウが
非アクティブになる前に持っていたキーボードフォーカスの位置を元に戻したいのですが、
WM_ACTIVATE(WA_INACTIVE) が送られてくるタイミングで GetFocus() してフォーカスを保存しようとしても、
ウィンドウを最小化したときなどはすでにフォーカスが失われているらしく、うまくいきません。

現在はすべてのウィンドウプロシージャで子ウィンドウのフォーカスの移動を監視し、それを
親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。
もし、もっとウマーな方法があればご教示ください。
390374:04/10/08 16:30:34
>>388
すみません、勘違いしていました。発言を撤回します。(^_^;)
>>384
OuputDebugString関数を使用してみたのですが、
"未定義の関数 'OuputDebugString' を呼び出した"
というエラーメッセージが表示されます。windows.hはインクルードしてあるのですが、
別のヘッダファイルをインクルードする必要があるのでしょうか?
391デフォルトの名無しさん:04/10/08 16:31:59
>>390
winbase.h
392デフォルトの名無しさん:04/10/08 16:45:20
OutputDebugStringだろ。
393382:04/10/08 16:52:10
漏れがタイポしたもより・・・欝だ詩嚢
394デフォルトの名無しさん:04/10/08 16:55:26
>>390
つーかこういう時ってまずタイポ疑えよ。
エラー起こるたびに訊いてるようじゃ進歩ねーぞ。
395374:04/10/08 17:03:12
>>392
>>384のレスの関数名をそのまま使用していたので、スペルのミスに気が付きませんでした。
指摘して頂いてありがとうございます。(^_^;)
396デフォルトの名無しさん:04/10/08 17:46:28
>>374
悪いことは言わん、これ入れとけ。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/home.htm
397デフォルトの名無しさん:04/10/08 17:48:32
っていうか、BCCだとTestFuncではなく_TestFuncになるからじゃね?
398デフォルトの名無しさん:04/10/08 19:24:17
[はい][いいえ]の2つのボタンがあって、
右上の[×](クローズボタン)も有効なメッセージボックスって、
「MessageBox()系のAPIでは作れない」ってことでよろしいでしょうか…?
399374:04/10/08 19:42:30
DebugTracerというツールを使ってOutputDebugStringの文字列を表示することができるようにました。
しかし、エラーコードは6(無効なハンドル)でした。環境に問題があるのでしょうか?
>>396
SDKをアップデートする必要があるのでしょうか?WinXPHomeSP1で作業しているのですが、
SP2に移行した方が良いのでしょうか?
400デフォルトの名無しさん:04/10/08 20:01:07
>>399
hMyLibがNULLかどうかも判断せずに、GetLastErrorしてOutputDebugStringしてないか?
401デフォルトの名無しさん:04/10/08 20:21:55
これだからタダコンパイラ使ってるような奴はイヤなんだよ!
402デフォルトの名無しさん:04/10/08 20:50:07
>>398
作れません。
Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・
403398:04/10/08 21:22:31
>>402
どうもありがとうございます。
> Xで閉じてキャンセルなら「はい/いいえ/キャンセル」の形式にしないとユーザわけわかんなくなるし・・・
確かにおっしゃる通りだと思います。
ただ、例えばデスクトップ上などでファイルを右クリック⇒削除を選ぶと、
>>398 のようなダイアログボックスが表示されるので、可能性がないわけではないかな…と思いまして。
404374:04/10/08 21:41:00
>>399
hMyLibは、NULL(=0)ではなく、012B0000という値を持っていました。LoadLibraryは失敗していなかったようです。
しかし、エラーコードをチェックすると、その値が無効であると言われてしまいます。
405397:04/10/08 21:46:57
>>404
ほとんどの場合、関数が成功した場合、SetLastErrorされないので、
GetLastErrorしても意味ない。

つーか、GetProcAddressのTestFuncを_TestFuncに書き換えれば、うまくいくはず。
406374:04/10/08 22:04:55
>>405
ありがとうございます。SetLastErrorとGetLastErrorの働きがよく分かりました。
指示通りに書き換えてみたのですが、うまくいきません。
407デフォルトの名無しさん:04/10/08 22:13:01
ここはお前の日(AAともにry
408デフォルトの名無しさん:04/10/08 22:18:38
黙ってりゃ報告くらいしろと騒ぐし
409デフォルトの名無しさん:04/10/08 22:24:37
グローバルフックを用いてキー入力をフックして、
フックプロシージャの中で、目的のウィンドウにキー入力を送信したいです。

どういう風に目的のウィンドウのウィンドウハンドルを取得するのがスマート、
というか一般的なんでしょうか

410ぬるぽ:04/10/08 22:25:46
必死だな
411デフォルトの名無しさん:04/10/08 22:40:56
>>409
目的のウィンドウが自分で作ってるウィンドウなら、共有メモリ領域にハンドルを書いておく。
そうでないなら、EnumWindow とかでゴリゴリ探すとか、Spy++ で手動で探したときと同じ
方法で探す。
412デフォルトの名無しさん:04/10/08 22:57:51
>>409
目的のウィンドウのタイトルotウィンドウクラス名がわかってるならFindWindowも
413409:04/10/09 00:04:29
>>411
>>412
ありがとうございます

自前のウィンドウに送りたいだけなので、
色々やってみます
414デフォルトの名無しさん:04/10/09 00:11:51
お兄ちゃんお願い!>>389を助けて!
415389:04/10/09 00:32:10
>>414
あきらめかけていたのですが、どうもありがとうございます。
でも、レスをいただけないということは、いい方法がないのかも・・・
416デフォルトの名無しさん:04/10/09 00:51:44
>親ウィンドウに次々と通知することで実現しているのですが、あまりスマートとはいえません。

なんでスマートといえないんだ?
君のプログラムは親関数に次々と return することで実現するより
グローバル変数のほうがスマートといえるのか?
jmp_buf みたいに親ウインドウのハンドルを次々に渡しておいて
通知はそのハンドルで一挙にって手もあるが、俺は推奨しないなあ・・・
417デフォルトの名無しさん:04/10/09 00:54:41
もしかして GetWindowLong / SetWindowLong を知らないのか?
418デフォルトの名無しさん:04/10/09 01:00:13
>>417
しっているとなにがどうなるんだ?
419デフォルトの名無しさん:04/10/09 01:14:49
説明するのだるいんでキーワードだけ出しとく
WNDCLASS::cbWndExtra
GWL_USERDATA
ポインタをキャスト
420デフォルトの名無しさん:04/10/09 01:17:34
やっぱりただのアホだったか
421デフォルトの名無しさん:04/10/09 01:25:53
痛いネタいっぱつお見舞いするか
422デフォルトの名無しさん:04/10/09 01:31:29
>>419
全然スマートじゃない気が
423デフォルトの名無しさん:04/10/09 01:35:23
誰の発言かわからなくなるまでしばらく沈黙
424デフォルトの名無しさん:04/10/09 02:23:55
sageてないのは二人しかいないような。
425389:04/10/09 02:43:49
お返事が遅くなりました。レスをくださった皆さん、どうもありがとうございます。

>>416
> なんでスマートといえないんだ?
すみません、「スマートといえない」という表現には語弊がありました。
ただ、取得のタイミングさえ合っていれば GetFocus() で一発で済むところを
わざわざ次々と橋渡ししなければならない構造にひっかかるものはありました。
GetFocus() を実行するのにいいタイミングで送られてくるようなウィンドウ
メッセージが存在するということが、実は一番期待していた答えだったのです。

> グローバル変数のほうがスマートといえるのか?
いえ、私もできるだけグローバル変数は使わないことにしていますので、
グローバル変数を使うことをためらった結果、あのような構造になったわけです。

>>417 >>419
> もしかして GetWindowLong / SetWindowLong を知らないのか?
私へのレスでしょうか? 普通に使っていますが、この場合はそれほど
有用ではないような気が…。私へのレスでなかったらすみません。
426デフォルトの名無しさん:04/10/09 03:01:13
>>425
いろんなフレームワークで行っているPreTranslateMessageみたいなことやれば?
427デフォルトの名無しさん:04/10/09 03:29:42
MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの
復元をしてるから、一発で解決するようなメッセージは無いと思う。
428374:04/10/09 06:02:54
> ・hMyLibをstaticにしないと強制終了する。
> ・WM_PAINTメッセージが複数回ディスパッチされる。
WM_PAINTハンドラにMessageBoxを置いたことが原因でした。(^_^;)
> ・DLLのロードに失敗する。
GetProcAddressに失敗していました。エラーコードは127(指定されたプロシージャが見つからない)です。
実は123章のプログラムでもファイルマッピングオブジェクトの読み出しに失敗します。
名前を指定する方法に問題があるのでしょうか?VCとBCCの仕様の違いでしょうか?>>405
429デフォルトの名無しさん:04/10/09 06:12:47
>>428
DLLは自作か?その際に名前のエクスポートはしてるのか?
エラーコードが出てるんだからまずその内容を調べろよ。
430デフォルトの名無しさん:04/10/09 07:18:54
回答者のレベル低すぎ・・・。

DepedencyWalkerとかでdll内部の関数名を確認しろ。
ま、DepedencyWalkerがなくてもdllの中身が見れるはずだが。
VCでビルドした場合だとC++のデフォで関数名が変わるのは常識だぞ。
エクスポート関数名に@とか混じってないか?
431デフォルトの名無しさん:04/10/09 07:38:54
>>430
374を読んでる?
アンタもレベル低すぎですから!残念!
432デフォルトの名無しさん:04/10/09 07:59:32
bccのデフォルトの呼び出し規約は__fastcallのはずなので

DLLの方で
#define EXPORT extern "C" __declspec(dllexport) __stdcall
EXEの方は
typedef __stdcall int (*PTESTFUNC)(int, int);
433デフォルトの名無しさん:04/10/09 08:08:45
>>431
読解力ないな。誰も話をVCだけに限定してないだろ。
それともBCはdllの規格をMSの規則に逆らうわけか?
434デフォルトの名無しさん:04/10/09 08:39:56
質問者はBCC使ってるのにVCの話したり、
CでのコーディングなのにC++で関数名が変わるのは常識とか言ったり
他人をレベル低いとか言ってるのに
自分もトンチンカンなレスしてるからだろ…

>それともBCはdllの規格をMSの規則に逆らうわけか?
関数名の問題なんでDLLの規格は関係ないでしょ。
435374:04/10/09 08:44:08
>>432
やはり、うまくいきません。
元のソースコードはVCを基準に書かれているので、BCCとの仕様の違いが明確になれば、
対処できると思うのですが...。(^_^;)
436デフォルトの名無しさん:04/10/09 09:03:18
もうVC買うかフリー版のVC使うかBCCでのサンプルを見つけろ。
437デフォルトの名無しさん:04/10/09 09:12:03
>>374
ちゃんと調べたのか?関数名。
どうも君はPGに向いてない気がする。

↓Dynamic Dependency Walker(フリー)
ttp://www.vector.co.jp/soft/win95/util/se232578.html
438デフォルトの名無しさん:04/10/09 09:16:33
>>434
>Cでのコーディングなのに
そんなこと書いてあった?
439デフォルトの名無しさん:04/10/09 09:26:57
>>434
君は>>374の足りない記述に関して通常の脳内補完をしているようだ。
それは通常レベルのプログラマ相手なら正しいだろうが、
初心者相手の場合はそうではない。
多くの場合、ありとあらゆる疑いの眼差しで初心者を見守ってあげる必要があるのだ。
440デフォルトの名無しさん:04/10/09 09:31:27
>>438
DLLのソースにextern "C"が有るから
C++の名前変形は関係ないでしょ。
441デフォルトの名無しさん:04/10/09 09:34:46
>それともBCはdllの規格をMSの規則に逆らうわけか?

parse error
442デフォルトの名無しさん:04/10/09 09:36:18
つーかもう初心者スレでやってよ。
443デフォルトの名無しさん:04/10/09 09:53:30
QueryPerformanceCounter、QueryPerformanceFrequency
この2つのAPIは最近のPCでエラーが起こりますか?
たとえば、CPUによって動作しないとかありますか?
444374:04/10/09 10:06:25
>>437
紹介して頂いたツールを利用してDLLをリストアップしたのですが、ロードしたDLLは見当たりません。
しかし、LoadLibraryには成功しています。ロードしたDLLと、それに含まれている関数の名前も、
呼出元と呼出先で相違がないことを確認しました。
445デフォルトの名無しさん:04/10/09 10:40:03
今なら言える
心の底から氏ねと
446デフォルトの名無しさん:04/10/09 10:54:48
>>444
Z:\>dumpbin /exports dll04.dll
Microsoft (R) COFF/PE Dumper Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file dll04.dll

File Type: DLL

Section contains the following exports for dll04.dll

00000000 characteristics
0 time date stamp Thu Jan 01 09:00:00 1970
0.00 version
1 ordinal base
2 number of functions
2 number of names

ordinal hint RVA name

1 0 00001238 _TestFunc
2 1 00009158 ___CPPdebugHook
(ry
447デフォルトの名無しさん:04/10/09 10:58:33
まず>>374は勉強が足りないな。
レス受けた内容についてもろくに解かってないようだし、
1日くらい試行錯誤してから書き込んだほうがいい。
448デフォルトの名無しさん:04/10/09 11:27:36
>>443
キミの知り合いが突然、「このAPIは最近のPCでエラーが起こりますか?
CPUによって動作しないとかありますか?」って質問してきたらどうする?
返答に困るデショ。
449デフォルトの名無しさん:04/10/09 12:09:55
>>448
高解像度カウンタは古いCPUだと使えないわけだが

>>443
IntelならPentium以降(P54なら確実、P5はしらん)
AMDは少なくともK5はサポートされてたはず
Cyrix系は不明
450!= 443:04/10/09 12:38:49
>443 関連で興味あって調べてたら、あんま関係ないけどこんなの見つけた。
ttp://www.flipcode.com/cgi-bin/msg.cgi?showThread=00000894&forum=general&id=-1

> Joacim: どうしてWin2kマシンでは QueryPerformaceCounter の後ろ24ビットを wrap するの?
> kewldude: くそ、それ知らずに実験してた。Win2kでもフリーズするアプリがあってよ。。。
> treething: 漏れが知る限り、全部のマシンで wrap してるぜ?でも何が問題なんだ?
> kewldude: ああ、でも普通は64ビットを wrap してて、24ビットじゃねーはずなんだよ。

これはどういう問題? wrap ってどういう意味で使ってるの?
451デフォルトの名無しさん:04/10/09 12:56:06
脳内HDDと脳内メモリの容量が小さい漏れにはプログラミングは不可能ですか?
電話の相手の苗字とかすぐ忘れるんだよ。
452389:04/10/09 12:59:09
ずいぶん上の方に流れてしまいましたが・・・

>>426
> フレームワークで行っているPreTranslateMessageみたいなことやれば?
どうもありがとうございます。ただ、PreTranslateMessage の機構を
導入するとなると、私のイメージするものからは遠ざかってしまいそうです。

>>427
> MFCのフレームワークでさえ、結構面倒な機構を準備してフォーカスの
> 復元をしてるから、一発で解決するようなメッセージは無いと思う。
なるほど・・・MFCではほとんど組んだことがなかったので気が付きませんでした。
あきらめて今までの方法でいこうと思います。どうもありがとうございました。
453デフォルトの名無しさん:04/10/09 13:39:33
>>444
もう1度122章のプログラムを作り直せ。
もとのソースは見るな。どこも書き換えるな。
454デフォルトの名無しさん:04/10/09 13:55:34
.defファイルちゃんと書いてるのかな
455デフォルトの名無しさん:04/10/09 13:57:26
>>450
output = (input)%size
って感じ。
たとえば文章を80文字で wrap すると、81文字目は次の行の先頭に表示される。
456デフォルトの名無しさん:04/10/09 14:12:13
>>454
__declspec(dllexport) してるんだからそんな必要はない。
ラベル名に対する、ある思い込みが邪魔をしているだけだ。
457デフォルトの名無しさん:04/10/09 14:35:06
>>456
はぁ?嘘もいい加減にしろヴォケ
defファイルきちんと書かんと@付いた変な名前になって
GetProcAddressで引けなくなるぞ
458デフォルトの名無しさん:04/10/09 14:41:07
extern "C"が要るんだっけ?

でもそうすると他の言語から呼び出せなくなるね
459デフォルトの名無しさん:04/10/09 14:46:45
>>457
装飾名になるかどうかはエクスポートしたかどうかとは無関係
460デフォルトの名無しさん:04/10/09 14:50:05
↑何言ってるのかワカンネ
ほら、チョン学校で日本語やり直さないと
461デフォルトの名無しさん:04/10/09 14:53:32
>>458
ha?
462デフォルトの名無しさん:04/10/09 14:57:34
>>460
だいたい「変な名前」なんて用語ねえんだよ
おおかた MSU 逝く金もねえんだろ (プゲラ
463デフォルトの名無しさん:04/10/09 14:58:50
MSDN も全部デッドコピーか
464デフォルトの名無しさん:04/10/09 15:00:54
>>459
装飾名になるかどうかはエクスポートしたかどうかとは無関係だから、
defファイルを書いておかないと装飾名つきのままエクスポートされてしまうと言っているのだと思うが。
465デフォルトの名無しさん:04/10/09 15:04:55
>>464
なるほど、アフォケテーイでよかったんだな
466デフォルトの名無しさん:04/10/09 15:15:26
質問者の分際で情報小出しする馬鹿は、もうスルーしろ。


・・・・・・・・・・・・・・dllネタ終了・・・・・・・・・・・・・・・・・・・・
467デフォルトの名無しさん:04/10/09 15:17:06
・・・・・・・・・・・・・・dllネタ再開・・・・・・・・・・・・・・・・・・・・

回答者づらをしてみたかっただけのど初心者が1人いるようだがスルーよろ
468デフォルトの名無しさん:04/10/09 15:20:51
>>449
質問者は「最近のPC」と書いてるデショ。
質問者はもう少し情報を提供してくれないと返答できませんョ。
469デフォルトの名無しさん:04/10/09 15:39:52
もう少しって、どのくらいか基準でもあるのか?
詳しく書かれすぎても連投荒らしみたいになるぞ

どんな情報が必要かは回答者ごとに異なると思う
470デフォルトの名無しさん:04/10/09 16:00:00
核心の部分を故意に記述しない質問者も荒らしだろ。
しかも、他人を巻き込み無駄レスを大量発生させる。
471デフォルトの名無しさん:04/10/09 16:17:10
いっぱつサックリ答えられる必要ないじゃん
技術的な話を楽しみに来てる人だっているわけで・・・
472デフォルトの名無しさん:04/10/09 16:46:47
RegisterClassがめんどいんですけど。
最近では既存のコントロール乗っ取ってサブクラス化して
自分色に染めるのが好きです。
そういう用途に都合の良い既存クラスってありませんか?
473デフォルトの名無しさん:04/10/09 17:10:42
腐女子は何でも801の対象にできる
474デフォルトの名無しさん:04/10/09 17:22:26
>>472
static
475デフォルトの名無しさん:04/10/09 18:01:14
>>473
俺もか?
476デフォルトの名無しさん:04/10/09 19:32:41
>>475
もちろん
477デフォルトの名無しさん:04/10/09 20:00:22
GDI+でダブルバッファリング使いたいんですけど、
C++の場合はどのようにすれば良いんでしょうか?
C#だと
Image img = new Bitmap(width , height);
Graphics buf = Graphics.FromImage(img);
として、バッファに書き込み最後に
g.DrawImage(img , 0 , 0);
とすれば良いと、分かったんですが
C++になると分かりません。
どなたか教えてください
478デフォルトの名無しさん:04/10/09 20:33:59
>>477
同じやり方ででけへんかい?
479374:04/10/09 20:37:13
DLLのロードに成功しました。やはり、VCとBCCの仕様の違いが原因だったようです。

borland C++Builder での DLL の構築方法
ttp://www.borland.co.jp/qanda/cbuilder/c0003194.html

大変ご迷惑をおかけして、申し訳ありませんでした。しかし、なぜこのような違いがあるのでしょうか?
480デフォルトの名無しさん:04/10/09 20:46:54
>>479
BCCちゅーからコマンドラインかと思たーよ
481374:04/10/09 20:54:53
>>480
BCC Developerを使用しています。
482デフォルトの名無しさん:04/10/09 20:59:37
>>479
何の仕様が違うと思ってるのかは知らないが、
そこに書かれている内容はVC++の場合となんら違いない。
483477:04/10/09 21:09:48
>>478
C++の場合
Image img = new Bitmap(width , height);
の部分でどう書けばいいか分からないんです。。。
484デフォルトの名無しさん:04/10/09 21:24:46
>>479
それってGetProcAddressを使った明示的ロードには見えないがそれでいいのか?
485デフォルトの名無しさん:04/10/09 22:14:02
486485:04/10/09 22:17:44
487374:04/10/09 22:20:18
>>484
次のように書き換えました。

extern "C" __declspec(dllexport) int TestFunc( int a, int b )

extern "C" int WINAPI __declspec(dllexport) TestFunc( int a, int b )

このように書き換えないと、DLLのロードに失敗します。
488デフォルトの名無しさん:04/10/09 22:28:04
もういいじゃん。飽きた。
489デフォルトの名無しさん:04/10/09 22:30:16
まんぐりがえしを抑制するだけだろ
490デフォルトの名無しさん:04/10/09 23:00:42
>>489
ワラタ
491デフォルトの名無しさん:04/10/09 23:12:07
>>435で駄目で>>487はいけるのか。ようわからん環境なんだな。
492デフォルトの名無しさん:04/10/09 23:23:00
荒れるからageないで
493デフォルトの名無しさん:04/10/09 23:30:48
うっさい
494初心者:04/10/09 23:53:50
ウィンドウのサイズ変更したら再描画するようにするにはどうすればいいか教えてください
495デフォルトの名無しさん:04/10/09 23:56:15
CS_HREDRAW, CS_VREDRAW
496初心者:04/10/10 00:19:05
>>495
ありがとうございます。あとWM_PAINTメッセージじゃなくて
ウィンドウのサイズを変更したら送られるメッセージとかってありますか?
497デフォルトの名無しさん:04/10/10 00:21:24
>>496
WM_SIZE
っていうかMSDN読め
498デフォルトの名無しさん:04/10/10 00:24:58
スパれよ小僧が
499デフォルトの名無しさん:04/10/10 00:28:38
500デフォルトの名無しさん:04/10/10 00:42:26
WM_SIZINGも調べとけ
501374:04/10/10 21:05:57
>>432
>>491
うまくいかなかったのは、新しいDLLをコピーし忘れ、古いDLLの方をロードしたためです。
いい加減なレスをして申し訳ありませんでした。(^_^;)
502デフォルトの名無しさん:04/10/11 17:55:32
PostMessage(hfw,WM_KEYDOWN,VK_SPACE,0);

のように、キー入力メッセージを渡したいのですが、
Ctrl+A(コントロールを押しながらAキーを押す)入力メッセージを
渡すにはどうすればいいでしょうか?
503デフォルトの名無しさん:04/10/11 18:34:44
keybd_eventにしたら?
504デフォルトの名無しさん:04/10/11 18:38:38
ウィンドウの終了処理について×ボタンを押すてもexeが終了せず、
ビルドを再度行うと、LINK : fatal error LNK1168: 書き込みモードで Debug/rap.exe を開けません
というエラーが出ます。
以下ソースです。原因分かる方がおりましたらお教え願います。

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)
{
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wp,lp);
}

----------略--------------------

while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
return msg.wParam;
505デフォルトの名無しさん:04/10/11 19:07:03
×ボタンについては、WM_CLOSEを処理汁。
で、前のプログラムをちゃんと終了させればエラーも出なくなる。
506デフォルトの名無しさん:04/10/11 19:08:48
>>504
終了しないプログラム(ファイル)を書き換えることができないのでビルドに失敗する。
何らかの方法で強制終了してからビルドすべし。
507デフォルトの名無しさん:04/10/11 20:19:56
>>505
WM_CLOSEをDefWindowProcに送ればDestroyWindowされるけど。
508505:04/10/11 20:33:43
>>507
そうでしたね。出しゃばってすみません。
509505:04/10/11 22:14:35
みなさまレスサンクスです。


WinMain関数中のWNDPROC 型の指定をWndProcでは無くべつ名前にしておりました。
お騒がせ致しました。
510デフォルトの名無しさん:04/10/12 18:29:35
変数aに読み込んだデータをあるところで区切って改行して下に表示したいのですがどうすればいいですか?
511デフォルトの名無しさん:04/10/12 18:31:28
1. あるところで区切って改行する
2. 下に表示する

以上
512デフォルトの名無しさん:04/10/12 18:50:06
いやだからさ、クライアント領域全部に描画しちゃうからさ
1回描画したら2回目以降の表示で前回の表示消えちゃうだろボケが
513デフォルトの名無しさん:04/10/12 19:18:24
>>512
この文章の意味がわからないのは漏れだけ?
514デフォルトの名無しさん:04/10/12 19:19:15
お前だけ
515デフォルトの名無しさん:04/10/12 19:20:10
>>513
書いてある文字は理解できるが内容が理解できん
どこから出てきた話だ、これ?
516510:04/10/12 19:26:07
はいはい、わかりましたよ。まずよ、文字描画するときって
変数に貯めてる文字をいっぺんにクライアント領域に描画しますよね。
そうじゃなくて変数に貯めてあるデータを決まったバイト数分ごとに
改行して描画したいのですよ糞ボケが。なので教えてくださいタコが
517デフォルトの名無しさん:04/10/12 19:29:45
・補足後も情報足りない
・口調が悪い

答える物好きもおるまいて
518デフォルトの名無しさん:04/10/12 19:30:30
>>516
文字列を任意の位置に表示することはできるの?
だったら改行したい量ごとに文字を分割して
それぞれ任意のy座標に書けばいいだけじゃないか。
519デフォルトの名無しさん:04/10/12 19:32:56
まあ馬鹿にはわからないだろうがバックバッファ持って横幅文字数に区切った文字列を描画
その文字のサイズ分Yを足して2行目描画
描画実行時にそれをクライアント領域に転送
API以前の問題だな。馬鹿らしい
520デフォルトの名無しさん:04/10/12 19:39:24
なんでバックバッファが出てくるんだ?
521デフォルトの名無しさん:04/10/12 19:40:46
>>520
いきなりクライアント領域に2回に分けて書いたらちらつく場合があるからじゃない?
522510:04/10/12 20:05:14
バックバッファなんてわかんねぇよチンカス
523510:04/10/12 20:06:24
だまれぼけ
524デフォルトの名無しさん:04/10/12 20:57:45
変数に改行する情報とかって入れれないの?
525デフォルトの名無しさん:04/10/12 21:09:06
>>510
DrawTextのRECTを設定して描画じゃだめなのか?
526デフォルトの名無しさん:04/10/12 21:21:18
描画するときはエディットコントロールにEdit_SetTextマクロを使って描画してます。
れくと構造体は使いません
527デフォルトの名無しさん:04/10/12 21:24:48
普通に改行いれちゃだめのか?
528デフォルトの名無しさん:04/10/12 21:28:15
普通というと?
529デフォルトの名無しさん:04/10/12 22:21:34
バカは放置しろよ
530:04/10/12 22:25:58
方法わかる方のみレスをつけてください。バックバッファとか言ってる馬鹿はいりません
531デフォルトの名無しさん:04/10/12 22:26:35
*NULL='\0';
532デフォルトの名無しさん:04/10/12 22:36:06
>>518が答えだろ
533デフォルトの名無しさん:04/10/12 22:38:58
そんなことはできない
534デフォルトの名無しさん:04/10/12 22:59:41
特定のバイト数分ごとに変数に特定の文字は入れれる。改行ができない
535デフォルトの名無しさん:04/10/12 23:35:20
dwStyle = WS_CHILD | WS_VISIBLE;
dwExStyle = WS_EX_LAYERED;

だと表示されないんだけど、これは仕様ですか?
MSDN 読んだけど、特に注意書きはないし(´・ω・`)

ちなみに、WS_CHILD をなしにすると、
ちゃんと半透明もしくはカラーキー付きで表示できるのは確認済みです。
536デフォルトの名無しさん:04/10/12 23:48:33
ttp://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp
には
「概要: トップレベル ウィンドウに透明と半透明効果を追加するための効率的な手段」
とある。
537デフォルトの名無しさん:04/10/12 23:49:31
WS_EX_LAYERED
 Windows 2000/XP: Creates a layered window.
 Note that this cannot be used for child windows.
 Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
538デフォルトの名無しさん:04/10/12 23:51:57
Windows XP: With WS_EX_COMPOSITED
set, all descendants of a window get bottom-to-top painting order using double-buffering.
Bottom-to-top painting order allows a descendent window to have translucency (alpha) and transparency (color-key) effects,
but only if the descendent window also has the WS_EX_TRANSPARENT bit set.
Double-buffering allows the window and its descendents to be painted without flicker.
539デフォルトの名無しさん:04/10/13 00:00:58
>>536-538
レスサンクスです

> Note that this cannot be used for child windows.

ハッキリ書いてましたね(´・ω・`)
日本語のほうにはこれっぽちも書いてないのにヽ(`Д´)ノ

お騒がせしました。
540510:04/10/13 00:27:06
奇跡。改行できた。お前等マジで糞。訳に立たなすぎ(プゲラチョフ
特にバックバッファとか逝ってた糞ボケ。はぁ?アホ?なに?バックバッファって?
541535:04/10/13 00:32:02
子ウィンドウはダメっぽいので、WS_POPUPでやることにしました。
フォーカスを親から奪ってしまう点などは、無理矢理SetFocusさせて解決できそうです。
ああ、あと位置も、親のWM_MOVEの時にまとめて修正で行けそうです。

ありがとうございました。
542デフォルトの名無しさん:04/10/13 02:54:42
Sleep(1)で10ms待たされます。
もっと正確なSleepを使うにはどうすればよいのでしょうか?
543デフォルトの名無しさん:04/10/13 03:03:20
>>542
そんなSleepありません。マルチメディアタイマーを使っても
そんな精度出るかどうか。
544デフォルトの名無しさん:04/10/13 03:18:13
戻ってくるまでに 1010ms かかるってこと?
545デフォルトの名無しさん:04/10/13 03:32:11
>>544
それでは、1ms待ちたいのに、1秒と10ms待たされる事になりますけど…
timeSetEventも駄目でした。
timeGetTimeで測定しているのが駄目なのかもしれないので、
PerformanceCounterで測ってみます。
546545:04/10/13 03:47:25
PerformanceCounterだと、20ms待たされる事が一番多かったです。
547デフォルトの名無しさん:04/10/13 03:53:37
Sleepはタイムスライスを放棄するためのAPIであって一定時間待つためのAPIじゃない。
548デフォルトの名無しさん:04/10/13 04:10:15
じっけんだ!

SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)

してから、timeSetEvent したらどうなるのかな?

# マシンが応答しなくなるかもしれんがw
549545:04/10/13 04:35:05
>>548
特に重たくはなりませんでした。

timeSetEvent(17, 1, TimeProc, 0, TIME_PERIODIC);
だと、10msか20msにばらけるので使えないと思ったのですが、

timeSetEvent(1, 1, TimeProc, 0, TIME_PERIODIC);
にして、TimeProc内で17ms経過を待ってみます。
550545:04/10/13 05:00:32
549のやり方でも10ms単位みたいです。

>548で単純ループ(CPU使用率100%)で時間を数えると、マシンの応答が無くなりました。
これを変えなければ特に遅くはならないので、単純ループで数える事にします。
551デフォルトの名無しさん:04/10/13 07:54:26
>>545
timeBeginPeriod(1) すると、Sleep() の精度も上がるよ。
どっちにしろ、リアルタイムOSではないので完全に正確にはならないが。
552デフォルトの名無しさん:04/10/13 09:08:23
PerformanceCounterで10msって・・・どういう環境だよ
あれ普通マイクロ秒とかそういう精度だろ?
553デフォルトの名無しさん:04/10/13 09:47:02
>>542
何の目的で正確に10ms待つ必用が用途を言った方がいいかも。
>>551で十分かもしれないし、場合によってはドライバ書いたり
別OSじゃないと駄目だったりするから。

あらゆる状況で10msだけ待つことを保障するっていうのは普通
Windowsじゃ無理。
554デフォルトの名無しさん:04/10/13 13:27:07
zip圧縮をDLL無しで行う方法を教えてください
555デフォルトの名無しさん:04/10/13 13:28:56
>>554
ファイルを選んで右クリックでコンテキストメニューが出るだろ。
556デフォルトの名無しさん:04/10/13 13:38:36
>>554
zlibをstatic linkしろ
557デフォルトの名無しさん:04/10/13 13:40:45
>>556
zlibの入手先やリンク方法を教えてくださ
558デフォルトの名無しさん:04/10/13 13:43:38
連邦のモビルスーツはグーグルを知らんのか!
559デフォルトの名無しさん:04/10/13 13:48:44
グーグルはどこで売っているのでしょうか。近所にはGOOしか売ってないです。
560デフォルトの名無しさん:04/10/13 15:43:01
え?うちの近所じゃinfoseekとlivedoorも打ってたよ
561デフォルトの名無しさん:04/10/13 16:25:35
安かったから買ってきたんだが、infoseakとJivedoorだった!だまされた!
562デフォルトの名無しさん:04/10/13 16:56:20
>>552
QueryPerformanceFrequency

>>545
timeBeginPeriodしなきゃtimeGetTimeの精度も上がらないのでは?
563デフォルトの名無しさん:04/10/13 20:23:46
すみませんが質問させて下さい。

vc6.0+win32環境です。

ツールバーをカスタムドローしてボタンのアイコンを書いています。
NM_CUSTOMDRAWメッセージを処理してNMCUSTOMDRAWのRECTメンバ
からアイコンの位置を取得する時に、ドロップダウンを持つボタンのみ
縦の位置がずれてしまいます(XP環境でテーマ(manifest)を置いている時に限りです)。

何方か位置がずれない方法を知りませんでしょうか?
よろしくお願いします。
564デフォルトの名無しさん:04/10/13 20:58:02
リストビューのカラムの数はどうやって得るのでしょうか?
565デフォルトの名無しさん:04/10/13 21:24:07
>564

LVM_GETHEADERと
HDM_GETITEMCOUNTかな
566名無し~3.EXE:04/10/13 22:02:14
Windows2000のグループ名を取得したいけどどうしたらいい?
MSDNで見つけられなかった・・(つД`)
567デフォルトの名無しさん:04/10/13 22:20:01
NetWkstaGetInfo
568名無し~3.EXE:04/10/13 22:28:43
>567
ありがとうございまつ。これで今日寝られる・・・(つД`)
569デフォルトの名無しさん:04/10/13 23:21:24
ファイルのオープンに関して質問です.
GetOpenFileName()で指定したファイルをオープンできる所まで試しました.
ですが,選択する画面でデフォルトのパスがマイドキュメントになっています.
これを任意のディレクトリに変更するにはどうしたらよいでしょうか?

VC7環境です
570デフォルトの名無しさん:04/10/13 23:26:21
OPENFILENAMEのメンバかたっぱしから調べろ
571デフォルトの名無しさん:04/10/13 23:49:00

WindowsXPで
ファンクションF3キーでの「検索結果」ウインドウ
をグローバルフック等で無効化したいのですが、
どのクラスでメッセージを受け取っているのか
分からない状態で困っています。

spy++などで「Shell_TrayWnd」を覗いてみたのですが
「0xC0F2」(登録:ShellFileOpened)のメッセージが
ポストされていて、未処理の様で、ここでは無いみたいです。

どなたかご存知の方いらっしゃいませんでしょうか?

572545:04/10/14 00:22:52
>>551
私の環境では、timeBeginPeriod(1)を使ってもSleep(1)は10msかかりました。

>>552
Sleep(1)にかかる時間を測定するために PerformanceCounter を使ったら、
20msかかっていたと言う意味です。

>>553
用途はゲームです。 (最初に言うべきでした)

>>562
timeBeginPeriod(1)でtimeGetTimeの精度が上がるのはNT系のみのようです。
9x系は最初から1ms単位です。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpmltimd/html/_win32_timegettime.asp

timeBeginPeriod(1)とtimeGetTimeで時間の測定は十分正確にできますが、
問題はCPU使用率を下げるために呼び出す Sleep(1) が 10ms も待たされる事です。

結局、Sleep は指定した時間をms単位で待ってはくれるけど、
その時間が過ぎてもタイムスライスの関係ですぐには復帰しないのでしょうかね。
573デフォルトの名無しさん:04/10/14 01:21:24
少なくとも指定した分だけ待つ、じゃないかなあ。
574デフォルトの名無しさん:04/10/14 01:25:54
>>572
もしかして、環境は9xなのか? 2000ではそれなりにきっちりSleep()してくれたんだが。
575デフォルトの名無しさん:04/10/14 01:46:36
sleepは最低これだけ待つというだけだぞ
だから極端な話20秒ウェイトがかかったとしても仕様通り
576デフォルトの名無しさん:04/10/14 01:51:15
MSDNはちゃんと読もうね。
The Sleep function suspends the execution of the current thread
for "at least" the specified interval.
""内に注目。
577デフォルトの名無しさん:04/10/14 02:18:21
>>576 ごめんなさい。 これからは英語のも確認します。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdllpro/html/_win32_sleep.asp
>指定された時間にわたって、現在のスレッドの実行を中断します。
578デフォルトの名無しさん:04/10/14 02:58:26
ほんとに、プログラマめざしてるのか?
最低、2chなんぞ頼るなよボケ、絶対採用しない
579デフォルトの名無しさん:04/10/14 03:01:57
>>578
間違ってあなたの会社へ行かないようにするため、社名を教えてくれませんか?
580デフォルトの名無しさん:04/10/14 03:19:44
timeSetEvent まわりの記事
一応、Windows でもっとも正確なタイマーがマルチメディアタイマーということに
なっているが…

http://support.microsoft.com/default.aspx?scid=kb;ja;148404
http://support.microsoft.com/default.aspx?scid=kb;ja;153400

というか、何でそこまで正確に 1ms の時間が必要なんだ?
581デフォルトの名無しさん:04/10/14 04:13:22
>>580
1ms単位が必要と言うより、10ms単位が困るのです。

10ms単位だと、11ms待ちたい時に20ms待つ事になり、倍時間が変ってきます。
これが、100msと110msとなら気にならないかもしれません。
582デフォルトの名無しさん:04/10/14 04:16:01
>>579
マイクロソフトです。
583デフォルトの名無しさん:04/10/14 04:50:50
>>581
それはやっぱり1ms必要ってことじゃん
584デフォルトの名無しさん:04/10/14 05:08:37
>>582
正確に訳せボケ!
585デフォルトの名無しさん:04/10/14 09:28:48
>>581
11ms待ちたい時に20ms待つ事になっても大丈夫なように作るのが
Windows流です。
586デフォルトの名無しさん:04/10/14 10:32:05
Sleepがどんなに正確でも
Sleepから返って来た直後に別スレッドに持ってかれたら意味無いわけで。
マルチタスクOSで正確なウェイトなんて考えるほうがバカ。
587デフォルトの名無しさん:04/10/14 10:46:08
というか、ゲームでのウェイトにSleep使うな
メインループでぶん回し、メインループから分岐で各処理を呼び出す
ウェイトが必要なら、その処理を空回りさせて処理しろ
うちのプログラムで使ってるそのへんの処理を簡略化して書くとこんな感じだ

// これはメインループから呼び出される関数内
switch( process ){
 case WAIT_START:
  TickCheckStart = GetTickCount();
  oldprocess = process;
  process = WAIT;
  break;
 case WAIT:
  if( (TickCheckStart + 10) > GetTickCount() )
   process = oldprocess;
  break;
 case KEYWAIT:
  // キー待ち処理とか
// あとはこの調子で画面効果とか、スクリプト処理とかを分岐させていく
}
// 画面描画
588デフォルトの名無しさん:04/10/14 10:55:16
>587
常時CPU使用率が100%になるゲーム、逝ってよし。

Sleepを怖がってWindowsでゲームが作れるか!
589デフォルトの名無しさん:04/10/14 10:57:28
>>588
あぁ、Sleepは入れるよ
ただ、Winに処理返すために使うのであって、10msきっちりとかは考えない
>>581で言ってるような細かいことにSleep使うのはやるなってこと
590デフォルトの名無しさん:04/10/14 11:47:08
Sleep(0)じゃCPU使用率が100%になるから意味内
591デフォルトの名無しさん:04/10/14 12:16:50
WaitForXXXでいいだろ。
Sleepなんか使うな、メッセージへの応答も遅くなるし。
592デフォルトの名無しさん:04/10/14 18:00:27
ウィンドウメッセージはメインスレッドで処理して、
ゲームループは別スレッドで回すモンじゃないのか?
593デフォルトの名無しさん:04/10/14 18:12:58
ああああ,11111,うううう,おおおお,22222
カンマ区切りのデータを読み込んで
それぞれのエディットボックスに表示させたいと思っているのですが・・・。

最初はWM_COMMANDメッセージのイベントにANSI Cでstrtokを使用し、
カンマ区切りでデータを分割しようとしたのですが
データに日本語が入っているため、うまくいきませんでした・・・。

こうすれば超簡単とかいうのがございましたらお教え願います。
594デフォルトの名無しさん:04/10/14 18:23:59
>データに日本語が入っているため、うまくいきませんでした
ダウト

というかWIN32APIの話ではないな。
どーしてもWIN32APIで処理したいなら、ODBCでテキストドライバでも使え。
595デフォルトの名無しさん:04/10/14 18:46:03
strtok のマニュアルを隅々まで読め。超簡単だろう。
596デフォルトの名無しさん:04/10/14 18:55:34
>>593
Win32APIじゃないけど_mbstokじゃだめか?
597デフォルトの名無しさん:04/10/14 19:16:25
レスたいへんありがとうございます。(TT)
日本語をカンマ区切りでテキストに書き込めましたので
読み込みもできると思い込んでおりました。
英数字だけのカンマ区切りのデータの場合の処理の仕方がありましたら
どんなものか概要をお教え頂ければ幸いです。

WinAPIでコントロールをたくさん貼り付けて作成しているので、
こちらで質問させて頂きました。
そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。
598デフォルトの名無しさん:04/10/14 19:18:31
スタティックコントロール内の文字なんですが、縦センタリングって可能なんで
しょうか?
自動的でなくても、表示位置を任意に設定できるならそれを使おうと思うのです
が、どうしても方法が分かりません。

599デフォルトの名無しさん:04/10/14 19:45:12
> そもそも、WinAPIにANSI Cを使うことは間違いなのでしょうか。
それ自体は間違いでも何でもない。
・ANSI C関数の使い方(選び方)
・このスレの使い方
が間違っている
600デフォルトの名無しさん:04/10/14 21:51:44
DVD-RAMの空き容量を取得したいのですが、
GetFreespaceEx()で取得できるのでしょうか?


601600:04/10/14 21:54:33
重ね重ねでもうしわけないのですが、
DVD-RAMドライブにDVD-RAMを挿入した状態で、
GetDriveType()を行った場合、DRIVE_RAMDISKは返ってきるのでしょうか?
602デフォルトの名無しさん:04/10/14 21:59:28
>>600
GetDiskFreeSpaceEx()のことかね?
603デフォルトの名無しさん:04/10/14 22:00:53
>>601
DVD-RAMはあからさまにRAMディスクじゃねえからなあ…
604600:04/10/14 22:01:01
>>602
そのとおりです。間違いました、すみません。
605602:04/10/14 22:18:55
>>601
Panasonic LF-D201ではGetDriveType()でDRIVE_CDROMが返ってきた。
GetDiskFreeSpaceEx()で空き容量を取得することは出来た。
606600:04/10/14 22:24:45
>>602
お手数おかけして、すみませんでした。
試して頂いたおかげで助かりました、どうもありがとうございました。
607デフォルトの名無しさん:04/10/15 02:20:26
HRESULT hr;
IStream pi;
if( FAILED(hr = SHCreateStreamOnFile("A:\\a.txt", STGM_WRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DIRECT, &pi)) )
{ /* エラー */ }

const UINT size = 1457665;
LPBYTE buf = new BYTE[size];
ULONG written;

if( FAILED(hr = pi->Write(buf, size, &written)) )
{ /* エラー */ }

空のフロッピーに1457665バイト(空き容量+1バイト)書き込みます。
空き容量より大きいので失敗すると思ったのですが、なぜかS_OKが返ってきます。
writtenにもsizeと同じ値が返ってきてます。
空き容量が足りないはずなのに、なぜ成功してしまうのでしょうか?
608607:04/10/15 02:21:55
>>607
>IStream pi;
IStream* pi;
修正
609607:04/10/15 02:35:15
あと、実際にフロッピーに作られたファイルは1,454,080バイトでした。>>492
610デフォルトの名無しさん:04/10/15 02:42:00
>>609
バッファリングされるからWriteではエラーにならないとか?
もっと極端に大きなサイズを書こうとすればエラーになるんじゃない?
611デフォルトの名無しさん:04/10/15 05:17:39
CPU使用率が100%のまま移行するとCPUが熱くなって、
ノートパソコンだとファンがうるさいそうです。
612デフォルトの名無しさん:04/10/15 06:52:25
>>609
492 とは?
613607:04/10/15 11:01:54
>>610
Commit(STGC_DEFAULT)を呼んだらSTG_E_MEDIUMFULLが返ってきました。
どうやらバッファリングしてるみたいです。1,454,080が512や4096の整数倍だし。
とりあえず最後にCommitすることで解決しました。Writeでエラーにならないのは釈然としないけど…
ありがとうございました。

>>612
なんでもありません。いつのまにか付いてました。
614デフォルトの名無しさん:04/10/15 12:45:47
>>613
>Writeでエラーにならないのは釈然としないけど
実際に書き出しているわけではないから仕方ないかと。
615デフォルトの名無しさん:04/10/15 13:43:43
エディットボックスやコンボボックスなどのをコントロールをたくさん作成して
あるお方のお手本通りウインドウプロシージャ内(WinPrco)のWM_CREATEで作成しているのですが
WinMain関数内で作成しないでWM_CREATE内で作成する理由はあるのでしょうか。
また、WM_CREATEは、プログラム起動時に発生するメッセージという認識なのですが
間違っていますでしょうか?
616デフォルトの名無しさん:04/10/15 14:00:22
>>615
WM_CREATEが来るのはウィンドウ作成中
WinMainでウィンドウ作成後に設定するよりスマート(だと俺は思っている)

WM_CREATEはプログラム開始時ではなく、ウィンドウ作成時。名前の通り
617デフォルトの名無しさん:04/10/15 15:35:14
ウィンドウプロシージャを再利用する時、そのウィンドウに
関する初期化処理をWM_CREATEに書いておけばウマーとか。
618デフォルトの名無しさん:04/10/15 16:02:51
最近、ワイド液晶を搭載したノートPCとかが出ていますけど、
こういうモニタの物理的なアスペクト比を取得する手段って
ないでしょうか?
619デフォルトの名無しさん:04/10/15 16:07:23
レジストリ
620デフォルトの名無しさん:04/10/15 16:10:17
GetDeviceCaps で取れないか?
621デフォルトの名無しさん:04/10/15 16:17:41
GetMonitorInfoじゃないか。
622デフォルトの名無しさん:04/10/15 17:08:34
質問です。

CreateWindowで作成したLISTBOXで
WM_DRAWITEMを使わずに
リストボックスの各項目の背景を任意のビットマップにする方法はあるでしょうか?

なんかうまいことやってるアプリを昔見かけた気がするのですが・・
あれはオーナードローなのかな。
623デフォルトの名無しさん:04/10/15 17:16:03
>>615
グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、
自然と WM_CREATE の中で初期化をおこなうようになりますよん。
624デフォルトの名無しさん:04/10/15 17:22:41
>グローバル変数の使用を極力避けるようなプログラミングを心がけている人なら、

>自然と WM_CREATE の中で初期化をおこなうようになりますよん。


関連性ないよ
625デフォルトの名無しさん:04/10/15 18:09:17
>>615
もし何らかの理由でコントロールの構築に失敗した場合、
DestroyWindowせずとも-1を返してやるだけでウインドウの作成をキャンセルできるから。
626デフォルトの名無しさん:04/10/15 21:40:35
>>389
ローカルフックでWM_SETFOCUSのHWNDを保存しる
627デフォルトの名無しさん:04/10/15 22:47:38
ShellExecuteEx で実行するプログラムに環境変数を設定して渡してやるには
どうしたらいいのでしょう?SEE_MASK_DOENVSUBST フラグを使えばいいよう
気もするんですが、ぐぐってみてもよくわかりませんでした・・・orz
628デフォルトの名無しさん:04/10/15 23:05:30
>>627
環境変数を渡すにはCreateProcessじゃないと無理。
SEE_MASK_DOENVSUBSTはプログラムのパスやコマンドライン引数の部分で"%WINDIR%"のように指定された環境変数を展開させるためのフラグだったはず。
629デフォルトの名無しさん:04/10/16 01:48:31
エディットコントロールに文字を転送して表示してるのですが
なぜかアルファベットが2バイト文字のようにすこし大きくなります。
表示された文字を別のメモ帳にコピペするとふつうの1バイト文字になります。なぜでしょうか?
630デフォルトの名無しさん:04/10/16 01:53:36
転送ってなあに?
631デフォルトの名無しさん:04/10/16 02:02:00
SendMessageのことです
632デフォルトの名無しさん:04/10/16 02:03:40
へえ
633デフォルトの名無しさん:04/10/16 02:04:22
そういうフォントだからだろ
634デフォルトの名無しさん:04/10/16 02:10:41
そういうフォントというのはエディットコントロールの仕様ということですか?
モーダルダイアログボックスにSendDlgItemMessageで転送するとふつうに表示されるのですが
635デフォルトの名無しさん:04/10/16 02:12:04
MFCが難しいのでWin32APIでプログラム作成しているのですが

Win32APIの仕事って少ないでしょうか。MFCを使えたほうがよいのでしょうか?
636デフォルトの名無しさん:04/10/16 02:15:18
とりあえず就職しろ
覚えるのはそれからでも遅くは無い
637デフォルトの名無しさん:04/10/16 02:21:03
チャットソフトをつくりたいのですが どこか
解説しているようなサイトなどないでしょうか
638635:04/10/16 02:44:38
>>636
就職しています。
ANSI Cはできるので、ステップアップと思い、Win32APIをやっているのですが
仕事ってあります?Win32APIでプログラムを作成すると無駄に時間だけが掛かってしまうのは私が馬鹿だからなのでしょうか。。。
639デフォルトの名無しさん:04/10/16 02:44:46
>>635
新卒ならたいがいのところは大丈夫。
30過ぎてるときついかもしれないけど。
640デフォルトの名無しさん:04/10/16 02:46:23
>>638
就職先で必要でなければ無理に覚えることは無いでしょう。
641デフォルトの名無しさん:04/10/16 02:52:53
>>638
MFC使うより格段に仕事が早く高品質にできるのなら
多分あると思いますよ。
642デフォルトの名無しさん:04/10/16 02:55:18
MFCで組むにしてもDelphi使うにしてもC/C++でベタ書きするにせよ、ネイティブアプリ作ってる限りはWin32API自体は把握できてないとだめ。

それを踏まえた上でどうやってアプリ作るかは好きにすればいい。って言っても仕事だとその辺なかなか自由にはならんだろうが。
643デフォルトの名無しさん:04/10/16 02:57:12
特にMFCは必要な機能に限ってクラスになってなかったりするんで
APIの知識は無駄にならないと思う
644デフォルトの名無しさん:04/10/16 02:57:43
>>638
もしWin32APIでCUIアプリケーションを作成しているとしたら、あなたが馬鹿だからです。
GUIアプリケーションを作成しているとしたらそもそも単純に時間を比較すること自体が間違ってます。
645デフォルトの名無しさん:04/10/16 05:13:54
会社によっては Win32API と独自クラスで開発しているのでは?
646デフォルトの名無しさん:04/10/16 05:34:05
質問です
グローバルフックで
エディットコントロールのデフォルトのポップアップメニューのハンドルを取得したいのですが
どうやればできるでしょうか?

WH_MOUSEでWM_CONTEXTMENUだとエディットコントロールのハンドルが帰ってきて駄目でした
647デフォルトの名無しさん:04/10/16 05:52:17
コントロールとポップアップメニューは関係ないから
メニューハンドルを得るのは無理では?
648デフォルトの名無しさん:04/10/16 07:41:55
>>647
ありがとうございました。
649デフォルトの名無しさん:04/10/16 12:54:53
>>645
それが正解だな
650デフォルトの名無しさん:04/10/16 12:57:33
開発効率悪そう・・・
651デフォルトの名無しさん:04/10/16 13:03:23
だって MFC って 生産性<オーバーヘッド
652デフォルトの名無しさん:04/10/16 13:04:19
ATL は COM 前提だし
653デフォルトの名無しさん:04/10/16 13:29:41
そこでWTLですよ
654デフォルトの名無しさん:04/10/16 14:03:45
bccでも使えるライブラリほしいな
655デフォルトの名無しさん:04/10/16 15:32:48
>>654
っVCL
656デフォルトの名無しさん:04/10/16 17:11:04
hoge.h

#define ID_HOGE 1
#define ID_HAGE 2

///////////////////////////
hoge.rc

HOGE MENU {
POPUP "ほげ" {
MENUITEM "はげ", ID_HAGE

//////////////////////////

「POPUP "ほげ"」にID_HOGEを関連付ける方法はなかとですか?
657デフォルトの名無しさん:04/10/16 17:18:29
#define MENUDEF(name) name MENU { POPUP #name { MENUITEM #name, ID_##name
ではだめか? リソーススクリプトの #define が C と同じプリプロセサ呼び出してるかどうか自信ないが・・・
658デフォルトの名無しさん:04/10/16 17:38:38
バカか?
659デフォルトの名無しさん:04/10/16 17:42:38
相手にしない方がいいかも
660デフォルトの名無しさん:04/10/16 21:01:12
ディレクトリ(フォルダ)を指定して、それ配下のファイルとディレクトリの合計サイズを
取得するAPIってないでしょうか?
661デフォルトの名無しさん:04/10/16 21:07:08
ない
662デフォルトの名無しさん:04/10/16 21:08:14
WLX_NOTIFICATION_INFOって構造体はどこに定義してあるんでしょうか?
MSDNによればwinwlx.hに定義してあるらしいんだけど、ヘッダをインクルードしても
「定義されてません」って言われちゃう。で、ファイルの中を見たらそんな構造体ありゃしない。
ググっても外国のページしかヒットしないし、仕方なくそのページを開くと普通に使ってるし。
何か足りないのかな?
663デフォルトの名無しさん:04/10/16 21:24:27
お前の脳味噌。
664デフォルトの名無しさん:04/10/16 21:28:37
>>662
ヘッダ読んだ?
#if とかでハネてるケースよくあるよ
665デフォルトの名無しさん:04/10/16 21:29:10
>>662
SDK は最新にしてある?
666デフォルトの名無しさん:04/10/16 21:38:15
>>662
私も確認してみた。
VC98のwinwlx.hには、WLX_NOTIFICATION_INFO構造体がないね。
そんなわけで、>>665の助言に従うべきでしょう。
667デフォルトの名無しさん:04/10/16 21:48:55
[ファイルから検索] もしたほうがいい
668デフォルトの名無しさん:04/10/16 21:52:43
↑それ便利だけど、実装するとなるとちょっと遠慮したいよね
669656:04/10/16 22:48:12
>657
それはちょっと無理です。

>658-659
スレ汚し失礼しました、申し訳ないです。
670662:04/10/16 23:21:17
>>663
足りないから補いたいのは山々なんだけどね〜

>>664,667
winwlx.hをエディタで開いて探したよ。
でも見つからなかったんで、「ファイルから検索」で探したよ。
残念ながら見つからなかったさ。

>>665
環境はVC6 SP6 なんだけど、これより新しいのって何だろ?.NET?
671デフォルトの名無しさん:04/10/16 23:27:49
672デフォルトの名無しさん:04/10/16 23:28:29
VC6には入ってなかった、SDKに入ってた。
673670:04/10/17 11:23:50
>>671
いや〜お恥ずかしい。早速インストールしたさ。あったさ。WLX_NOTIFICATION_INFOが。

やっぱり脳が足りないようで…
助かりました。どもです。
674デフォルトの名無しさん:04/10/17 15:37:16
HeapAlloc()で確保するメモリは、必ず物理メモリ上に確保されると考えていいですか?
675デフォルトの名無しさん:04/10/17 15:39:17
なぜそう思うんだ?
なぜそれが気になるんだ?
676674:04/10/17 15:45:04
もうひとつ。

VirtualLock()はVirtualAlloc()以外の方法で確保したメモリにも使えますか?
677デフォルトの名無しさん:04/10/17 15:47:29
>>674
ページアウトされないってことなら、どんなメモリ確保も物理メモリ上にある保証はありません。
678デフォルトの名無しさん:04/10/17 15:48:57
「物理メモリ」を誤解している悪寒
679デフォルトの名無しさん:04/10/17 15:55:19
>>676
使えません。MSDN嫁
680674:04/10/17 15:59:52
>>679
ありがとうございます。
681デフォルトの名無しさん:04/10/17 23:11:50
韓国から拾ってきたVC7ソースなんですが、
これはEUC-KRでかかれているらしく、リテラル文字列が以下のように終端の"が
なくなってしまいます。

InsertColumn(3,"コクウスセ・,LVCFMT_LEFT,65,3);

日本語環境でclコンパイラにEUC-KRを認識させる方法はないでしょうか?
682デフォルトの名無しさん:04/10/18 00:06:11
濃く薄せ
683デフォルトの名無しさん:04/10/18 00:08:10
>>681
ソースファイルを適当なエディタで読み込んで変換するんじゃいけないの?
684681:04/10/18 00:42:07
ありがとうございます。
エンコードつき保存で、EUC-KR -> UNICODEでできました。
685デフォルトの名無しさん:04/10/18 00:53:37
画面遷移を行いたいのですが、定石ありますでしょうか?

画面ごとにexeモジュールを作成しているので
画面の中のコマンドボタンを実行すると
別画面(exe)を呼び出し、元のexeは終了する方法を考えています。
686デフォルトの名無しさん:04/10/18 01:11:21
>>685
なんでそんな面倒なことするんだ?
リソースで定義したダイアログを順々に表示するんではいかんのか?
687デフォルトの名無しさん:04/10/18 01:41:16
>>686
レスありがとうございます。
リソースについて調べました。使ってみるつもりです。

リソースで定義したダイアログを呼んでも元ウィンドウは残ったままになってしまいそうなのですが・・・。
688デフォルトの名無しさん:04/10/18 02:43:21
別に元のウィンドウが残っててもいい気がするが…
元を親ウィンドウとして処理するってのが普通だと思うけど…。

それが嫌なら、元ウィンドウ消してから
別のウィンドウ表示すれば良いのでは?
689デフォルトの名無しさん:04/10/18 03:32:07
ウィンドウ毎に担当者を分けているとか?
それで別 exe の方がやりやすいとか。

別画面が終わったら元画面に戻したりしないの?
元画面終わらせたらかえって面倒だよ。
690デフォルトの名無しさん:04/10/18 04:16:38
スレ違いかもしれませんが・・・質問させてください・・・

今、32APIでシューティングゲームを作ってるんですが、
パソコンが壊れてしまったので
新しく買い換えたのですが、
新しいPCの方でいきなり描画処理がおかしくなりました。

カクカクと動くし、
背景以外の透過画像やFPS表示もされない・・・

前のPCはビデオカードがオンボードだったんですが、
今回のPCはこれを期に一気に
RADEON X300 の 128Mを積んだマシンを購入したんですが、
PCI Expressがいけなかったんでしょうか・・・

どなたか解る方いらっしゃいますでしょうか?
よろしくお願いします・・・
691デフォルトの名無しさん:04/10/18 08:09:33
>>690
もしかしてスレ違いかも? (その場合、ハード板が妥当と思われ)

「積んだ」っていうのがどういう形でかわからんが
特注でつけたパーツが新しすぎると
ドライバが「標準」になってたり
初期ロット系のトラブル抱えてたり
OS 側の処理がタコだったり
つーことは結構あるな
692デフォルトの名無しさん:04/10/18 09:01:17
>>691
そういうのもあるけど質問の仕方からして、あんまり慣れてない人が
環境依存のコード書いちゃったっつうのもありうる。

>>690
自分で書いたコードならプロファイルとるなりトレースするなりで
どの処理に時間がかかってるのか調べてから相談しても遅くない。
DirectXつかってるならカードごとに対応してる機能に違いがある
んで〜CAPSみたいなのを調べてみる必用もあるかも。
693685=687:04/10/18 09:08:51
>>688-689

レスありがとうございます。
リソースで新たな画面を呼び出すと
元のウィンドウが表示されたままになってしまい、
モニター上には元の画面と新しい画面の2画面になってしまわないでしょうか・・。

ってやってみってます。すみません。

exeを作っているのは私一人です。
694デフォルトの名無しさん:04/10/18 09:29:56
>>693
っ[ ShowWindow ]
695デフォルトの名無しさん:04/10/18 09:41:53
>>693
だから前のウィンドウはそのつど消せっての
696685=687=693:04/10/18 11:17:38
>>694=695レスありがとうございます。m(_ _)m

main.rcを作成しその中に以下の一行を追加
MAIN_RESORCE "NEXT_GAMEN.EXE"

VC6++のワークスペースのResorce Fileにmain.rcを追加。

ビルドをしたら以下のエラーが表示されました。
C:\Program Files\Microsoft Visual Studio\MyProjects\Main\main.rc (3): error RC2135 : file not found: "NEXT_GAMEN.EXE"

NEXT_GAMEN.exeは、今回編集しているソースと同じディレクトリおよびdebugフォルダにも格納しましたが
上記エラーが表示されます。

初歩的なことですみません。
なにかこんな頭の悪い人のためのお勧めのWin32APIの参考書はありますでしょうか。
697デフォルトの名無しさん:04/10/18 11:27:33
どこから突っ込んでいいのかわからない。
698690:04/10/18 12:12:11
>>691様 >>692
スレ違いな質問に答えてくださいましてありがとうございました。

ところで、環境依存のコードとありますが、
現在表示されていないソースでは、
画像の透過処理のTransparentBltを使っているんですが、
ここの処理がうまくいってない様です・・・
これは、環境依存コードなのでしょうか?
よろしければ、ご教授ください。
699デフォルトの名無しさん :04/10/18 14:18:53
GetAsyncStateを使ってキーの押下状態を取得しているのですが、
何個かのキーを同時に押すとBeep音がします。
これを鳴らないようにする方法はないでしょうか。
700デフォルトの名無しさん:04/10/18 14:33:52
>>699
スピーカーを引っこ抜く
701デフォルトの名無しさん:04/10/18 14:34:25
複数行あるファイルから一行ずつ読み取るにはどうしたらよいのでしょか。

ReadFile関数で読み込みましたら、すべての行を一回で読んでしまいました。。
ReadFile(hFile , strFile , GetFileSize(hFile , NULL) , &wReadSize ,NULL)!=0)
702デフォルトの名無しさん:04/10/18 14:47:24
>>701
そういうAPIはないです
703デフォルトの名無しさん:04/10/18 16:40:14
>>701
>702なので、改行文字まで一文字ずつ読む必要あり。
#いっそ、全部読んでからばらすのも手かも。
704デフォルトの名無しさん:04/10/18 16:44:06
ちゅうか、わざわざ API 使って
テキストファイル読むこともなかろうにと思うが。
C/C++のライブラリ使えば済むじゃん。
705デフォルトの名無しさん:04/10/18 16:49:58
>>704
そういうスレではないです
706デフォルトの名無しさん:04/10/18 16:51:23
はて?
遠回りを奨めるスレでもないと思うが。
707デフォルトの名無しさん:04/10/18 16:51:40
>>704
>705なので、スレタイを冷静に読む必要あり。
#いっそPCの電源切って窓から投げ捨てるのも手かも。
708デフォルトの名無しさん:04/10/18 16:53:11
>>704
APIでオープンしなければならない事情があったときはどうしたら?
709デフォルトの名無しさん:04/10/18 16:54:04
さすがにC/C++ライブラリくらい知ってんじゃないの。
Win32APIにそれ相当のものがあるか?って質問だろう。
710デフォルトの名無しさん:04/10/18 17:12:10
>>701この手の質問に答えられる奴がいないだけだろ?
毎回、この質問が出ても質問者を叩いて終るし。
誰かコードアップしたれよ。
711デフォルトの名無しさん:04/10/18 17:18:26
お前がアップしたれよ。
712デフォルトの名無しさん:04/10/18 17:19:14
>>710
fgetsのソース読めば済むだろ
713デフォルトの名無しさん:04/10/18 17:24:49
>>712
fgetsじゃベタだろ。

@FileReadで1バイトづつ読んで、\nで読み込み終了
Aファイルポインタを\nの次に移す。
BEOFまで@を繰り返す

つうソースが欲しいんだと思うぞ。>>701

714デフォルトの名無しさん:04/10/18 17:27:41
>>712
fgetsの中身なんて改行文字がくるまでfgetcで読み込むような感じだろ。
715デフォルトの名無しさん:04/10/18 17:28:20
となりのメガネが

アピアピ連呼するんですが

なんとかなりませんか。
716デフォルトの名無しさん:04/10/18 17:30:04
>>713
'\n'の手前にある'\r'は捨てる処理を入れたほうが良いんじゃないかい?
717713:04/10/18 17:33:21
>>716
も、もちろん知ってるよ。
ウ、ウィンドウズの改行マークは"\r\n"だ、だろ?
718デフォルトの名無しさん:04/10/18 17:33:57
timeGetTimeはNT系の場合精度が5ミリ以上になる場合があるとMSDNに書いてあるので,
関数の前後をtimeBeginPeriodとtimeEndPeriodで挟んで精度を上げているのですが,
これ(timeBeginPeriodとtimeEndPeriod)ってtimeGetTimeを呼ぶたびに
毎回呼ばないと精度を保てないんでしょうか?
719デフォルトの名無しさん:04/10/18 18:10:43
>>713
いくら API スレだからって、
ReadFile で1バイトづつ読ませるなんて、
非効率的な事は勧められんだろう。
そんなことしたら、fgets 使うのに比べて
何十倍も処理時間掛かるじゃん。
720デフォルトの名無しさん:04/10/18 18:10:51
>>710
誰も質問者を叩いて無いじゃん。
むしろ叩かれてるのは>>704
721デフォルトの名無しさん:04/10/18 18:13:02
>>719
fgetsをベタとか言ってる時点でネタだと思うが。
fgetsのソースを見る、でこの質問は終了のはず。
722デフォルトの名無しさん:04/10/18 18:18:50
>>719
貴様!701が読み込みにMutex使ってたら、どう責任取るつもりだ?

723デフォルトの名無しさん:04/10/18 18:21:24
なんつーか、質問者が出てこないのに仮定で話を進めるのはこのへんでやめにしないか。
続きは質問者が出てきてからってことで・・・
724デフォルトの名無しさん:04/10/18 18:46:38
低レベルなファイル「読み込み」関数は使うメリットあるのか?
具体的にいうと_read()とかReadFile()とかなんだけど。

低レベルなファイル「書き込み」関数は使うメリットがそれなりにあると思う。
725デフォルトの名無しさん:04/10/18 18:53:45
>724
非同期 I/O
726デフォルトの名無しさん:04/10/18 19:00:28
>>708
_open_osfhandle + fdopen とか。
727デフォルトの名無しさん:04/10/18 19:03:23
>>724
CreateFile()の引数でシーケンシャルスキャン・ランダムスキャンを指定したいとか、
キャッシュ効かせないようにしたりとか(確かFireFileCopyとかそういう事してた)、
SetEndOfFile()使いたいとか、2GB・4GB超えるようなファイルを扱うとか?
728デフォルトの名無しさん:04/10/18 19:03:47
C++Builder 5 でユーザーモードから ZwQueryInformationFile() を呼び出すと
ハングアップすることがあるんですが、原因がわかる方いらっしゃいますか?
729デフォルトの名無しさん:04/10/18 19:10:11
>>728
winternl.h のプロトタイプをそのまま使ってない?
プロトタイプがバグってる(WINAPIが付いてない)から使っちゃだめ
730デフォルトの名無しさん:04/10/18 19:12:55
WINAPIじゃなくてNTAPIか
まあどっちも__stdcallに展開されるんだけど
731デフォルトの名無しさん:04/10/18 19:17:55
>729
ありがとうございます。
ヘッダーは DDK に付属のものを使っています。

NTSYSAPI
NTSTATUS
NTAPI
ZwQueryInformationFile(
  IN HANDLE FileHandle,
  OUT PIO_STATUS_BLOCK IoStatusBlock,
  OUT PVOID FileInformation,
  IN ULONG FileInformationLength,
  IN FILE_INFORMATION_CLASS FileInformationClass
  );

どうも、特定のファイルをクエリーするときにだけ、ハングアップするようなのです。
ハングアップするというのは、この API から戻ってこないということです。
732デフォルトの名無しさん:04/10/18 22:16:09
>>724
ReadFile()はCランタイムライブラリを全く使わないプログラムを作るときに使うんだろう。
733デフォルトの名無しさん:04/10/18 23:12:33
IMEにユーザー辞書を追加したあと、
WM_IME_COMPOSITION
で変換候補が確定した時にその単語がどの辞書
(標準辞書なのかユーザー辞書なのか)に含まれるか調べたいのですが

どうやって調べればいいんでしょうか
734デフォルトの名無しさん:04/10/18 23:32:46
よく年月日のテキストボックスの横に上、下に向いている三角形(▼▲)が
あるけど、これってwin32apiでは実装されてないのでしょうか?
▲▼をクリックすると、テキストボックスの日付が変わる機能です。
735デフォルトの名無しさん:04/10/18 23:44:31
>>734
スピンコントロールでぐぐれ
736デフォルトの名無しさん:04/10/18 23:44:33
コモンコントロールのUp-Down
737デフォルトの名無しさん:04/10/19 04:46:18
void TForm1::ShowContextMenu(TObject* Sender, LPITEMIDLIST pIDL)
{
HRESULT hRes;
LPCONTEXTMENU pContMenu;
HMENU hMenu;
POINT pCursor;
int iCommand;
CMINVOKECOMMANDINFO stInvokeInfo;

hRes = m_pDTFolder->GetUIObjectOf(this->Handle, 1, (LPCITEMIDLIST*)pIDL, IID_IContextMenu, 0, (LPVOID*)&pContMenu );
if (hRes != NOERROR) return;
hMenu = CreatePopupMenu();
hRes = pContMenu->QueryContextMenu(hMenu, 0, 1, 0x7FFF, CMF_NORMAL);
if (hRes == NULL) {DestroyMenu(hMenu); return;}

GetCursorPos(&pCursor);
iCommand = TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON, pCursor.x, Cursor.y, 0, this->Handle, NULL);

if (iCommand != 0) {
/* stInvokeInfo 処理 */
}
DestroyMenu(hMenu);
pContMenu->Release();
}
738737:04/10/19 04:54:01
ちなみにBorland C++ Builder 5 です

pIDLは、「マイコンピュータ / C: (VOLUME) / HOGEHOGE」
のようになっています

この関数を実行すると、メニューは表示されるのですが
メニューの表示項目が必ずマイコンピュータのものになってしまいます

しかし、そこで強引に HOGEHOGE のメニューで
「ショートカットの作成」を行うと、
「ここには作れません、デスクトップに(r」となり
そのできあがったショートカットは HOGEHOGE のものになります

hRes = pContMenu->InvokeCommand( &stInvokeInfo );
を実行する、stInvokeInfo で構造体にpIDLを入れる必要が無い事から
pContMenu には正しくpIDLが入ってるように思うのですが
これは、必ずしもそういうことじゃないのでしょうか?
739737:04/10/19 05:01:11
kab-studio の Codian という所を参考にしました

具体的に渡しているpIDLは

// ファイルのIDリスト
HRESULT hRes;
wchar_t lpszDisplayName[MAX_PATH];
m_strFullPath = "C:\\HOGE\\PUNI";
StringToWideChar(m_strFullPath, lpszDisplayName, MAX_PATH);
hRes = Form1->m_pDTFolder->ParseDisplayName( NULL, NULL, lpszDisplayName, NULL, &m_pIDL2, NULL);

// マイコンピュータのIDリスト
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &m_pIDL1);

これに対し
ttp://www.kab-studio.biz/Programing/Codian/ShellExtension/06.html
のConcatItemIDをそのまま使って

pIDL = ConcatItemID(m_pIDL1, m_pIDL2)

のような形になっております
740デフォルトの名無しさん:04/10/19 05:07:20
GetUIObjectに渡すItemIDListは、基本的にSingle-Levelでないとだめ。
741737:04/10/19 07:59:55
Desktopをつけるのが余計なんでしょうか?
それともファイルのIDリストのm_pIDL2から末尾を取るという事でしょうか?

Desktopをつけなくても、
マイコンピュータからのフルIDLISTが入手できるみたいで
挙動は変わりませんでした

末尾だけをGetUIObjectOfに渡したら
フォルダの場合メニューが出るけど、正しく実行されない
(どうやらデスクトップフォルダ+ファイル名になってるみたい)
ドライブの場合は妙に寂しいメニューしか出ない

って感じで、かなり困ってます。。。
742デフォルトの名無しさん:04/10/19 08:27:43
ITEMIDLIST* pIDL = ::ILCreateFromPathW(L"C:\\HOGE\\PUNI");
const ITEMIDLIST* pIDLSingleLevel = ::ILClone(::ILFindLastID(pIDL));
::ILRemoveLastID(pIDL));

IShellFolder* pDesktop;
IShellFolder* pFolder;
IContextMenu* pContextMenu;
::CoCreateInstance(CLSID_ShellDesktop, NULL, CLSCTX_INPROC, IID_IShellFolder, (void**)&pDesktop);
pDesktop->BindToObject(pIDL, NULL, IID_IShellFolder, (void**)&pFolder);
pDesktop->Release();
pFolder->GetUIObjectOf(hwnd, 1, &pIDLSingleLevel, IID_IContextMenu, NULL, (void**)&pContextMenu);
pFolder->Release();

なんか();

pContextMenu->Release();
::ILFree(pIDLSingleLevel);
::ILFree(pIDL);

大体こんな感じ。
743737:04/10/19 10:38:35
GetUIObjectOfはデスクトップを使えばいいってわけじゃなかったのね
本当にありがとう、なんとかうまく表示されるようになりました

・・・これからIContextMenu2 との戦いっす、ふみゅー
744デフォルトの名無しさん:04/10/19 14:58:29
テキストボックスとそれの名前(項目名)で100個近くに
コントロールを画面に貼り付ける予定なのですが
座標指定でなにかいい案はありませんでしょうか。

ちょっとずれたらすべて修正なんて気が狂いそうです。
745デフォルトの名無しさん:04/10/19 15:13:43
>>744
その実装を考え直すことを勧める

リストビューを使うとか、他に方法はあるだろ?
746デフォルトの名無しさん:04/10/19 15:22:59
>>744
リソースエディタを使わずに、CreateWindow()でセコセコと生成するとか。
747デフォルトの名無しさん:04/10/19 15:26:34
>>746
多分それが正解だろうな
描画位置とかサイズとかをdefineしておけば変更も簡単だし
748デフォルトの名無しさん:04/10/19 15:40:38
745が正解だよ。
749デフォルトの名無しさん:04/10/19 15:46:44
クライアント側から「テキストボックスで」という指定があるという可能性も否定できないかもしれない
750デフォルトの名無しさん:04/10/19 15:53:19
そんな仕様を呑むのがどうかしている。
751デフォルトの名無しさん:04/10/19 15:57:20
EDIT*100(/2か?)は止めたほうがいいな。
リソースに対して優しくない。UIとしても。
それはそれとして、表計算ソフトからジェネレートできるようにすりゃいいだけな気もするが
752デフォルトの名無しさん:04/10/19 15:59:34
>>744
リソーススクリプトを手動で修正するとか。
753デフォルトの名無しさん:04/10/19 16:20:58
DialogBoxIndirectとかCreateDialogIndirectを使うとか
754デフォルトの名無しさん:04/10/19 20:55:09
リソースエディタを外部から操作するプログラムを作れ。
755デフォルトの名無しさん:04/10/19 21:23:31
リソースを外部から操作するプログラムならいくらでもあるが……。
756デフォルトの名無しさん:04/10/19 22:18:48
一枚のダイアログに載せられるコントロールの数って上限無かったか?
昔、VBで自滅してた奴がいたがw
128個位でダイアログが出なくなったような。
Win32 は関係ないのかな?

あと、100個もコントロール載せるとダイアログが出てくるまで時間が掛かる、
ウィンドウの再描画にも時間が掛かるよ。

自分で表を書いておいて、指定のセルを編集時にテキストボックスを
セルのサイズで作って出すのが、綺麗だと思う。
Excel とかがやってる方法だけど…
ちと工数が掛かりすぎるかな?
757デフォルトの名無しさん:04/10/19 22:46:22
NT系でもリソースは無限じゃないしね。
758デフォルトの名無しさん:04/10/20 00:40:14
DHTMLダイアログ使えよ、エディットの100個や200個屁でもない
759デフォルトの名無しさん:04/10/20 00:41:15
またバカが一人
760デフォルトの名無しさん:04/10/20 04:22:17
世界の真ん中に立つ塔は楽園へ続いているという

そして、またバカが一人
761デフォルトの名無しさん:04/10/20 08:26:31
こんにちは。

リソースのビットマップを表示させたいのですが、
http://www.kumei.ne.jp/c_lang/sdk/sdk_26.htm
http://wisdom.sakura.ne.jp/system/winapi/win32/win104.html
↑で紹介されてる手順通りに書いても、LoadBitmap()がNULLを返してきて描画してくれません。
ICONリソースなどは同じ手法で読み込んでくれるのですが…。
なお、実行ファイルのサイズから正常に埋め込まれてるのは確かのようです。

環境は windows2KSP4 + Visual C++.NET std です。
初歩的な質問かもしれませんが、宜しくお願い致します。
762デフォルトの名無しさん:04/10/20 09:04:36
>>761
とりあえず引数の確認とGetLastError()
763デフォルトの名無しさん:04/10/20 09:13:38
>>761
ついでにResourceHackerとかで実行ファイルのリソース確認しとき。
念のため。
764デフォルトの名無しさん:04/10/20 09:16:05
>>761
∀・)っMAKEINTRESOURCE( MYBMP );
765デフォルトの名無しさん:04/10/20 10:44:39
Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html

ここ行けなくなってしまってるね。
結構利用してたのに残念。
766デフォルトの名無しさん:04/10/20 10:53:35
>>765
ttp://wisdom.sakura.ne.jp/

ここに移転したって書いてありますけど…
767デフォルトの名無しさん:04/10/20 14:20:56
CDドライヴに空の状態から CD が挿入されたことを検知するための
メッセージというのはないのですか?
768デフォルトの名無しさん:04/10/20 16:00:16
文字の大きさを変更する関数ってありますでそうか。
すみません。初歩的な質問で。
色はSetTextColorで変更できたのですが・・・。
769デフォルトの名無しさん:04/10/20 16:07:11
あります。
770デフォルトの名無しさん:04/10/20 16:07:58
うそです。ありません。
771デフォルトの名無しさん:04/10/20 16:36:16
CreateFont(Indirect)の時にしか文字の大きさは選べない。
772デフォルトの名無しさん:04/10/20 16:47:15
>>768
メモリデバイスコンテキストに書いて、ストレッチブリットするのじゃだめ?
773デフォルトの名無しさん:04/10/20 17:31:18
774デフォルトの名無しさん:04/10/20 18:22:39
>>772
書いてからStretchしたらギザギザになんね?
775デフォルトの名無しさん:04/10/20 18:25:51
大きく描いてから縮小すればいいんだYO
776デフォルトの名無しさん:04/10/20 18:44:12
SetStretchBltModeも忘れるなよ
777デフォルトの名無しさん:04/10/20 19:47:38
>>767
WM_DEVICECHANGE
CD-ROMドライブのプロパティで、
自動挿入をオンにしておく必要があるが。
778761:04/10/20 20:31:46
>>762
GetLastError()で取得したエラーコードをFormatMessage()で変換してみたところ、
「指定したリソース名がイメージファイルに見つかりません。」
と出ました。
でも「猫でも〜」や他所で見かける例だと、この手順で問題なく読み込んでくれるはずなのですが…。
ResourceHackerは敷居が少し高そうですので、もう少し慣れたら触ってみることにします。
レスありがとうございました。

>>764
MAKEINTRESOURCE( MYBMP )としてみましたら呆気なく表示されました。
実際はただキャストしてるだけのようですが、なぜこれで上手く行くのでしょうか…。
ちょっと考えてみます。
レスありがとうございました。
779デフォルトの名無しさん:04/10/20 20:35:03
IEのファイルダウンロードのダイアログを同等のものを
表示させたいのですが、どのAPIを使えばよいのでしょうか?
「開く」「保存」「キャンセル」のボタンがあるやつです。
また、上書き確認のダイアログの表示方法もありますか?
780デフォルトの名無しさん:04/10/20 21:00:56
ハードウェアの安全な取り外し を行うのはAPIでできますか?
できるとしたらどうすれば。
781デフォルトの名無しさん:04/10/20 21:27:02
>>779
GetOpenFileNameとかGetSaveFileNameとかかな。
しかるべきフラグを渡せば、上書き確認とかもできる。
782デフォルトの名無しさん:04/10/20 21:35:05
>>778
リソースの識別子は "" で囲った文字列形式と
数値形式の2通りがあるんです。
>>778さんは数値形式でリソースを作成したのでは?

LoadImage 等の関数は文字列形式を必要とするので、
MAKEINTRESOURCEマクロでキャストする必要があります。

OSはたぶん、渡された文字列ポインタの値をみて、
もし上位ワードが0x0000ならば、
それは文字列ではなく数値をキャストしたものである、
と判断しているのでしょう。
783デフォルトの名無しさん:04/10/21 02:29:35
>>780
APIを徹底的に調べればわかるんでないの?
784デフォルトの名無しさん:04/10/21 09:02:42
>>780
やったことないので知らないけど
SetupDi〜のAPI調べるといいかも

SetupDiRemoveDeviceとかなんか怪しげ
785デフォルトの名無しさん:04/10/21 11:01:37
コモンコントロールのアップダウンで
下限の次を上限に、上限まで行ったら下限に行くように
ループさせたいのですが、特別なオプションってありませんでしょうか
786デフォルトの名無しさん:04/10/21 11:12:38
>>785
MSDNのUp-Down Control Stylesをよく見ろ。
787デフォルトの名無しさん:04/10/21 18:04:32
ドロップダウン型のコンボボックスで
リスト部分のウィンドウハンドルを取得する方法はないでしょうか。
GetComboBoxInfo とかだとNULLが返って来ちゃうんですよね。
お昼過ぎからずーっと探してるのですが……。
どなたかご存じでしたらご教授ください。
788デフォルトの名無しさん:04/10/21 18:21:55
COMBOBOXINFOを初期化してないんじゃないの?
特にcbSize
789787:04/10/21 19:10:02
>>788
cbSizeを設定しておく必要があったのですか!
わぁ、動いた。動きましたorz
……うわー、俺の午後ってー!
ありがとうございました(深々礼
790デフォルトの名無しさん:04/10/21 19:12:00
>>789
MSDN見てないのか?
791デフォルトの名無しさん:04/10/21 19:43:14
DLLの関数の呼び出し規約がcdeclかstdcallか、を、
ヘッダファイルや、ソースファイルが、無くても知る方法ありますか?
たとえばdumpbin.exeなどでDLLをダンプしたらわかりますでしょうか??
792デフォルトの名無しさん:04/10/21 20:18:06
>>791
見当がつくこともある。
#と答えておこう。
793789:04/10/21 20:46:30
>>790
プラットフォームSDK GetComboBoxInfo関数 のページは見たのですが……
後は、COMBOBOXINFO構造体のページとかは。
まだ始めたばかりでセオリーとか分かってなくて、申し訳なかったです。
794& ◆FtKQchXwgI :04/10/21 20:47:35
 
795794:04/10/21 21:04:09
俺のうぐいすが化け化けなのはなぜですか?(;_;)
796デフォルトの名無しさん:04/10/21 21:54:44
>>793
>Pointer to a COMBOBOXINFO structure that receives the information.
>Note that you must set COMBOBOXINFO.cbSize to sizeof(COMBOBOXINFO) before calling this function.

こう書いてなかった?
797デフォルトの名無しさん:04/10/21 22:03:09
>>792
791です、dumpbin /exports したけど、さっぱり見当がつきません。
どのあたりが見分けるポイントなんでしょうか。
(なかばアキラメモードです....)
798デフォルトの名無しさん:04/10/21 22:12:17
スタックを覗いてみるとか
799デフォルトの名無しさん:04/10/21 22:33:13
>>798
791です。
あ、なるほどね。スタックの積み順を調べたらいいんだぁ。
800779:04/10/21 23:05:14
ファイル保存のダイアログを出さずに、
ファイルの上書き確認ダイアログを表示させたいのです。
あとダウンロードの確認ダイアログはどうするのでしょうか?
次の場所からファイルのダウンロードするように選択しました。
「このファイルを上記の場所から開く」
「このファイルをディスクに保存する」というダイアログのことです。
簡易ブラウザを作っていてなにかダウンロードするときに
このダイアログを出そうと思っています。

801793:04/10/21 23:06:04
>>796
> hwndCombo コンボボックスのハンドルを渡します。
> pcbi 情報を受け取るCOMBOBOXINFO構造体へのポインタを指定します。
なるほど、MSDN Japanの方だけじゃ情報不足なんですか。
わかりました、今度からはそっちも見に行くようにします。
どうもありがとうございましたです(礼
802デフォルトの名無しさん:04/10/21 23:10:56
>>800
前者は MessageBox( hWnd, "上書きするよ?", "確認", MB_OKCANCEL | MB_ICONWARNING ); でええやろ。
803デフォルトの名無しさん:04/10/21 23:31:19
修飾された関数名の前に"_"、後ろに"@"がつくとstdcallなのだと思うけれど
これはextern "C"限定の命名規則なのかしらん
804デフォルトの名無しさん:04/10/21 23:49:51
そこでハンド逆アセンブルですよ。
805779:04/10/22 00:17:29
>>802
UIが統一されていないのであまり気が進まないけど。
用意されててもいいような気がするんだけどないのかなー?
806デフォルトの名無しさん:04/10/22 08:03:31
>>800
OPENFILENAME
OFN_OVERWRITEPROMPT
807デフォルトの名無しさん:04/10/22 11:46:51
↑質問文をよく読まないせっかち君
808デフォルトの名無しさん:04/10/22 16:07:17
CGIの出力をプログラムで取得したいと思い、InternetReadFileを
使用したのですが、出力ではなくCGIのソースそのものが取得されてしまいました。
CGIの出力を取得するのは無理なんでしょうか?
809デフォルトの名無しさん:04/10/22 16:15:50
CGI側のサーバ設定がおかしい。
もしくは何か勘違いしている。
810デフォルトの名無しさん:04/10/22 16:34:16
811デフォルトの名無しさん:04/10/22 17:31:37
>>808
ブラウザで開いてみそ。

あと、ココとかのURLを入れてみそ。
それでもCGIのソースが出るようだったら、大発明。
812デフォルトの名無しさん:04/10/22 17:39:39
脆弱性発見でつか?
813デフォルトの名無しさん:04/10/22 21:16:48
>>803
extern "C"をつけていなくても、stdcall関数なら当然、stdcallの修飾(前に"_"、後ろに"@"そしてプッシュするサイズ)は付く。
ただし、C++の修飾を先にしたものにstdcallの修飾がなされる。
814779, 800:04/10/22 21:52:02
誰か回答をくれー!
815デフォルトの名無しさん:04/10/22 22:01:36
>>814
IEを呼び出せばいいだろ。
816デフォルトの名無しさん:04/10/23 00:29:26
ビットマップのパスだけが分かっているとき、画像を表示させるにはどうすればいいですか?
817デフォルトの名無しさん:04/10/23 00:30:18
>>816
LoadImage
818デフォルトの名無しさん:04/10/23 01:51:21
>>817
LoadImage()では表示は出来ません。
819デフォルトの名無しさん:04/10/23 03:08:01
ShellExecuteEx
820デフォルトの名無しさん:04/10/23 12:54:52
>>819
ありがとうございます。確かに表示出来ました。
821デフォルトの名無しさん:04/10/23 17:38:02
WritePrivateProfileStringW で設定を保存してもUNICODEで保存されないのって仕様ですか?
何のためのワイド文字版APIなの??
822デフォルトの名無しさん:04/10/23 17:50:23
>>821
UNICODEにしかない文字を書き込んだらどうなる?
823デフォルトの名無しさん:04/10/23 18:08:53
A2Wを呼び出す手間を軽減するためのW版だろ
824デフォルトの名無しさん:04/10/23 19:18:14
>799
積み順じゃなくて、クリアの方法を見ること。
積み順は cdecl も stdcall の同じ。
825821:04/10/23 20:47:32
>>822
「????」とかに変換される。
唯一のメリットといえば、UNICODE使ったファイル名でもアクセス可能だということだけ…。

でも、*.regファイルなんかは、iniファイルと同じフォーマットでUTF16LEなのに、regedit.exeはAPI使わずに
アクセスしてんのかな?
826デフォルトの名無しさん:04/10/23 22:20:56
>>825
Unicode版のAPIで.iniファイルに書きこんだら
Unicodeで保存されるべき…。
なるほど、そういう発想はなかったな。
まあ、いろんなアプリがひとつの.iniファイルに
アクセスする可能性があるし、過去との互換性も考えると
ANSIで保存されるのは仕様なんでしょう。

.regファイルの件は何が疑問なのかよく分からない。
827デフォルトの名無しさん:04/10/23 22:27:56
>>825
Dependency Walkerで調べたところ、GetPrivateProfileStringW()を直接呼び出すことはしてなさそうだ。
828デフォルトの名無しさん:04/10/23 22:43:21
オーナードローボタンを複数画面に表示し、
それぞれ別のビットマップを貼り付ける方法を教えてください。
829デフォルトの名無しさん:04/10/23 23:14:28
>>826

.regを読むのに*Profile* APIを使ってるはずだと思ってるんでしょ。
830デフォルトの名無しさん:04/10/23 23:48:52
みんなやってそう、かつ簡単そうで難しい、(完璧ではない)

文字処理
831デフォルトの名無しさん:04/10/23 23:58:14
>>821
なに? WritePrivateProfileStringW 使って
引数にUNICODEの文字列を指定して
書き込んだらSJISに変換されて書き込まれるの?
まさか、引数にSJISの文字列を指定して書き込んでも
UNICODEに変換されないとか言っているわけじゃないよね?
832デフォルトの名無しさん:04/10/24 00:37:09
( ゚д゚)ポカーン
833デフォルトの名無しさん:04/10/24 01:21:27
16ビット時代の遺物なんだからUnicode対応なんかしてないよ。
レジストリ使うか自前でやれ
834デフォルトの名無しさん:04/10/24 02:34:26
同じファイルに読み書きするのにAPIのインターフェイスがAかWかで文字コードが変わったら使い物にならんやん
835デフォルトの名無しさん:04/10/24 06:14:52
WM_ACTIVE site:microsoft.comでググっても何も見つからないのですがこれはWM_ACTIVEは使うなという事ですか?
836デフォルトの名無しさん:04/10/24 06:36:00
>>833
レジストリも結局は一緒じゃないか?
REG_SZ型は全てUnicodeで保存されてるはず。
ユーザが意識しなくてもいいことじゃないの?
837デフォルトの名無しさん:04/10/24 07:35:14
WM_ACTIVATE
838デフォルトの名無しさん:04/10/24 08:59:32
>>836 ハァ?
839デフォルトの名無しさん:04/10/24 10:00:29
噛み合ってません
840デフォルトの名無しさん:04/10/24 10:33:28
要するに

*Private*
  AでもWでもファイルはSJIS

レジストリ
  AでもWでもファイルはUnicode

結論
  AでもWでも同じファイルを使えるように設定された仕様

ということでFA?
841デフォルトの名無しさん:04/10/24 12:26:31
プロパティページについてなんですが、CreatePropertySheetPageが失敗したとき
PROPSHEETPAGE::pfnCallbackで指定したコールバックは呼ばれるのでしょうか?
lParamにページで使うメモリを持たせ、コールバックのPSPCB_RELEASEで解放するようにしています。
842デフォルトの名無しさん:04/10/24 12:39:14
>>841
呼び出し元で確保したら呼び出し元で開放するのが基本じゃないか?
843841:04/10/24 12:45:14
>>842
DLLからアプリ側にHPROPSHEETPAGEを渡すので
解放するタイミングがコールバックしかないのです。
844デフォルトの名無しさん:04/10/24 12:45:53
>>842
時と場合による
845デフォルトの名無しさん:04/10/24 14:18:48
GetCharWidth32でU+10000以降の文字幅を取得できないのは仕様ですか?
846デフォルトの名無しさん:04/10/24 22:53:25
FindFirstFile とかで、ディレクトリツリーを辿るプログラムで、ディレクトリのシンボリックリンクを
辿らせないようにするにはどうすればいいのか教えてください偉い人。
847デフォルトの名無しさん:04/10/24 23:01:57
CreateWindowでEDIT(テキストエディタ)を作成し
入力を整数又は小数点にしたいのですが
整数はES_NUMBERで実現できました。
しかしながら整数だけの入力にしてしまいますと
当然ながら少数点の入力ができません。
整数と少数に入力を制限できる方法ってありますでしょうか。
848デフォルトの名無しさん:04/10/25 00:28:06
>>846
興味本位で訊くんだけど、NTFSはディレクトリのシンボリックリンクを作れるの?
849デフォルトの名無しさん:04/10/25 00:34:36
>>848
呼称は違うけど、ほぼ同等なものが作れる。
850デフォルトの名無しさん:04/10/25 00:47:54
\\相手のPC\共有フォルダ名
みたいなパスをFindFirstFileで検索掛けると
"ファイルが見つかりません"というエラーが返却されるんですけど、

本当にファイルがないか、それとも、ネットワーク共有名かを判断するAPI
ってないですかね?
851デフォルトの名無しさん:04/10/25 01:03:00
>>850
少なくとも、
\\127.0.0.1\SharedFolder\*
とかだと検索できるけど。
852デフォルトの名無しさん:04/10/25 01:04:36
>>850
UNC
853デフォルトの名無しさん:04/10/25 01:38:13
>>852
PathIsUNCですかね?
なんかいけそうです。有難う御座います。
854デフォルトの名無しさん:04/10/25 07:05:55
うんこネタ禁止
855デフォルトの名無しさん:04/10/25 09:24:47
>>854
朝起きて一発目のレスがそれかorz
856デフォルトの名無しさん:04/10/25 09:51:30
スピンコントロールの内容を変数にゲットしたいのですが
GetWindowTextやGetDlgItemTextでは取得できませんでした。
スピンコントロールをゲットできる関数ってありますでしょうか・・・。m(_ _)m
857デフォルトの名無しさん:04/10/25 10:16:16
>>856
UDM_で始まるメッセージを調べてみ
858デフォルトの名無しさん:04/10/25 10:18:59
MFCのCSpinButtonCtrl::GetPos()のソースを見てみるとか。
859デフォルトの名無しさん:04/10/25 10:59:32
MACアドレスを取りたくてGetAdaptersInfoを使ったのですが、
IEEE1394のアドレスだけ取れませんでした。
そういうものなのでしょうか。
getmac.exeとipconfig.exeの出力結果も違うし、ググっても
情報が全然ないしで困りました。
860デフォルトの名無しさん:04/10/25 11:26:42
>>859
WBEM 使うととれるかも。
861デフォルトの名無しさん:04/10/25 12:29:15
>856
ちなみにスピンコントロールは、アップダウンコントロールと
エディットコントロールの組の事。
856 が GetWindowText で得ようとしたのは
アップダウンコントロールの方のテキストだろうな。
862デフォルトの名無しさん:04/10/25 15:39:42
Windowsコントロールの標準のポップアップメニューにメニュー追加はどうやりますか?
863デフォルトの名無しさん:04/10/25 16:13:50
GetSystemTime()で世界協定時刻(UTC)を取得しているのですが
このAPIで取得出来る時刻はどの程度信頼性のあるものなのでしょうか?
ユーザが簡単に調整など出来ないようになっているものなのでしょうか?
864デフォルトの名無しさん:04/10/25 16:21:02
>>863
コントロールパネルの「日付と時刻」を開いてごらん。
865デフォルトの名無しさん:04/10/25 16:30:37
>>864
日付と時刻のプロパティが出ました。
これに何かあるのでしょうか?
866デフォルトの名無しさん:04/10/25 16:35:38
>>863
GetSystemTimeは世界協定時刻(UTC)を取得する関数ではありません。
システム日時をUTCに換算して取得する関数です。

信頼性は、PCの時刻に依存します。
ユーザが、PCの時刻を操作できる権限を持っていれば、変更される可能性があります。
867863:04/10/25 16:42:00
>>866
という事は殆ど当てにならないという事ですね…
厳密に取得するには、(UTC)が取得できる
信頼性のあるサーバから取ってくるしかないという事ですか。
868デフォルトの名無しさん:04/10/25 16:54:42
>>867
Windows NT 系だったら、タイムサーバーにアクセスして
時刻を正確に調整してくれるように設定できるよ。
まあ、それもユーザー(あるいは管理者)に任されているわけだけど。
企業内の大きなLAN であれば、タイムサーバー置いてるでしょう普通。
869デフォルトの名無しさん:04/10/25 19:48:28
http://www.uploda.org/file/uporg13472.txt

ボタン1つ作れないorz
どこがダメなんですか?
870デフォルトの名無しさん:04/10/25 19:58:45
>>869
#defineIDB_BUTTON1100;

このセミコロンを削除しましょう。
871デフォルトの名無しさん:04/10/25 20:19:36
windowsプログラミングでスクロールバーを扱う関数にSetScrollRange(hwnd,iBar,iMin,iMax,bredraw)という説明があったのですが
第2引数のiBarにはSB_VERTかSB_HORZを指定するとだけ書いてあり、これらがどういう意味を持つのかさっぱりわかりません。
この二つは何が違うのでしょうか?
872デフォルトの名無しさん:04/10/25 20:22:44
873デフォルトの名無しさん:04/10/25 20:25:31
>>871 SDK のドキュメント読めばわかるから。
874871:04/10/25 20:37:32
MFCのデータしか出ないのですが。。
875デフォルトの名無しさん:04/10/25 20:38:54
>>874
>>872で「SetScrollRange」で検索して上から4番目。
876デフォルトの名無しさん:04/10/25 20:49:55
ms-help://MS.PSDK.1033/shellcc/platform/commctls/scrollbars/scrollbarreference/scrollbarfunctions/setscrollrange.htm
877デフォルトの名無しさん:04/10/25 20:50:35
878デフォルトの名無しさん:04/10/25 20:53:54
879デフォルトの名無しさん:04/10/25 20:56:22
>>877
違う。
あと日本語版のヘルプは肝心な記述が抜けてたりするんで、雰囲気だけ掴むだけにしとけ。
880871:04/10/25 21:04:12
英語版でようやくたどりつけました。。
MSDNは英語版のほうがよろしいんですかね〜?
なかなかAPIを検索しようにもMFCばっかりで。。
881デフォルトの名無しさん:04/10/25 21:21:04
つーか、縦か横かって話だけだろ?
882デフォルトの名無しさん:04/10/25 21:28:14
MFCも結局はAPI呼んでるから見て損はないと思う。
それに>>871は引数から言ってMFCじゃないのか?
あとAPIのSetScrollRangeは使うなっていうことだぞ
883デフォルトの名無しさん:04/10/25 21:55:51
>>882
プログラミングwindowsという本に載っていた関数なのでAPIだと思うのですが。。MFCなのですかね。。??
884デフォルトの名無しさん:04/10/25 22:01:58
MFCで引数がhwndってあまり無いわけだが。
885デフォルトの名無しさん:04/10/25 22:10:48
SB_VERT SB_HORZでイメージわかないようだと英語は厳しいだろ。
886デフォルトの名無しさん:04/10/25 22:34:49
自分のウインドウがアクティブになっていなくても、
あるキー(たとえばF1等)が押されたときにそれを感知するにはどうしたらいいですか?
887デフォルトの名無しさん:04/10/25 22:39:59
キーロガーでも作りたいのか?
888デフォルトの名無しさん:04/10/25 22:41:04
ほっときー
889デフォルトの名無しさん:04/10/25 22:42:16
監視員をつける
890デフォルトの名無しさん:04/10/25 22:49:18
グローバルフックを使う。DLLを作成しる
891886:04/10/25 22:51:30
>>888
Hot keyってコモンコントロールだったんですか……。
これを使ってみます。
892デフォルトの名無しさん:04/10/26 01:20:19
コモンコントロールのホットキーは違うと思う。
893デフォルトの名無しさん:04/10/26 01:28:19
>>891
コントロールのホットキーは、キーの組み合わせを受け取れるだけの
コントロールであって、その組み合わせを監視するには、DLL作って
フックするしかない。
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
894デフォルトの名無しさん:04/10/26 01:47:29
力業でGetAsyncKeyStateとか
895デフォルトの名無しさん:04/10/26 03:41:23
フックだと監視できても変更できないしなぁ・・・。見てるだけ。orz
896デフォルトの名無しさん:04/10/26 03:45:19
デスクトップのショートカットキーと同じようなもので良いのなら、
WM_HOTKEYを使う。

フックなら変更も可能。
897デフォルトの名無しさん:04/10/26 04:30:45
>>896
WH_GETMESSAGE の場合だけ?
898デフォルトの名無しさん:04/10/26 06:40:07
Cygwinのフォルダが消せず、フルコントロールできるのがシステムになっていたので
与えられたフォルダのパス以下を全て削除するようなプログラム書きたいんですが
システム権限で動くようにするにはどうしたらいいんでしょ?
899デフォルトの名無しさん:04/10/26 06:55:02
以下のキーに実行ファイル名を入れてマシンを再起動。SYSTEM権限で実行されるので注意。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
もしくは、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
900898:04/10/26 07:04:35
>>899
ありがとうございます、さっそくコード書いて試してみます。
901でき:04/10/26 08:51:30
すいませんが、どなたか、VB.netにてwin2000、winXPの端末がコンピュータロック中か取得する方法をご存知でしょうか?
(APIを利用してできるのではと思いこちらに質問しました。)
902デフォルトの名無しさん:04/10/26 09:50:31
いま動いてるプロセスを管理するような関数ってある?
いくらリファレンスとか WWW の検索かましても
これといったのがないんだけど

とくに各プロセスのファイルアクセスの情報を見たいんだけど
903デフォルトの名無しさん:04/10/26 10:38:40
ない
904902:04/10/26 10:40:42
例えばタスクマネージャに使ってる関数てどんなの?
905デフォルトの名無しさん:04/10/26 10:44:30
タスクマネージャにファイルアクセスのログなんてあったっけ
906デフォルトの名無しさん:04/10/26 10:46:09
>>905
いやファイルアクセスのことはとりあえず置いといて

最終的に本当にしたいのはファイルとプロセスの関係なんだけどね
907デフォルトの名無しさん:04/10/26 10:47:54
>>902
NT系ならAPIでファイルハンドルの保持状況を見れないことはないが、フックしたほうが簡単。
908デフォルトの名無しさん:04/10/26 10:57:36
API フックのこと?
メッセージフックじゃファイルアクセスを監視できないと思うけど。
909デフォルトの名無しさん:04/10/26 11:01:03
漏れも linux の fuser みたいなの欲しいけど、簡単な方法はないんじゃない?
かの sysinternals の FileMon でも VxD 使ってフックかけてるし。
910902:04/10/26 11:02:40
あそうそう

まさに filemon みたいなことがしたいわけよ

あれ,どうやってんの?

詳しく詳細きぼん
911デフォルトの名無しさん:04/10/26 11:03:43

FileMon はここ。
このサイト、Windows で変なことしようとするとき参考になります。
ttp://www.sysinternals.com/ntw2k/source/filemon.shtml
912デフォルトの名無しさん:04/10/26 11:04:49
>>911

つーかその動作原理を知りたいのさ

そのサイトに何か書いてあるん?
913デフォルトの名無しさん:04/10/26 11:06:06
>>901
「コンピュータロック中」ってどういう状態?
914デフォルトの名無しさん:04/10/26 11:07:20
>>912
見に行きゃいいじゃん。そもそも>909にVxD使ってるって書いてあるし。
915デフォルトの名無しさん:04/10/26 11:13:02
”How FileMon Works”以下に必要な情報へのリンク等があるみたいです。
Windows "handle table" あたりでググルと別方向からの情報も見つかると思います。

簡単だけれども酷いやり方としては、先方のプロセスにコードをinjectして、
0x0000〜0xFFFFあたりを NtQueryObject で調べてみるとか。
916909=911=915:04/10/26 11:16:43
>そのサイトに何か書いてあるん?
書いてはあるけど、IFSMGR は SDK が高いので簡単には使えないですね。
しかし酷い態度。相手にするんじゃなかった・・・
917デフォルトの名無しさん:04/10/26 11:21:53
ちょっとでも礼が言えないヤツなんだな
918でき:04/10/26 11:57:34
>>913
「コンピュータロック中」とは「Alt」+「Ctrl」+「Del」をおしてするコンピュータロックのことです。
919デフォルトの名無しさん:04/10/26 12:11:24
OpenInputDesktopでwinlogonデスクトップがアクティブかどうか調べる
920デフォルトの名無しさん:04/10/26 13:13:45
丁寧な文体でない質問には答えない。これが後悔しないコツ。
921デフォルトの名無しさん:04/10/26 13:19:13
>>920
文体が丁寧なだけで中身が無いよりも、
必要な内容が全て含まれている崩れた文体の方が好ましい。
922デフォルトの名無しさん:04/10/26 13:29:26
>>921
それはそうだ。ただ態度、出方による。
923909=911=915:04/10/26 14:49:11
そもそもこっちが勝手にレスしてるんだから
相手の態度がどうであれ関係ないか、
と考え直しますた。
924デフォルトの名無しさん:04/10/26 15:17:53
理解しようとする気がない奴には答えない。これが後悔しないコツ。
925921:04/10/26 15:26:51
>>924
激しく同意
926デフォルトの名無しさん:04/10/26 15:45:35
皆さん、教えてもらったら「ありがとう」といいましょう。
善意で答えてくださっているのですから、横柄な質問はやめましょう。
927デフォルトの名無しさん:04/10/26 16:43:34
928デフォルトの名無しさん:04/10/26 17:09:48
>>921
ここに居るだけで傷ついてる人はいるけど
929デフォルトの名無しさん:04/10/26 17:20:02
そりゃ問題外
930デフォルトの名無しさん:04/10/26 17:23:13
>>929
それが大事
931886:04/10/26 17:28:30
>>896
RegisterHotKey()で登録したホットキーを無効にするにはどうすればいいんですか?
932デフォルトの名無しさん:04/10/26 17:46:14
ん?
ヘルプ見たらRegisterHotKey()のすぐ横にあるだろ
933デフォルトの名無しさん:04/10/26 18:26:11
初心者にまず教えるべきことはMSDNの見方だと思うんだよね。
934デフォルトの名無しさん:04/10/26 18:44:50
礼儀だろ
935デフォルトの名無しさん:04/10/26 18:45:37
カラテカを100回クリアできるまでは初心者
936886:04/10/26 20:41:34
……見落としていましたOrz
937デフォルトの名無しさん:04/10/26 21:53:36
タブを使ったチャットソフト作ろうとしているんですけど、タブ
を切り替えるときに表示内容を変更する場合、表示内容をロード
して(文字位置や、フォントサイズなど)表示を切り替えるのと、
タブごとに異なるビューが存在し、タブを押すことによって表示
が切り替わるのが思いつくんですが、後者のほうは簡単にできる
でしょうか?前者はあまりにも保持しておく情報が多そうなんで
なんかスマートじゃない感じがします。
938デフォルトの名無しさん:04/10/26 22:23:19
すいません。教えてください。

CreateWindowで作ったウインドウを親ウインドウとして、CreateDialogで
ウインドウにダイアログを貼り付けています。
このダイアログ内のボタンに”標準のボタン”を設定し、見た目は外枠?の
ついた標準のボタンになっているのですが、エンターを押しても実行されません。
マウスでクリックすれば実行できます。

フォーカスとかそういう問題なのでしょうか?
939デフォルトの名無しさん:04/10/26 22:59:36
>>937
私ならダイアログをはっつけるね。

>>938
そういう問題でしょう。恐らくは、はっついたダイアログにフォーカスが来てないのかと。
940デフォルトの名無しさん:04/10/26 23:17:04
>>938
エンターの押し下げはモーダルダイアログ用のダイアログプロシージャによって実行されます。
モードレスダイアログでは機能しません。
941デフォルトの名無しさん:04/10/26 23:20:04
>>940
つまり、ウインドウにモードレスダイアログを貼る方法の場合は、
通常のエンターでのボタン押下はつかえないということでしょうか?

もしどうしても実行したいのであれば、自分でキーイベントを拾う??
942デフォルトの名無しさん:04/10/26 23:22:23
IsDialogMessageをメッセージループに組み込む
943デフォルトの名無しさん:04/10/26 23:35:57
>>942
ありがとうございます。
今は環境がないので後日試してみます。
944デフォルトの名無しさん:04/10/27 00:06:41
SHQueryValueExとRegQueryValueExの違いはなんでしょうか?
MSDN見たところどちらも違いがないように思えるのですが。
945デフォルトの名無しさん:04/10/27 00:50:23
Photoshopのレイヤー情報表示部分のような、ペイントソフトに良くある
下記のコントロールはどの様に作るのでしょうか
_______________________
|★ ◎ レイヤー1. |
|★ ○ .////////. | ←フォーカス時の反転は文字の部分(=レイヤーxx)のみ
|☆ ◎ レイヤー3. |
|           | ★や◎はアイコンで、クリックすると状態が☆や○に変わる
|           |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
オーナードローかカスタムドローのリストビューかなとは思うのですが、
反転部分が文字部分だけというのが引っかかります。
VCLに似たような物があるとも聞いたので、もしかしたら何か
既成のコモンコントロールがあるのでしょうか?

spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、
また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします
946デフォルトの名無しさん:04/10/27 01:01:52
Photoshopは確かすべて自前描画のコントロールだったと思うのですが。
Macと共通のインターフェイスですし。
947デフォルトの名無しさん:04/10/27 04:11:35
>>945
>spy等で調べてみたいのですが、自分ではPhotoshopを持って無く、
>また学校のPCにexeを入れると非道く怒られるもので…ひとつよろしくお願いします

何の学校かにもよるだろうけど、勝手にインストールするんじゃなくて、
目的を伝えて必要性を説明すれば怒られることはないと思われます。
もちろん断られるかも知れませんが。

もしプログラミング技術等を教える学校でありながらそれを断られるようなら、
選んだ学校を間違ったと思ってあきらめよう。
948945:04/10/27 08:10:20
>>946
ぜ、全部自前ですかぁ…。なるほどマルチプラットフォーム。
あれと同じ物を作るのは…気が遠くなりそうですが覚悟を決めることにします。

>>947
あはは、Photoshop入りのPCが他学部の端末な事もあって、
怖じ気づいていました。確かに勉強事に奥手になっちゃ駄目ですね。

お二人ともレスありがとうございました。
949デフォルトの名無しさん:04/10/27 08:18:26
>>916
> >そのサイトに何か書いてあるん?

大阪っぽい
950デフォルトの名無しさん:04/10/27 12:06:11
チェックボックスの背景色を灰色から変更したいのですが、無理でしょうか。
SetBkColorでは無理でした。。
951デフォルトの名無しさん:04/10/27 12:11:47
出来ます。
952デフォルトの名無しさん:04/10/27 12:25:08
WM_GETCTLCOLOR*かな?
953デフォルトの名無しさん:04/10/27 13:18:59
最近、興味のある質問がめっきり減った。
954デフォルトの名無しさん:04/10/27 13:41:32
ちと古いホトショップだけど
PSFloatCとかPSViewCとか独自コントロールかな?
WM_USER+αが飛び交っておりました
955デフォルトの名無しさん:04/10/27 14:10:05
>>953
じゃあ手本を示してみろ。
956デフォルトの名無しさん:04/10/27 14:14:56
>>952

WM_GETCTLCOLOR*は存在しませんでしたが、ここら辺調べ見ます。
ありがとうございまいました。
957デフォルトの名無しさん:04/10/27 15:54:35
スマソ ちょっと質問でつ
VB6で長時間稼動(多分100日とか連続でうごきっぱ)するシステムに
時間を計る部分があって、そこでTimegetTimeのAPIを使用しています。

しかし、ここで、TimegetTimeは連続である一定以上動かないのは周知の事実なのですが、このAPIが返す値が32Bit(VBのLong)を超えた場合、どのような動きになるのでしょうか?
テストするのが一番かとも思うのですが、そこまで時間に余裕がありません。
よろしくお願いいたします。
958デフォルトの名無しさん:04/10/27 15:57:36
0
959デフォルトの名無しさん
おぉ、ありがとうございます〜
まさかLongの最小値から始まる事は無いと思ってたんですが
これで対策が取れそうです
ありがとうございました〜