■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API【2】
1 名前:デフォルトの名無しさん :01/11/26 22:56
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
ただし、質問する前にまずMSDN読め。

MSDN Online
http://www.asia.microsoft.com/japan/developer/

前スレ
http://pc.2ch.net/test/read.cgi/tech/991576947/

2 名前:デフォルトの名無しさん :01/11/26 22:59
HSP

3 名前:デフォルトの名無しさん :01/11/26 22:59
Ruby

4 名前:デフォルトの名無しさん :01/11/26 23:00
Uva

5 名前:デフォルトの名無しさん :01/11/26 23:02
Perl

6 名前:デフォルトの名無しさん :01/11/26 23:09
Mind

7 名前:デフォルトの名無しさん :01/11/26 23:09
ひまわり

8 名前:デフォルトの名無しさん :01/11/26 23:11
COBOL

9 名前:デフォルトの名無しさん :01/11/26 23:13
COMET

10 名前:デフォルトの名無しさん :01/11/26 23:16
           ノビ〜
   (   ∧_∧
  ⊂ ´⌒つ゚ー゚)つ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


              ノビノビ〜
   (         ∧_∧
  ⊂ ´⌒⌒⌒⌒⌒つ゚ー゚)つ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


                   ノビノビ〜ン
   (                  ∧_∧
  ⊂ ´⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒# ゚ー゚)
 ̄ ̄ ̄ ̄ ̄∪ ̄∪ ̄ ̄ ̄ ̄ ̄ ̄∪ ̄∪ ̄ ̄


   (    ∧_∧ ポッ     (    ∧_∧ ポッ
  ⊂ ´⌒⌒づ゚◇゚)づ    ⊂ ´⌒⌒づ゚◇゚)づ
 ̄ ̄ ̄ ̄ ̄彡 ̄~彡 ̄ ̄ ̄ ̄ ̄ ̄ ̄彡 ̄~彡 ̄

11 名前:デフォルトの名無しさん :01/11/26 23:35
VB

12 名前:デフォルトの名無しさん :01/11/27 00:26
Japanese

13 名前:デフォルトの名無しさん :01/11/27 05:23
MSDQN

14 名前:デフォルトの名無しさん :01/11/27 23:52
LOGO

15 名前:デフォルトの名無しさん :01/11/28 00:24
Prolog

16 名前:デフォルトの名無しさん :01/11/28 00:46
Fortran

17 名前:デフォルトの名無しさん :01/11/28 01:08
リーソーススクリプト上で、コンボボックスの
中身の文字列の配列なんて宣言とか設定とかできない、よな?

18 名前:デフォルトの名無しさん :01/11/28 01:18
実はMFCは・・・

19 名前:デフォルトの名無しさん :01/11/28 01:21
>>17
できるよ。

20 名前:デフォルトの名無しさん :01/11/29 01:10
オーナードローでポップアップメニューだけを表示させたいんだけど、
やっぱりメニュー以外にフォームとか、メッセージ受け取るウインドウって必要ですか。

21 名前:デフォルトの名無しさん :01/11/29 07:29
必要でしょう。非表示で作ればいいんじゃないの。

22 名前:デフォルトの名無しさん :01/11/29 15:26
>>20

>オーナードローでポップアップメニューだけを表示させたいんだけど、

この文章の意味が分からんが。オーナードローって、すでにウィンドウが
あるんでは?

23 名前:デフォルトの名無しさん :01/11/29 23:22
オーナー = メニューの所有者 = ウィンドウ

24 名前:デフォルトの名無しさん :01/11/30 21:38
CreateWindow() で作るウィンドウを DialogBox() みたいな
モーダルウィンドウにするにはどうすれば良いのでしょう?

25 名前:デフォルトの名無しさん :01/11/30 22:14
>>24
これといった方法がないです。
自分で、
親ウィンドウを無効化して、メッセージループを走らせて、
Tabキーとかを処理します。Tabキーとかの処理は
IsDialogMessage に渡せばやってくれたような気がします。

26 名前:デフォルトの名無しさん :01/12/01 23:03
ウィンドウのhbrbackgroundメンバって後から変更できるんでしょうか?

27 名前:デフォルトの名無しさん :01/12/01 23:33
>>26
SetClassLong

28 名前:デフォルトの名無しさん :01/12/01 23:43
>>27
どもです

29 名前:デフォルトの名無しさん :01/12/02 00:52
ShellExecute("http://www.2ch.net/");
とした場合、すでにブラウザが立ち上がってるとき、そのブラウザが再利用
されますが、それを常に新しいウインドウで表示するにはどうすればいいんでしょうか?

30 名前:デフォルトの名無しさん :01/12/02 01:18
CreateProcess

31 名前:デフォルトの名無しさん :01/12/02 01:28
>>29
おれも知りたい
>>30
それ関係あるの?

32 名前:デフォルトの名無しさん :01/12/02 01:42
29です
>>30
確かにiexplore.exeのパラメータとしてURLを渡した場合ちゃんと表示されますが、
IEのプロセスが複数になってしまってシステムにやさしくありません。

今考えているのは、IEのウインドウがすでにある場合WM_COMMANDを送って
ウインドウを作成してからShellExecute()なんですけど、なんだか泥臭いです。

33 名前:デフォルトの名無しさん :01/12/02 03:14
ieのDDEコマンド(?)で新気宇殷道で開くっての無かった毛?

34 名前:デフォルトの名無しさん :01/12/02 03:59
>>33
その田舎の珍走団みたいな当て字やめろ厨房。

35 名前:デフォルトの名無しさん :01/12/02 04:30
>>34
変換したときの第一候補なんですけど。。。
ちゃんとおなすのが面倒だったもんんで。

36 名前:デフォルトの名無しさん :01/12/02 20:38
で、結局どうなのさ?
ieのウィンドウの新規作成ロジックがいまいちわからないんだけど。

37 名前:デフォルトの名無しさん :01/12/02 21:13
>>30 さんの言う通り,CreateProcess で解決できるみたいっすね。
ただし
ttp://nt.sakura.ne.jp/~miwaki/progtips/shell/openwww.shtml
本当にそういう機能が必要なのかをじっくり考えないといけません。
システムに,ユーザーの意図に反した挙動をさせるような作品は
私はちょっと遠慮したいです。。。

38 名前:37 :01/12/02 21:17
すいません,無視してください。。
>>32 で 29 さん本人が言ってることですね。。。

39 名前:デフォルトの名無しさん :01/12/03 00:13
case WM_DESTROY:
DestroyWindow(hWnd);
break;
とかいうミスは誰しも通る道だよな?

40 名前:デフォルトの名無しさん :01/12/03 00:17
旧API板が一時的に消えているのを
誤解するオレはどきゅそですか?

41 名前:デフォルトの名無しさん :01/12/03 01:58
>>36
IEの設定で、
「ショートカットを起動するたびにウィンドウを再利用する」
のチェックをはずすと、ShellExecute()で新規窓が開くようになるハズ。
ここに関連するレジストリを探していじってみるというのはどうだろう。
専用のAPIがあるかどうかは、寡聞にして聞かない。

42 名前:デフォルトの名無しさん :01/12/03 02:00
当然他のアプリでShellExecuteしてるところの挙動も変わるので、そこは覚悟してね。

43 名前:デフォルトの名無しさん :01/12/03 03:45
ddeはだめなの?

44 名前:デフォルトの名無しさん :01/12/03 04:42
割り込むけど、漏れdonut使ってるから、こういう問題があること自体
気づかなかったよ。アブナイアブナイ

45 名前:デフォルトの名無しさん :01/12/03 05:01
おーぃ、てめーら聞いてくれよ、マジかよ!
まじかョ、まぢでよぉー!
バグってると思ってたんだよ!
描画とかやばくてまじやばかと思ったよ
いろいろ調べたんだコラ
でよぉ、デバッガのフックも調子おかしくて一回デバッグ
試すとフックで固まっちまうからよ、しょうがねーから
自作のツールが役に立った
調べたらよ、どーやら同じボタンやら貼り付けたウィンドウが
2重に重なってるらしかったんだYO
でよ、WM_CREATEの前後みたらYO

case WM_SIZE:
....くそっ
//break;
case WM_CREATE:
........
あとはしらね)

だとYO、2回クリエイトされてるっつーの!
うぅーーー至上まれなくらいの死にたい瞬間だったっつーの!

てめーら、、聞いてるんですか?

46 名前:デフォルトの名無しさん :01/12/03 05:04
100KB超えてるっつーの!
4〜5時間は費やしたっつーの!
なめんなっつーの!

47 名前:デフォルトの名無しさん :01/12/03 05:35
>>45-46
愚痴と電波はマ板で垂れ流せ。

48 名前:デフォルトの名無しさん :01/12/03 07:02
ftp://hotfix.microsoft.com/winnt/windows_2000/sp3/

49 名前:デフォルトの名無しさん :01/12/03 09:49
>>41
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BrowseNewProcess

50 名前:デフォルトの名無しさん :01/12/03 16:09
デバッグでプロセスを追ってくと
まだ使ってないはずのペンとか
フォントが起動時に確保されたりするのは
どう考えればいいの?

51 名前:デフォルトの名無しさん :01/12/03 16:20
タイトルとか、ウインドウそのものを描くのに要るから、ではなくて?

52 名前:デフォルトの名無しさん :01/12/03 19:16
>>50うーん、
いろいろと複雑だった。
デバッグは終わりました。
さっきは、つまりは、ペンとかを使っている関数が
呼ばれていないのに、確保だけされていることが気になってたました
プロセス見てると、起動時にはまだ関数が呼ばれてないのになぜか確保されている
つー表示があった。

53 名前:デフォルトの名無しさん :01/12/03 19:21
結局、一番の親のWM_CLOSEのところで、
宣言だけしてあって実際には作られてないhDlgとかに
大して、(安全のためだったのに)
if(IsWindow(hDlg))DestroyWindow(hDlg);
if(IsWin...
if(is
こーやってたのがまずかった。でもなんで、こーすると、
起動時のときさえも次々といろんなエラーが出るのかわかんないYO
素直には、起動時には関係ないじゃん、といいたい。
いっぱいエラーでて参ったよ

54 名前:デフォルトの名無しさん :01/12/04 04:41
CreateMutex()系なんて使ったことがないのに、
メモリーデバッガーのエラーのところに、
これ系のエラーが表示されます。コンパイラが親切に
やってくれたとは思えないし、内部で呼んでるんでしょうか。
createfont使ってフォントを変更するときとか
hFontとfFontOldに分けてやるじゃないですか、あそこらへん
に使えそうですよね?常套手段ですか?

55 名前:デフォルトの名無しさん :01/12/06 00:25
(゚ε゚).。oO(APIとダブらんように関数名考えるのが大変だ…)

56 名前:デフォルトの名無しさん :01/12/06 01:13
>>55
檄しく同意。
関数の頭にMyつけちゃうとか。。(ださ)

57 名前:デフォルトの名無しさん :01/12/06 01:16
プロジェクトの名前を3文字くらいに省略して関数名につける。

58 名前:デフォルトの名無しさん :01/12/06 01:32
namespace 使うべし

59 名前:デフォルトの名無しさん :01/12/06 01:38
C++ならそれでいいけんどもー、
Myつけるとか悩むのはだいたいCのプログラムじゃないかね?

60 名前:デフォルトの名無しさん :01/12/06 01:40
>>59
単に C++ 使えば良いだけだと思うが。設計を OO でやるとか MFC 使うとか
いう話ではなく、単に namespace が使える better C として C++ を使う。

61 名前:デフォルトの名無しさん :01/12/06 21:16
クラスに GetObject とかいうメンバ関数作ったら
勝手に GetObjectA とかに変えられて鬱。

62 名前:デフォルトの名無しさん :01/12/06 21:17
>>55
API の命名規則に合わせるのやめちまえ。
create_font とかいう名前にすれば絶対 API とダブらんぞ。

63 名前:デフォルトの名無しさん :01/12/07 04:24
てめーら俺の力技見る?

  while (GetMessage(&msg, NULL, 0, 0)){
    if( (&msg)->hwnd==hEditEntry &&
     (&msg)->message==WM_KEYDOWN &&
     (int)((&msg)->wParam)==VK_RETURN)
     (&msg)->wParam=0L;
     TranslateMessage(&msg);
     DispatchMessage(&msg);
      }
これがホントのプレ・トランスレート・メッセージだ

・・・MFC買ってください。

64 名前:デフォルトの名無しさん :01/12/07 04:27
別に.libのリンクもヘッダもパス通してる
からいいはずなんだけど、PathFindFileNameなどの
shlwapi.lib(.h)関数軍が使えません。
関数が未解決だそうです。対策きぼんぬ

65 名前:デフォルトの名無しさん :01/12/07 04:29
ちなみに63はエディットボックスの
リターンキー入力で音が出るのを
自己流PreTranslateでごりおししました。
僕のヘルプにはpretranslateなんてのはなかったYO

66 名前:デフォルトの名無しさん :01/12/07 04:31
64
ヘッダはパス通すっていうかインクルードしてます

67 名前:デフォルトの名無しさん :01/12/07 04:42
うんとかすんとかは言わないんですね・・・

68 名前:デフォルトの名無しさん :01/12/07 17:46
なんで反応がないのかが疑問だ!

69 名前:デフォルトの名無しさん :01/12/07 19:28
>>64
libは隣家にちゃんと渡してる?

70 名前:デフォルトの名無しさん :01/12/07 21:51
タスクマネージャとかで見る事の出きる、
プロセスが持ってるハンドル数は
どのAPIでどうやって取得すればいいですか?

71 名前:デフォルトの名無しさん :01/12/07 21:54
NTと9xで列挙の仕方が違う。
どっちだ?

72 名前:デフォルトの名無しさん :01/12/07 21:58
NT系です

73 名前:デフォルトの名無しさん :01/12/07 22:00
PdhなんちゃらのAPIでプロセス情報を取得しろ。
パフォーマンスカウンタのどれかに入ってる。

とりあえず、パフォーマンスモニタをいじって、感覚をつかめ。

74 名前:デフォルトの名無しさん :01/12/07 22:02
>>69
標準のコンフィグにまかせてる
からどーなってるのかな、
bcc32 -imyinclude (-tWとかはこの際略すけど)
しか指定しなくて、あとはbcc32.cfgの
に、
-Lxxxbcc55/lib
-Lxxxbcc55/lib/PSDK
なんだけどなぁ>>69

75 名前:デフォルトの名無しさん :01/12/07 22:05
>73
その、どれをつかったらいいのかが、さっぱりわかりません

76 名前:デフォルトの名無しさん :01/12/07 22:07
あのぉ、Enumシリーズって言えばいいのに

77 名前:デフォルトの名無しさん :01/12/07 22:09
自プロセスが、今いくつのハンドルを持っているか
わかればいいのですが、列挙しないとだめですか?

78 名前:デフォルトの名無しさん :01/12/07 22:12
つまらん。
自プロセスならGetPerformanceInfoでとれるだろ。

79 名前:デフォルトの名無しさん :01/12/07 22:21
>78
ありがとうございました。
英語のMSDNみたらありました。

80 名前:sage :01/12/08 16:53
エディットボックスの背景に好きなものを描画するというのは
サブクラス化を利用すればいいのでしょうか?

81 名前:デフォルトの名無しさん :01/12/08 17:30
あ、いい掲示板を見つけました。

どうしてもお手上げなので意見なり対処を教えていただきたい
のですが、ヘッダファイルcommctrl.hをgrepすると
ちゃんとINITCOMMONCONTROLSEXや、関数InitCommonControlsEx
が宣言されているのですが、プログラムに用いると未定義のシンボル
や、宣言のない関数、と言われます。もちろんcommctrl.hはインクルード
ぢています。
フリーのbcc++でコンパイルしていて、Win98を使用しています。
定石の、
#define _WIN32_WINNT 0x400
#define WINVER 0x400
#define _WIN32_IE 0

#define STRICT
も加えてあります。お心あたりのあるかた、教えていただけないでしょうか。

82 名前:デフォルトの名無しさん :01/12/08 17:42
>>81

#if (_WIN32_IE >= 0x0300)
typedef struct tagINITCOMMONCONTROLSEX {
DWORD dwSize; // size of this structure
DWORD dwICC; // flags indicating which classes to be initialized
} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;

(中略)

WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX);
#endif // _WIN32_IE >= 0x0300

83 名前:デフォルトの名無しさん :01/12/08 17:43
あ、commctrl.hの中を見たら、_WIN32_IEの#defineが
関係しているようで、#define _WIN32_IE 0を、
0x0501に変更したらコンパイルだけは通りました。
不慣れなころにどこかで見てそのまま使っていたのが
悪かったみたいです。0じゃだめですよね(笑)

ありがとうございました。

84 名前:デフォルトの名無しさん :01/12/09 01:12
テキストエディタを作ろうと思ってツールバーを付けて、
case WM_SIZE:
MoveWindow(hEdit, x, y, height, width,TRUE);
SendMessage(hTool, WM_SIZE, wP, lP);
と書いてウィンドウサイズを諸々変えてみると
エディットコントロール、ツールバーがチカチカしてしまうんですが、
もっと良い処理の仕方がありましたら教えて頂きたいですのだ。

85 名前:デフォルトの名無しさん :01/12/09 06:54
スタンバイ(スリープ)モードから自動復帰させるにはどのAPIを使えばいいのでしょう?

86 名前:デフォルトの名無しさん :01/12/09 07:08
スタンバイから復帰させるAPIが実行できるなら、
すでにスタンバイ状態ではない気がするが。
ハード的な仕掛けを用意すべし。

87 名前:デフォルトの名無しさん :01/12/09 09:38
>>85
スタンバイ中はプログラムが停止してますから、APIを呼ぶことは出来ません。

88 名前:デフォルトの名無しさん :01/12/09 13:35
>>86-87
起動中にタイマーをセットできますよね。タイマーセットのAPIはないのかしら?

89 名前:デフォルトの名無しさん :01/12/09 13:38
>>88
だから、タイマーで起きあがってくるならそれはスタンバイ状態じゃない
っつーの。

90 名前:デフォルトの名無しさん :01/12/09 13:48
WinAPI32だけ使ってプログロムわ
どーやってつくりんだ?
LIBCリンクしなきゃいいのか?
あと、memcpyとかつかいたいぞゴルァ

91 名前:デフォルトの名無しさん :01/12/09 14:04
>>90
スタートアップルーチンがあるから、それだけじゃlibc完全除外には
ならないけどね。リンカオプションでスタートアップシンボルに
自分のmainを指定すれば行ける。

が、もちろんスタートアップルーチンが無くなるのでlibc関係ほぼ
全滅。memcpy()が使いたいなら自作関数作れ。もしくはntdll.dll
辺りにあるRtlMemoryCopy(だったかな)使うとか。

92 名前:デフォルトの名無しさん :01/12/09 14:08
>memcpy()が使いたいなら自作関数作れ
#pragma intrinsic( memcpy )
vc限定で。
#まぁ、ソースから引っ張って俺様LIBC構築、
#という手もあるが。

93 名前:91 :01/12/09 14:09
>>91
「ほぼ」じゃないや。全滅だね。
RtlMemoryCopy()なんちゅうのも無かった、というかmemcpy()系は
kernel32.dllにもntdll.dllにも無いのか。

94 名前:デフォルトの名無しさん :01/12/09 14:11
>>88
タスクスケジューラーはどうやってんだ?

95 名前:親切な人 :01/12/09 14:11

ヤフーオークションで、幻の人気商品、発見!!!

今は無き「コピーガードキャンセラー」↓
http://page2.auctions.yahoo.co.jp/jp/auction/b18505597

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。

96 名前:デフォルトの名無しさん :01/12/09 14:17
CopyMemoryしらんのか?

97 名前:デフォルトの名無しさん :01/12/09 14:20
>>93

RtlMoveMemory()

98 名前:デフォルトの名無しさん :01/12/09 14:44
>>85 >>88 >>94
調べてみたらこんなのが見つかったけど、これがそーなのかな?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/hardware/power_8j1w.asp

99 名前:98 :01/12/09 14:45
間違い。こっちが本物。
http://msdn.microsoft.com/library/en-us/hardware/power_0bg3.asp

100 名前::01/12/09 15:24
>>98-99
おお。ありがとうございます。OnNow

waitable timer objectのCreateWaitableTimer というAPIを使えばいいのかな。

サンプルがあれば助かるんだが。
あとは、調べてみる。また、わかんなくなったらよろしくね。

101 名前:デフォルトの名無しさん :01/12/09 15:27
ちなみに、やりたいことは、オーディオタイマーもどきね。
朝の目覚ましに、かってに電源Onしてmp3でも聞かせてくれたら最高。

タイマーソフトって、OFF機能はあるけど、ON機能付ってないでしょ。
それともあるのかな?

102 名前:デフォルトの名無しさん :01/12/09 23:26
ListViewをSTLと連動させるとかするようなライブラリないでしょか?

103 名前:デフォルトの名無しさん :01/12/10 00:07
アンタナニイッテルノ?>102

104 名前:デフォルトの名無しさん :01/12/10 00:08
指定時刻にPC起動したけりゃふつーBIOSに設定する。

105 名前:デフォルトの名無しさん :01/12/10 02:38
で、結局GetPerformanceInfoってどーやってつかうんだ?

106 名前:K.N :01/12/10 14:29
質問です。
CreateWindowでコンボボックスを作成して
SendMessageで項目を追加していってるんですが、
ドロップダウンしてリストが表示されません。
項目は追加されていると思うんですが。
項目を追加した後、SendMessageのCB_SETCURSELで番号
を指定してやると、表示はされるのですが、ドロップダウンリストが
現れません。
なぜなんでしょうか?

107 名前:さんばー :01/12/10 14:48
C言語は俺に聞け!に書き込んだのですが、
すれ違いとのことなのでこちらにかきます

ソケットを作って、send(Socket,buf,strlen(buf),0);
でデータを送信するプログラムをC+winsockでを書いているのですが、
closesocketするか、プログラムを終了させないとデータが届きません。
おそらくどこかにバッファされてしまっているのでは、
と思っているのですが、どのようにするとすぐにsendした内容が
届くように出来るのでしょうか。
perlだと $|=1;してストリームをフラッシュしますよね。
このような動作が必要なのではと思っているのですが・・・

108 名前:デフォルトの名無しさん :01/12/10 15:44
>>106
CreateWindowでコンボボックスを作る場合、nHeightは
ドロップダウンするリストの高さになるが、小さすぎるとか?

109 名前:デフォルトの名無しさん :01/12/10 16:05
>>107
そんなんじゃ、bufの中身全部送れないよ〜
送れるまでループしなくちゃ!

110 名前:K.N :01/12/10 16:29
>>108
そうでした。
簡単に解決してしまいました。ありがとうございます。

111 名前:デフォルトの名無しさん :01/12/10 19:45
>>107
ブロッキングかノンブロッキングかどっちかね?
ノンブロックなら戻り値をCHECK

112 名前:デフォルトの名無しさん :01/12/11 03:27
>70 でプロセスが持つハンドル数取得について質問した者ですが
タスクマネージャやパフォーマンスモニタで
表示させたハンドルの値と
GetPerformanceInfoで取得したハンドルの値とが
あまりにもかけはなれているのですが
どうしてなのかさっぱりわかりません.
使用方がまちがっているのでしょうか?

PERFORMANCE_INFORMATION ps;
ps.cb = sizeof(PERFORMANCE_INFORMATION);
GetPerformanceInfo(&ps, ps.cb);
cout << ps.HandleCount << endl;

よろしくおねがいします

113 名前:さんばー :01/12/11 04:19
>>109,111
レスありがとうございます
rc = send(TcpSocket,(const)buf,strlen(buf)+1,0);

if (rc == SOCKET_ERROR)
{
printf("sendに失敗しました\n");
closesocket(TcpSocket);
return;
}else {
printf("%dバイトデータを送信しました\n",rc);
}

こんな感じで戻り値をチェックしてるのですが、
ちゃんとXバイトデータが送信されました
って出るんですよね。
サーバのほうでは、これを受けて標準出力に出力し、
ソケットにまた返す(echoサーバ)だけの動作をしているのですが、
クライアントでclosesocketするか、プログラミングを終了させるかしないと
出力しないんです。

114 名前:デフォルトの名無しさん :01/12/11 04:51
>>113
サーバのrecvはちゃんと全部読み込むまでやってるか?

115 名前:デフォルトの名無しさん :01/12/11 07:35
標準出力がバッファリングされてるだけだったりして。

116 名前:デフォルトの名無しさん :01/12/11 10:23
>>112
パフォーマンスモニタをもうちょっといじってみなさい。
つか、あれってカウンタごとにスケールが設定されてるけど、
気付いてる?

117 名前:さんばー :01/12/11 12:42
>114
perlで同様にクライアントを書くと出来るんですよね・・・。
serverの方はperlで書いていて
select(CLIENT); $|=1; select(STDOUT);
while (<CLIENT>){
print "受信メッセージ: $_\n";
# クライアントにメッセージを返す
print CLIENT $_;
}
このようにやっているので全部受信できると思うのですが・・・

>115
そのようなバッファリングはどのようにしてオフにする、
もしくはバッファの内容を全部出力するようにする事が出来るのでしょうか。

118 名前:デフォルトの名無しさん :01/12/11 13:37
とうぜん、ここ
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja.html
はみた上で言ってるんだろうな

119 名前:デフォルトの名無しさん :01/12/11 19:19
僕の痛い話を聞いてください。
WM_PARENTNOTIFYのidchild=HIWORD(wParam)は
WM_CREATEおよびWM_DESTROYのときはチャイルドIDで
それ以外ではundefinedとあります。僕はこれをむしして
プログラム書いてたら、どーやらundefinedのくせにチャイルドID
よりも1大きい数をなぜか送ってくるのだ。(2進法的にはビットが
ずれてるのかもしれないけどな)
だから致命的なエラーにならずなんとなく動きはしたのだけれど、
ずれているのでなんでずれてるのかが分かりづらかったです。

なまじっか動くからたちわりーよなぁ!おかげで配列って[1]からだっけ?
とかとんでもないところまで考え直すはめになったYO。ハメハメ!

120 名前:デフォルトの名無しさん :01/12/12 11:25
ちょっと前にVC++のスレにも書いたんですが、反応がなかったんで・・・

シリアル通信で、DCB構造体のfAbortOnErrorをTRUEにしても
通信エラーが起こったときに処理を中断しないんです(FALSEと変わらない)。
普通、エラーをクリアするまで次の処理ができないはずなのに・・・

Win2000だと設定通り動くんだけどWin98/Meでやったらこうなってしまいました。
何がいけないんでしょうか?

121 名前:デフォルトの名無しさん :01/12/12 11:49
>119
SetCaptureしたら、WM_MOUSEMOVEの位置はマイナスになることもあるよね
で、POINT pt = { HIWORD(lParam) , LOWORD(lParam) }とかやってたら、
pt.xが(マイナス幾ら、のかわりに)64000とかになってしまった。
ああ、そういやHIWORDはWORD(unsigned short)だった事に、とようやく気づく

122 名前:デフォルトの名無しさん :01/12/12 19:09
hFont=SendMessage(hwnd,WM_GETFONT,,)
したhFontをDeleteObjectしなくちゃいけないのは
hFont一個分のフォントオブジェクト用のメモリを確保したから
使い終わったら開放しろっていうことなのかな

hFontって複数のフォントに使いまわして最後に
一回だけdeleteobjectすればいいの?メモリマップみたいな感じ?

フォントかなり面倒くさい。

123 名前:デフォルトの名無しさん :01/12/12 19:14
>>121それおれもある

124 名前:デフォルトの名無しさん :01/12/12 21:29
>116
いじってみたのですが、どーしてもわかりません.
ヘッダを見てもそれらしい事は書いてないし・・・

125 名前:デフォルトの名無しさん :01/12/12 22:19
現在スクリーンセーバーが起動中もしくは省電力モニターの電源が切れている
ということを検知できるAPIってありますか?

126 名前:デフォルトの名無しさん :01/12/13 00:12
>>122
そんな感じ。面倒くさいのはフォントに限った話じゃなかろう・・・

127 名前:デフォルトの名無しさん :01/12/14 00:58
ありがとう>>126

と・・・お次は・・・
エディットコントロールにファイルをオープンするだけの
プログラムなんだけど、はじめchar szbuf[1024*256]で
確保してたんだけど、これをグローバル変数のポインタにして
..........
hFile=CreateFile....
dwSize=GetFileSize()
szbuf=(char *)malloc(dwSize+1);
ReadFile.(.....szbuf,)
SendMessage(hEdit,WM_SETTEXT,nlen
....
free(szbuf);
CloseHandle(hFile);
とやると、テキストがエディットに表示された直後ページ違反みたい
なのが出るんだけど、どー考えても、WM_SETTEXTが処理されるよりも
速い速度でfreeされるからとしか思えないんだけど、正しいかな

freeの前にZeroMemoryいれるとページ違反のダイアログボックスが
3つ(はじめはひとつ)に増えるし、小さいファイルだと開けることも
あるし、小さいファイルを開いたあとだと違反のでちゃったファイルも
開けたりするし、あとは、CloseHandle(hFile)のタイミングずらすと
ファイルサイズ(dwSize)もなんだかおかしな数を返してきたり。

128 名前:デフォルトの名無しさん :01/12/14 01:02
>>125
無いと思うが…自関数で作るとすると
これは…プロセス一覧を取得して「.scr」を探すべきなのか…?
#.exeなスクリーンセーバーは困るが…(汗)

129 名前:デフォルトの名無しさん :01/12/14 05:06
>>127
szbufがNULLで終わってないってオチはないよな?

130 名前:デフォルトの名無しさん :01/12/14 18:57
127>>それは大丈夫
一応ここに書いてないけどszbuf[dwAccbytes]='\0'
やってるし、やっぱり、char szbuf[1024*256]
とかやるとエラーはでないし、ReadFileも、念のため
中途半端だがdwSize+1バイト(mallocはdwSize+2バイト)
やってたし、やっぱりSendMessageはメッセージ送ってるだけ
だから同期とか考えなきゃいけないときもあるっていう結論
に達しました。WM_SETTEXTのすぐあとでコントロールのテキスト
になんかしようとすると、テキストが大きいとまだテキストを
置き終わってなさそうなときもあるし、Sleepやってもこの場合
使いどころが違うみたいだしなぁ・・・・

131 名前:デフォルトの名無しさん :01/12/14 23:30
>>127
>WM_SETTEXTが処理されるよりも速い速度でfreeされるからとしか思えないんだけど

それはおそらくない。
SendMessageはウィンドウプロシージャから抜けるまで待ってくれるはず。

132 名前:デフォルトの名無しさん :01/12/15 00:37
つーか全部ソース晒せや
的確なコメントが欲しいなら

133 名前:デフォルトの名無しさん :01/12/15 00:45
SendMessage(hEdit,WM_SETTEXT,0,szbuf)

134 名前:横から悪いがちと疑問なのさ。 :01/12/15 01:15
>>131
ん? freeした後でWM_SETTEXTの処理が行われてる?

#その省略した SendMessageから freeまで、どーなってるのか不明だが…
#ちゃんとWM_SETTEXTの後になってるんだろうな?
#というか、freeすると、メモリデータ崩壊したっけ?

135 名前:デフォルトの名無しさん :01/12/15 02:20
>>134
別にたいしたことになってないけどね、
要は読み込みは関数つくってそこでやってるんだけど、
どーやら、やっぱり、SendMessageっていうのはSendすること
って考えた方がいいんじゃないのかな、で、内部で勝手にスレッド
が起動するって考えたほうが。Sendしたからってその瞬間に
szbufに内容が入ってるってことじゃないってことでしょ、
だから、SendMessageの一行うしろでfreeとかやると、
freeのがタイミングが早いんじゃないかな、ほかにもそれを
思わせるふしはいっぱいあるよ、フォントの設定の関数も
作ったんだけど、それもSendMessage(,WM_GETTEXT,,)
のすぐあとだとちゃんとフォントセットできてないし。
俺は正しいと思うよ?スレッドとか同期とかよく、わかってる人ですか?
(お願いします)

136 名前:デフォルトの名無しさん :01/12/15 02:27
>>135
変な思い込み、格好悪い。
あんたの逝ってるような動作をするのは、
PostMessage()だろ。

> 内部で勝手にスレッドが起動するって考えたほうが
勝手にスレッドが起動!?すげーな。
メッセージ受けた側のメッセージハンドラは、
スレッド起動してすぐreturnしてるんだ。
ふーん。

> ほかにもそれを思わせるふしはいっぱいあるよ
> 俺は正しいと思うよ
正しいあんたが作ったプログラムが、何故エラーを吐く?
ビルゲの陰謀だとでも(w

137 名前:デフォルトの名無しさん :01/12/15 02:30
君、意味わかんないね、returnしてくるって誰がいったの?
低脳の猿はなにも言わなくていいよ

138 名前:デフォルトの名無しさん :01/12/15 02:32
あと、きちんと説明も一人前にできないのに
不十分な説明でなんだかきちゃっている君の出番はないよ

139 名前:デフォルトの名無しさん :01/12/15 02:39
SendMessage(hEdit,WM_SETTEXT,(WPARAM)(nLen+1),(LPARAM)szbuf);
SetFont(hEdit);

だいたいこれは別の例だけど、この順序でフォントがきちんと
設定できていないことをどう説明するの?
順序関係とか変えてちょっと工夫するときちんとフォント
設定できるんだけどねw

140 名前:デフォルトの名無しさん :01/12/15 02:43
>>136 が正しいに50万ゴルダ!!

141 名前:デフォルトの名無しさん :01/12/15 02:49
ウィンドウプロシージャがメッセージの処理を終えるまで待たないなら、
SendMessage はどうやって戻り値を返すんだ?
WM_GETTEXT とか WM_GETFONT とか。

142 名前:低脳の猿 :01/12/15 02:52
>>137
> returnしてくるって誰がいったの?

すげー読みづらい日本語だけど(日本語だよね?)

> どーやら、やっぱり、SendMessageっていうのはSendすること
> って考えた方がいいんじゃないのかな、で、内部で勝手にスレッド
> が起動するって考えたほうが。Sendしたからってその瞬間に
> szbufに内容が入ってるってことじゃないってことでしょ、
> だから、SendMessageの一行うしろでfreeとかやると、
> freeのがタイミングが早いんじゃないかな、

ここに書いてあることって、SendMessage()が
すぐreturnしてる=制御を戻してくる、という意味違うのか。

143 名前:デフォルトの名無しさん :01/12/15 02:52
>>139
WM_SETTEXT におけるWPARAM は0にすべき(現在未使用)だと
MSDNにあるぞ。

144 名前:デフォルトの名無しさん :01/12/15 02:58
ファイルサイズ(の変数の値)がおかしくなるとかあったし、
単純にスタック(自動変数)を破壊しているだけだったり...(w

145 名前:デフォルトの名無しさん :01/12/15 03:08
ほれ。実際に動いたコードをくれてやる。よく見比べるがいい。2MBのテキストファイルで試したが問題なし。
HANDLE hFile;
DWORD dwSize;
void* szbuf;
DWORD dwSizeRead;
hFile = CreateFile("a.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE) return;
dwSize = GetFileSize(hFile, NULL);
if(dwSize == 0xFFFFFFFF) return;
szbuf = malloc(dwSize + 1);
if(szbuf == NULL) return;
ReadFile(hFile, szbuf, dwSize, &dwSizeRead, NULL);
((char*)szbuf)[dwSizeRead] = '\0';
SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)szbuf);
free(szbuf);
CloseHandle(hFile);

146 名前:134 :01/12/15 03:09
今、MSDN見てきたよ。 SendMessage が 制御待ちする方だったか。
とするとエディットコントロールの方はちゃんと制御帰ってきてから free なるからいいのか。

# >>134の時、SendとPostを捕らえ違えてたか。 混乱させてすまぬ。>ALL

<蛇足>
>>139 は SendMessageでWM_SETTEXTが行われた後でSetFontされてるのがマズイのかな?
(SendとPostを間違えて、自信無くなったらしい)

147 名前:145 :01/12/15 03:10
ミス発見につき、訂正。

誤:if(dwSize == 0xFFFFFFFF) return
正:if(dwSize == 0xFFFFFFFF){ CloseHandle(hFile); return; }

誤:if(szbuf == NULL) return;
正:if(szbuf == NULL){ CloseHandle(hFile); return; }

148 名前:134 :01/12/15 03:12
>>143 >>145
げ。ホントだ… WPARAM 0 にしてなかったミスなのか?

149 名前:145 :01/12/15 03:18
>>148
SendMessage(hwnd, WM_SETTEXT, dwSizeRead+1, (LPARAM)szbuf);
にしてみたけど、特にエラーることもなく。
もっと全然関係ない別の原因と思われ。

150 名前:デフォルトの名無しさん :01/12/15 03:23
俺、罵倒され損かよ…
虐めないから結果報告してくれ。

151 名前:デフォルトの名無しさん :01/12/15 04:50
いやいや、動くかどうかは大して問題じゃないんだよね、
俺のコードも実際、小さいファイルなら問題なく開けるんだよね、
サイズが64kを大幅に上回るとことが顕著科するんだよね。

そりゃーファイルが大きくなればSendMessage(,WM_SETTEXT,,)送っても
全部展開するまで時間かかりそうじゃんか、だから思った(<間違いと
指摘された点?)
小さいファイルだとエラーでない。
まぁ、GetFIleSizeかもなぁ、けどmalloc freeでなく
配列で確保すると大丈夫だからなぁ、なにかあるよなぁと思う。
ちなみにmallocだってdwSizeより1大きく(2とかもやったけどさ)
とって、やってたしなぁ。

152 名前:デフォルトの名無しさん :01/12/15 05:52
おいおいそんなでかいメッセージ送るんじゃない。
あれにはあくまでも表示するもののみを送るんだ。

153 名前:デフォルトの名無しさん :01/12/15 09:36
あー、ひょっとして、Win9XではEditBOXに64K以上
データが入らない制限の話なのか?

それと、>139だが、MSDNでsetfontを調べたが、
HWNDを単独でとる引数の::SendFont APIなるものは存在していない。
CWnd::SetFont( HFONT, BOOL = TRUE)など、MFC,ATLのみだったぞ。
(それでも、hEditなんかはとらない)
俺は、もっと他にも隠された問題が山ほどあると想像する。

あと、127は名無しのまま応答を続けるな。
>127 >130 >135 >139 >151 ?)

154 名前:デフォルトの名無しさん :01/12/15 16:07
なんだよ、そういうオチだったのかよ>64KB

155 名前:デフォルトの名無しさん :01/12/15 21:08
JPEGファイルの読み込みはOleLoadPictureFileで何とかできるのですが
JPEGファイルへの出力方法がわかりませんOleSavePictureFileという
それらしいAPIを見つけたのですが引数等の使用方法が不明なため使用できません。
JPEGへの出力方法を御存知のかたがいましたら教えてください。
自力でJPEGへエンコしろというのは無しでお願いします。

156 名前:デフォルトの名無しさん :01/12/15 21:28
>>154
うん、落ちはもっととんでもなくすごかたYO
64k問題はだいじゅぶなんだ

157 名前:デフォルトの名無しさん :01/12/15 21:29
------------------構成: sdk017 - Win32 Debug--------------------
リンク中...
017.obj : error LNK2001: 外部シンボル ""int __cdecl ShowText(struct HWND__ *)" (?ShowText@@YAHPAUHWND__@@@Z)" は未解決です
017.obj : error LNK2001: 外部シンボル ""long __stdcall DlgProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DlgProc@@YGJPAUHWND__@@IIJ@Z)" は未解決です
017.obj : error LNK2001: 外部シンボル ""int __cdecl SetWinCenter(struct HWND__ *)" (?SetWinCenter@@YAHPAUHWND__@@@Z)" は未解決です
Debug/sdk017.exe : fatal error LNK1120: 外部参照 3 が未解決です。
link.exe の実行エラー

sdk017.exe - エラー 4、警告 0

というエラーなんですけどどう対処したら良いのでしょうか?

158 名前:デフォルトの名無しさん :01/12/15 21:35
#define WIN_VERほならら 400
#define WIN_IE 400
とかが書かれてないときもそーいうえらーでる

159 名前:157 :01/12/15 22:10
ちなみに
http://www.kumei.ne.jp/c_lang/sdk/sdk_18.htm
のプログラムをビルドしました。

160 名前:デフォルトの名無しさん :01/12/16 00:14
APIとはあまり関係ないんですが・・・
タスクマネージャのCPU使用率、というものがあります。
で、あるプログラムで不用意に無限ループとか作ると、
使用率が100%になりますけど、他の動いているアプリにも
CPUが割り当てられているはずなのに、なぜ100%に
なるんでしょうか。

161 名前:デフォルトの名無しさん :01/12/16 00:20
あれは全アプリで100%使われているって事では?

162 名前:デフォルトの名無しさん :01/12/16 00:22
>>157
その章は、説明が完結していません。次の章に続きます。

163 名前:デフォルトの名無しさん :01/12/16 00:23
シリアルポート使ったAPのリバースしたいんですが、お勧めのラインモニター
ありますか?

164 名前:デフォルトの名無しさん :01/12/16 00:25
タスクマネージャのプロセス毎のCPU使用率でしょ。
逆に、何も動かしていない場合には、System Idle Process
が99〜100%になってるません? >160
他のアプリが、起動はしていても作業していなければ、
余っているCPU時間を占有できる、と。

165 名前:デフォルトの名無しさん :01/12/16 00:25
>>160
貴方のプログラムをAとして、他のアプリをB、Cとしよう。

貴方のプログラムだけが動いてるときは
A:100% B:0% C:0% 合計100%

他のプログラムも動いてるときは
A:50% B:25% C:25% 合計100%

ってな感じで、つまり合計は常に100%です。わかった?

166 名前:デフォルトの名無しさん :01/12/16 00:25
>>160 四捨五入してんだろ

167 名前:デフォルトの名無しさん :01/12/16 00:28
>>157
>159のページに全ソースが載っていない。
他の章から探せ。

168 名前:165 :01/12/16 00:31
プロセスごとのやつか。

> 他の動いているアプリにもCPUが割り当てられているはず

他の動いてるアプリとやらは、1%未満で充分ってことだろう。

169 名前:160 :01/12/16 00:38
すんまそ。Windows2000のタスクマネージャで、
アプリケーション、プロセス、パフォーマンス、という
ように3つのタブがありますが、「パフォーマンス」の
タブに出ているCPU使用率です。確かにプロセスの
タブはSystem Idle Processを含めて全て足すと100%に
なります。ということはIdleを除いたものを足したものが
パフォーマンスタブのCPU使用率になりそうだ・・・

170 名前:157 :01/12/16 01:23
レスありがとうございます
かなり早とちりでしたすみません。

171 名前:デフォルトの名無しさん :01/12/16 01:51
>>168
プロセスがRunnableじゃ無ければ、OSのマネージャはCPU時間を
割り当てたりしないよ。無駄だから。だから、起動はしているけど
CPU使用率0%(全く使用しない)プロセスというのはあるんだよん。

なにかのイベント(マウスクリックだったり、キー入力だったり、
入出力バッファへの読み書きだったり、その他いろいろ)があって、
そのプロセスを動かす必要が出てきたら初めてプロセスの状態が変更
されて、マネージャはそれを感知してCPU時間を割り当てに行くん
でしょ。違ったっけ?Windowsは知らないけど、シングルCPUマルチ
タスクOSのプロセス管理って、大体そんなもんでしょ?

172 名前:デフォルトの名無しさん :01/12/16 02:01
質問です。
EllipseやRectangleを使ってオセロっぽいもの作ってるんですけど
なにか途中で色が抜けたり円の背景だけ白かったり黒かったりに
なってしまいます…どうすればいいでしょうか?

173 名前:デフォルトの名無しさん :01/12/16 02:11
一時的に標準のブラウザを変更したいのですが、
レジストリの.htmlとかを書き換えてみても全然反映されません。
どうすればいいでしょうか?

174 名前:デフォルトの名無しさん :01/12/16 02:15
ちゃっとで書き込んだ後に勝手にフォームの内容が消える
書き方おしえてくれや、四足エッタチョンコども

175 名前:デフォルトの名無しさん :01/12/16 02:25
>>174
意味不明。書き込んだあとに消せばいいではないか。

176 名前:172 :01/12/16 02:54
できちゃいました。でわ…

177 名前:デフォルトの名無しさん :01/12/16 03:24
朝焼けに
  夕日を思う
 スダチかな

178 名前:デフォルトの名無しさん :01/12/16 09:07
>>173
http: とか .url とかその辺もいろいろ変えれ。

179 名前:デフォルトの名無しさん :01/12/16 09:16
>>174
また書き直せば良いよ。
必要なときに WM_PAINT が送られてくるから、そんときに。
・・・って、フォームってなんぞ。

180 名前:デフォルトの名無しさん :01/12/18 12:08
MSDNで、Win95ではFreeResourceを呼ばなくてはならないって説明が
いつのまにか説明ごと葬り去られてなかったことになってるんだけど
どうなってるの?

181 名前:デフォルトの名無しさん :01/12/18 12:18
>>125
SPI_GETSCREENSAVERRUNNING
ただしWin98/2000以降

182 名前:ナナシ :01/12/18 12:35
XP環境下でレイヤーでウインドウの形を変えて半透明にすると、
なぜかウインドウの形に亀裂が入ってしまうんだけど、これって
XPのバグなんですか?2000じゃならないし。

183 名前:デフォルトの名無しさん :01/12/18 13:56
ListViewでカラムの数を調べたいんですが、ListView_GetItemCountのColumn版というかが見つかりません。
なんか凄いアホな質問だとおもうんですが、だれかズバッと教えてください。

184 名前:デフォルトの名無しさん :01/12/18 15:17
カラムを追加したのは誰なの?

185 名前:デフォルトの名無しさん :01/12/18 17:01
>>183
ListView_GetColumnあるじゃん?

186 名前:デフォルトの名無しさん :01/12/18 17:06
>>183
int nCount = Header_GetItemCount(ListView_GetHeader(hwndLV));
つう感じでどうか。

187 名前:183 :01/12/18 17:40
>>186
おお、でけました。恥ずかしながら、そういう風にやるなんてまったくしらなかったっす。
185さんのを見て、何番目までGetColumn出来るか、で数えてみる方法でもちゃんと分かりましたが、
そっちの方がスマートでありがたいです。とにかく助かりました。

188 名前:180 :01/12/18 19:22
誰か真相を教えてください。
昔はLoadResourceの説明にこんなことが書かれてたんだけど
> Windows 95: The system does not automatically free resources
> loaded using the LoadResource function. Applications must use
> the FreeResource function function to explicitly discard a resource
> that is no longer needed.

189 名前:ヒッキー@プログラミング :01/12/18 19:27
>>188
FreeResource

16 ビット Windows ベースのアプリケーションの移植を容易にするために提供されているもので、
今後廃止されます。Win32 アプリケーションでは、LoadResource 関数でロードしたリソースを
解放する必要がありません。LoadResource 関数で取得したリソースは、それをロードした
モジュールがアンロードされると自動的に解放されます。

190 名前:デフォルトの名無しさん :01/12/18 19:51
折れはLoadResouceしたらFreeResourceを必ず呼んでる。
理由は、ペアになっていないと気持ち悪いから(w

191 名前:180 :01/12/18 22:52
>>189
で、結局どっちが正しいんでしょうか。

192 名前:デフォルトの名無しさん :01/12/18 23:05
>>191
MSDN Library の文章は信用できないが、2ちゃんねらーの言明は信用できるのか?

193 名前:デフォルトの名無しさん :01/12/18 23:42
whiel(1){
h=loadlibrary('test.dll')
rsr=findresource(h,test,...)
LoadResource(h,rsr);
freelibrary( hl );
}
みたいに回して試せば〜?

194 名前:180 :01/12/19 01:19
>>192
188もVC++ 4.0のBooks Onlineからの引用なんですけど。
いつのまにか記述がコロコロ変わるようなものとどっちが
信用できるんでしょうねえ。マジで。
ちなみに
http://msdn.microsoft.com/library/en-us/win32/chilimit_70vn.asp
に相当するドキュメントにも、昔は
> In Windows 95, a call to the FreeResource function must be
> included for every call to the LoadResource function. The call
> to FreeResource allows the system to discard a resource that
> an application no longer needs. Windows NT automatically frees
> resources, so a call to FreeResource is not required.
とか書かれてたんですけどこれも葬られてますね。

195 名前:デフォルトの名無しさん :01/12/19 01:58
>>194
VC4 のドキュメントは、古すぎだって。とりあえず最新の MSDN Library 参照して、それを信用しておく
のが賢明と思われ。

本当に困りそうなら、

1. 実験して試す (Win95 も OSR のバージョンによって挙動が違ったりしそうだが)
2. インシデント消費して MS に問い合わせる

しかないんじゃないかなぁ。

196 名前:180 :01/12/19 02:02
>>195
それを言うなら95だって古すぎだと思うんですけど。
ドキュメントが新しくなったからって95についての記述が変わるなんて
95には自己進化能力でもあるんでしょうか、とか思ったり。

消されたもっともらしい理由があれば納得するんですけど
Microsoftに聞くしかないか。

197 名前:デフォルトの名無しさん :01/12/19 02:04
95のkernel32.dllのFreeResourceの逆汗
FreeResource:
bff915fc 33c0 xor eax,eax
bff915fe c20400 ret 0004
結論: 当時のドキュメントのバグ

198 名前:デフォルトの名無しさん :01/12/19 04:57
MemTurboみたいなメモリデフラグって、どうやってるのでしょうか?
特別にドライバ入れたりしてるわけではないので、
APIだけで実現してるのだとは思うのですが・・・。

199 名前:デフォルトの名無しさん :01/12/19 13:48
かっこいいAPIを教えてください

200 名前:デフォルトの名無しさん :01/12/19 13:55
>>196
http://www.microsoft.com/japan/windows/lifecycleconsumer.asp

そろそろ非サポート対象フェーズに移行するらしいので、古いOSに関する
記述をサクッと削除しようという方針ではないかと推測。
なぜ当時のドキュメントに"In Windows 95,〜"と書いてあったかはわからない
けど。

201 名前:デフォルトの名無しさん :01/12/19 13:59
LoadResourceって、確かファイルマッピングぢゃない?
LoadLibraryで作成されたファイルマップに対するビューだから、
FreeLibrary時に自動的に無効になるはず。
だからFreeResourceが要らないというのは正しいが、
たぶんFreeResourceするとアンマップされるので
した方がメモリ消費が減るかと思われる。

巨大リソースを埋め込んだexeで試してみるといいよ。
ロード時にはexeのファイルサイズ分はメモリ使ってないけど、
LoadResourceの時点でメモリが喰われる。
FreeResourceでメモリが解放されるかどうかはOSのバージョンに依る。

202 名前:デフォルトの名無しさん :01/12/19 15:16
>201
とりあえず、>>197のは見えるか?

203 名前:デフォルトの名無しさん :01/12/19 20:56
スワップアウト(ページアウト?)されるときに、スワップファイル(ページングファイル?)に待避する代わりに単に破棄するはずだから、解放されるというかなんというか。

204 名前:デフォルトの名無しさん :01/12/19 21:13
>>200
他の部分は95の記述もいっぱい残ってるしVC++6付属のMSDNで
すでに削除されてたので深読みしすぎだと思われ

205 名前:悩んでます :01/12/19 23:42
質問させていただきます。初心者ではありますが、かなり真剣です。

とある事情からWin32APIの「SystemParametersInfo」という
関数を使う必要が出てきました。具体的にはその関数の1番目の
引数を「SPI_GETSHOWIMEUI」に設定するのですが、いざビルドした所
エラーになりました。(エラーはSPI_GETSHOWIMEUIは定義されていない)

しかしMSDN Online Japanのサイトでもしっかりと記述してあるし
定義されていないわけがないのですが、なぜかそう出ます。

includeしているのはWindows.hのみです。
Visual C++6.0とDirectX7.0を使用してます。

他に何かファイルをincludeする必要でもあるのでしょうか?
一応他の関連スレでも聞く予定ですが、もし分かる方がいらっしゃれば
どなたかご教授よろしくお願いします。

206 名前:デフォルトの名無しさん :01/12/19 23:55
>>205
>しかしMSDN Online Japanのサイトでもしっかりと記述してあるし
制限付きなモノは、デフォルトでは使えませんよ…バージョン指定しないと。

>他に何かファイルをincludeする必要でもあるのでしょうか?
MSDN見たなら最後の方に、どのヘッダで定義されてるか書いてるでしょ。

207 名前:悩んでます :01/12/20 00:11
>206
レスどうもです。

バージョン指定・・・とはどこをどう変える必要があるのでしょうか?
他スレで指摘されたのですがWINVERの値のことですか?

208 名前:悩んでます :01/12/20 01:00
>206
解決しました。なるほど、おっしゃる意味が解決したことで
分かりました。どうもです。

209 名前:200 :01/12/20 08:58
>>204
それもそうだった。鬱

210 名前:デフォルトの名無しさん :01/12/22 17:42
マルチスクリーン環境で、特定の座標が何番目のスクリーンの上か、
またそのスクリーンの左上・右下の座標を得るにはどう調べたら
宜しいのでしょうか…

211 名前:デフォルトの名無しさん :01/12/22 18:45
>>210
マルチスクリーンってマルチモニタのこと?
だったらMonitorFromPointでハンドルを取得しておいてGetMonitorInfoとか。

212 名前:210 :01/12/22 19:27
>>211
一度このAPIに目止まったのですが、いまいち意味が解らず、
そのまま素通りしてました;
二つ通して眺めたら納得。 有り難うございましたー

213 名前:デフォルトの名無しさん :01/12/28 22:47
ここらでフォントのことはっきりさせておきたいので
教えてください

214 名前:デフォルトの名無しさん :01/12/28 22:50
>>213
なにか?

215 名前:デフォルトの名無しさん :01/12/28 22:50
SetWindowFont(hWnd1,GetWindowFont(hWnd2),TRUE);

ここにhWnd1とhWnd2は別アプリ。

こーいうのってやらないほうがいいのかな?
hWnd2をDestroyしてもちゃんとフォント残ってるよ
フォントってどうなってるの?

216 名前:デフォルトの名無しさん :01/12/28 22:53
SetWindowFont って API あったっけ。

217 名前:デフォルトの名無しさん :01/12/28 22:56
ごめんなさい失礼しました。。

218 名前:デフォルトの名無しさん :01/12/28 22:59
>>216
マクロー
WINDOWSX.Hにあるー

219 名前:デフォルトの名無しさん :01/12/28 23:13
で、
SetWindowFont(hWnd1,GetWindowFont(hWnd2),TRUE);
オブジェクト的にどーなってるの?

220 名前:デフォルトの名無しさん :01/12/28 23:15
継承してる感じですか?

221 名前:デフォルトの名無しさん :01/12/29 21:04
ユーザー定義の仮想フォルダってつくれないんでしょうか?

プリンタ、コントロールパネル、ダイアルアップネットワーク、お気に入り、
など各仮想フォルダごとにカラムの内容が違いますよね。

自作の仮想フォルダが要求された時にエクスプローラーのカラムの内容を変更
し、ファイルに相当するものの一覧を表示したいのですが。

222 名前:デフォルトの名無しさん :01/12/29 21:57
>>221
IShellFolder を実装しなきゃならんと思います。
んで、クラスファクトリ作ったり、ちゃんとしたCOMのインプロセスサーバーに仕立てて、クラスIDをレジストリに登録します。

んで、ファイルシステム内に置くなら desktop.ini をスーパー隠しファイルにしてクラスIDを書けば良かったかな?
マイコンピュータ内に置きたいなら HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace
デスクトップ上なら HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace が怪しそうです。

いずれも実際に自分がやったことはないので、信頼度の低い情報です。参考程度にして頂ければ。

223 名前:デフォルトの名無しさん :01/12/30 01:05
タスクマネージャがやってるようにスレッド PID から優先度を変更したいのですが、
SetThreadPriority() に渡すスレッドハンドルは、どうやって求めるのでしょう?

224 名前:デフォルトの名無しさん :01/12/30 01:43
>223
他のプロセスのスレッドの優先度を変更したい
ということですか?

225 名前:223 :01/12/30 02:09
そです。
無理ですか?

226 名前:デフォルトの名無しさん :01/12/30 03:31
>>225
OpenThread() かな。

227 名前:デフォルトの名無しさん :01/12/31 02:35
共有化してあるフォルダにあるファイルを自分や
他のユーザーが開いていないかをラベルにはどうしたらいいですか?

228 名前:デフォルトの名無しさん :01/12/31 05:18
実際に書き込み属性つけて開いてみれば〜?

229 名前:デフォルトの名無しさん :01/12/31 13:28
>>226
Win95/98/NT 4.0では無理?

230 名前:223 :01/12/31 15:24
OpenThread() は廃止されてるという話ですが…
少なくとも taskman.exe では呼ばれてないですね

231 名前:デフォルトの名無しさん :01/12/31 16:44
>>230
どこで聞いた話か知りませんがデマを振りまかないでください。
廃止などされていません。
Win9xのtaskman.exeにはそもそも優先度変更の機能なんて
ありませんから呼んでるわけがありませんね。あなた本当に223?

232 名前:デフォルトの名無しさん :01/12/31 18:14
>>229
NT のタスクマネージャには機能がある以上、方法はあると思う。とりあえず Dependency Walker でタスク
マネージャが使っている API をリストアップしてみたら? (ただ NTDLL.DLL にある非公開 API を使われ
てるとお手上げだけど)。

233 名前:デフォルトの名無しさん :01/12/31 18:26
タスクマネージャで変更できるのは優先度クラスで、
優先度クラス変更のAPI(SetPriorityClass)に渡すのは
スレッドハンドルではなくてプロセスハンドルだから、
そもそもスレッドハンドルを求める必要はない。

234 名前:デフォルトの名無しさん :01/12/31 19:15
どうしてもスレッドを開く必要があるなら
Windows NT/2000ネイティブAPIリファレンスみたいな本も出てるから
お手上げってほどでもない。
NT 4.0でOpenThreadをシミュレートするとこんな感じ。

HANDLE OpenThread(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId)
{
OBJECT_ATTRIBUTES ObjectAttributes;
CLIENT_ID ClientId;
NTSTATUS status;
HANDLE ThreadHandle;

InitializeObjectAttributes(&ObjectAttributes, NULL, bInheritHandle ? OBJ_INHERIT : 0, NULL, NULL);
ClientId.UniqueProcess = 0;
ClientId.UniqueThread = dwThreadId;
status = NtOpenThread(&ThreadHandle, dwDesiredAccess, &ObjectAttributes, &ClientId);
if (!NT_SUCCESS(status)) {
SetLastError(RtlNtStatusToDosError(status));
return NULL;
}

return ThreadHandle;
}

235 名前:デフォルトの名無しさん :01/12/31 19:22
Win95/98だと
typedef HANDLE (WINAPI *OPENTHREADPROC)(DWORD, BOOL, DWORD);
pOpenThread = (OPENTHREADPROC)((LPBYTE)GetProcAddress(GetModuleHandle("KERNEL32"), "OpenProcess") + 0x24);

__asm mov eax,dwThreadId
__asm xor eax,Obsfucator
return pOpenThread(dwDesiredAccess, bInheritHandle, dwThreadId);

236 名前:デフォルトの名無しさん :01/12/31 19:30
Win32sだとOpenThreadは存在するけど引数がスレッドIDのみで他と異なる。
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q121093

237 名前:デフォルトの名無しさん :02/01/03 01:13
お正月バージョン

(゚д゚)午-

238 名前:デフォルトの名無しさん :02/01/03 01:42
>>237 「ゴー」って読んじまった。逝。

239 名前:デフォルトの名無しさん :02/01/05 15:57
結局>>223は優先度の変更に成功したのだろうか

240 名前:デフォルトの名無しさん :02/01/06 01:28
ウィンドウのクライアント領域に描かれてる内容をBMPにして
セーブしたいんですが、どうやればいいのでしょうか?
BITMAP作ってDCにSelectObjectしたりしたんですが駄目でした。
あと本当はBMPじゃなくてピクセル情報が取りたいのですが。

241 名前:デフォルトの名無しさん :02/01/06 01:55
>>240
ピクセル拾うなら GetPixel()
ビットマップにコピーしたければ BitBlt()

242 名前:240 :02/01/06 02:02
GetPixelを使った時は、他のウィンドウがそのウィンドウの上にある場合に失敗しました。
(上のウィンドウもピクセルとして拾ってしまう)

BitBltを使ってどうやってピクセル情報を得るんでしょうか?
ヘルプを見るとDCからDCへのコピーみたいな感じなんですが。

243 名前:デフォルトの名無しさん :02/01/06 02:21
>>242
SetForegroundWindow で明示的に前に出せば?
直後に sleep を入れて少し待てば確実にいけると思うが。

244 名前:240 :02/01/06 02:37
こんな感じ↓でBitBltを使ってみたんですが、bitmapには何も描かれていませんでした・・。

hdc = GetDC(hwnd);
hdc2 = CreateCompatibleDC(hdc);
bitmap = CreateDIBSection(hdc2...
SelectObject(hdc2, bitmap);
BitBlt(hdc2, 0, 0, w, h, hdc, 0, 0);

単純にSetDIBitsToDevice関数の逆をやりたいだけなんですけど、Winって難しいっすね。

245 名前:デフォルトの名無しさん :02/01/06 03:03
>>242
表示されてないクライアント領域まで拾いたいのか? それは無理だろう。自分で書いてるアプリなら

- WM_PAINT に対して直接書かずに、いったんバックバッファに書くようにする
- クライアント領域のデータがほしければ、バックバッファから拾ってくる

とするところだが、他のアプリだと汎用的な方法はないと思うなぁ。

>>243
Win98/2000 以降だと、自分がアクティブでない場合には SetForegroundWindow() しても対象のウィンドウが
前面に出てこないから、ちと厳しいと思う。

246 名前:240 :02/01/06 03:37
結局バックバッファから拾ってくる方法で上手くいきました。
みなさま、ありがとうございました。

・・実はDCってバックバッファみたいな機能を持ってると思い込んでました。

247 名前: :02/01/06 03:53
バッファ取ってないからWM_PAINTがあるんだろう。。。

248 名前:デフォルトの名無しさん :02/01/06 03:59
マスターボリューム(音量)を age,sage,ミュート等できるAPIってありますか?

249 名前:デフォルトの名無しさん :02/01/06 08:51
http://n76cd-01p02.ppp11.odn.ad.jp/old/a5850.html#A5844
上のURLに書かれている「Windows2000でのWM_MOVING」について
分かる方いますか?自分もまったく同じ現象で悩んでいます。

250 名前:デフォルトの名無しさん :02/01/06 09:55
>>249
http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_callwndproc.htm

解説
 CallWndProc フックプロシージャはメッセージを調べることはできますが、変更することはできません。フックプロシージャがシステムに制御を返した後、このメッセージはウィンドウプロシージャへ渡されます。

誤動作でもなければ、バグでもなければ、使い方が悪いわけでもないです。仕様です。


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.