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


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

Win32API質問箱 Build24
501 名前:デフォルトの名無しさん :04/11/11 23:04:54
0xfefefeの話題が出てたので、余計な補足を。
((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)+((a++&0xf8f8f8)>>3)
で、int32 *a のRGBデータの8点平均。
2のべき乗ならこのやりかたがはやいよー。

502 名前:501 :04/11/11 23:08:26
まちがえた。
シフトは足した後で一括でやろう。

503 名前:デフォルトの名無しさん :04/11/11 23:18:52
a[?]使った方がイイかも?

504 名前:デフォルトの名無しさん :04/11/11 23:24:21
>>501
些細な高速化の割には精度ガタ落ちだから、素直に>>459を7回やったほうが良いような気がする・・例↓

#define Ave2(a,b) (((a) & (b)) + ((((a) ^ (b)) & 0xfefefefe) >> 1))
#define Ave4(a,b,c,d) Ave2(Ave2(a,b), Ave2(c,d))
#define Ave8(a,b,c,d,e,f,g,h) Ave2(Ave4(a,b,c,d), Ave4(e,f,g,h))


505 名前:501 :04/11/11 23:30:34
>>504
ごもっとも。
でも、些細な高速化に興味が有るので許してください。

506 名前:デフォルトの名無しさん :04/11/11 23:38:32
>>423も、とりあえず満足したようだし、
スレ違いの話題はこの辺に

続きをやりたければ、画像処理スレか最適化スレにでもどぞ

507 名前:501 :04/11/11 23:40:58
>>506
BMPの話題はWin32だよー。
でも、確かにこの辺にしておくのが良いですね。

508 名前:デフォルトの名無しさん :04/11/11 23:45:55
>>507
BMP特有の操作じゃないだろ?

509 名前:501 :04/11/11 23:47:48
この辺に。
ね。

510 名前:501 :04/11/12 00:30:30
進行を止めてしまった。
申し訳ないです。
悪気は無いんです。
許してね。

遠慮せずに書き込んでねー。

511 名前:デフォルトの名無しさん :04/11/12 01:43:05
最小化してから再び最大化したときに、
親ウィンドウの部分は再描画されるのですが、
子ウィンドウの部分は真っ白になってしまいます。
子ウィンドウも描画させるにはどうしたら良いでしょうか。

512 名前:デフォルトの名無しさん :04/11/12 01:43:50
SDIです。

513 名前:デフォルトの名無しさん :04/11/12 01:51:20
>>512
OnDrawとかOnPaintで描いてないとかそんなんじゃ

514 名前:デフォルトの名無しさん :04/11/12 02:06:59
MFC使わずにSDKだけでやっています。
汚いコードですが、こんな感じです。

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 static HWND hChild01;
 PAINTSTRUCT ps;
 HDC hdc, hBuffer;
 static HBITMAP hBit01;
       switch (msg)
       {
  case WM_CREATE:
 hBit01 = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, (LPCTSTR)IDB_BITMAP1);
 MyRegisterClassDefault(((LPCREATESTRUCT)lParam)->hInstance, Child01, szChild01);
 hChildOL01 = CreateMyWnd(IDhChild01, hWnd);
 ShowWindow(hChild01, SW_SHOW);
 break;
  case WM_PAINT:
 hdc = BeginPaint(hWndOpen, &ps);
 hBuffer = CreateCompatibleDC(hdc);
 SelectObject(hBuffer, hBitMAP1);
 BitBlt(hdc, 0, 0, 800, 600, hBuffer, 0, 0, SRCCOPY);
 DeleteDC(hBuffer);
 EndPaint(hWndOpen, &ps);
 break;
       }
(つづく)

515 名前:デフォルトの名無しさん :04/11/12 02:07:55
(つづき)
LRESULT CALLBACK ChildProc(HWND hChild01, UINT msg, WPARAM wParam, LPARAM lParam)
 HDC hdc, hBuffer;
 PAINTSTRUCT ps;
 static HBITMAP hBitKuro;
 switch(msg){
case WM_CREATE:
 hBitKuro = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, (LPCTSTR)IDB_Kuro);
 break;
case WM_PAINT:
 hdc = BeginPaint(hChild01, &ps);
 hBuffer = CreateCompatibleDC(hdc);
 SelectObject(hBuffer, hBitKuro);
 BitBlt(hdc, 0, 0, 200, 120, hBuffer, 0, 0, SRCCOPY);
 EndPaint(hWndOL01, &ps);
 break;
}


プログラムを始めて3週間なのですが、
いきなりMFCを覚えたほうが楽でしょうか?


516 名前:デフォルトの名無しさん :04/11/12 03:06:41
MFCのソースを読めばよし。


517 名前:デフォルトの名無しさん :04/11/12 03:39:12
>>498 はスルーでつか?

518 名前:デフォルトの名無しさん :04/11/12 03:49:04
>>517
あー WM_GETDLGCODE じゃだめか。


519 名前:デフォルトの名無しさん :04/11/12 03:52:42
WM_KEYDOWNのwParamじゃだめなん?

520 名前:デフォルトの名無しさん :04/11/12 03:55:20
>>515
MFC覚えた方が楽かも知れんが、そのコードを理解しながら
書いたんなら、そのまま一本位 API でプログラム書いてみたら。
基礎を勉強することは悪いことではない。


521 名前:デフォルトの名無しさん :04/11/12 04:03:14
>>515
うっかり消しただけかもしらんが、ChildのhBufferをDeleteしてないよ。
それによってhBitKuroのSelectが2回目以降失敗しているのではないかな?

522 名前:デフォルトの名無しさん :04/11/12 04:17:12
左右にスクロールできて、複数のボタンを配置できるスライダを作りたいと思い、
カスタムコントロールについて調べてみたんですが、これは
・所定の位置にウィンドウを作る
・ボタン、スライダのグラフィックを自作する
・カスタムコントロール用のプロシージャにて、マウスクリックのメッセージを受け取ったら
 その時の位置に応じて動いた場合の動作を決定する。つまりボタンの位置を常に把握し
 位置関係の判定を全部やらなくてはならない
という方針で良いのでしょうか?もっと効率良い方法があるのならご教授頂ければ幸いです。

イメージとしてはこんなカンジです。
・スライダをクリックしてドラッグした場合:
+----+----+----+----+----+----+----+----+
0 5 10 15 20 25 30 35 40
-+----+----+----+----+----+----+----+----
5 10 15 20 25 30 35 40
(左へ4メモリスクロールさせた場合。右に隠れていた4つの目盛りが現われる)
・ボタンをクリックしてドラッグした場合:(ボタン:*とする。複数存在可能)
+----+----+--*-+----+-*--+--*-+----+----+
↑を左へクリック&ドラッグした場合
+----+-*--+----+----+-*--+--*-+----+----+
     ↑ここへ動く

523 名前:デフォルトの名無しさん :04/11/12 04:23:31
猛烈にずれた…orz
+----+----+----+----+----+----+----+----+
0   5   10  15  20  25   30   35  40
-+----+----+----+----+----+----+----+----
 5   10   15  20  25   30   35  40

+----+----+--*-+----+-*--+--*-+----+----+
          ↑を左へクリック&ドラッグした場合
+----+-*--+----+----+-*--+--*-+----+----+
     ↑ここへ動く

今度こそうまくいくかな(´・ω・`)

524 名前:デフォルトの名無しさん :04/11/12 04:55:51
その方針でいいです

525 名前:522-523 :04/11/12 05:21:18
>>524
ありがとうございました。面倒そうだなぁ…(汗)

526 名前:デフォルトの名無しさん :04/11/12 09:02:16
スレッドについて質問
以下を実行する:
int main(void) {
DWORD dwThreadId;
LPTHREAD_START_ROUTINE lpStartAddress = ThreadFunction;
for ( DWORD i = 0 ; i < 2; i++ ) {
::CreateThread(
NULL,// セキュリティ
0,// スタックの大きさ
lpStartAddress,// 開始する住所
&i,// パラメター
0,// スレッドの状態
&dwThreadId// スレッドID
);
}
}
// スレッド函数
DWORD ThreadFunction(LPVOID pParameter){
DWORD* pdwInteger = (DWORD*) pParameter;
TRACE( "%u\n", *pdwInteger );
return 0;
}
これで,
ThreadFunction(0)
ThreadFunction(1)
が実行されることを期待したいけど,なぜか
ThreadFunction(1)
ThreadFunction(1)
が実行される.
どうしてなん?


527 名前:デフォルトの名無しさん :04/11/12 09:05:21
>>526
CreateThread() した瞬間に新しいスレッドが走り出すわけではないか
ら。つーか、最近同様の質問を見た覚えがあるぞ…



528 名前:526 :04/11/12 09:07:11
>>527

スレッドをどのタイミングで走るわけ?

また,俺の意図どおりに動かすにはどうしたらええん?

529 名前:デフォルトの名無しさん :04/11/12 09:15:20
知ったこっちゃねえ

530 名前:デフォルトの名無しさん :04/11/12 09:16:11
>>528
最初のスレッドが情報を取得したことを親スレッドに何らかの方法で通知する。
親スレッドはそれを受けてから次のスレッドを起動する。

531 名前:デフォルトの名無しさん :04/11/12 09:17:28
>>520
ありがとうございます。頑張ってみます。
>>521
が正解でした。
各入門書や入門ページで口を酸っぱくして言われている、
「必ずGDIオブジェクトを削除しなければならない」
の意味がやっと分かりました。


532 名前:デフォルトの名無しさん :04/11/12 09:21:55
>>526
> &i,// パラメター

の説明をしてもらおうか。

>>531
> 「必ずGDIオブジェクトを削除しなければならない」
> の意味がやっと分かりました。

たぶんまだ分かってないと思う。

533 名前:デフォルトの名無しさん :04/11/12 10:20:31
>>528
作ったスレッドが動き出すのは、少なくとも、最初のコンテキストスイッ
チよりは後だろうよ。

そもそも、自動変数のアドレスをスコープを越える可能性のある関数に
渡しちゃダメでしょ。

一番簡単なのは、
CreateThread:
&i,==>reinterpret_cast<void*>(i),

ThreadFunction:
TRACE( "%u\n", *pdwInteger );
==>TRACE("%d\n", reinterpret_cast<int>(pParameter));


534 名前:デフォルトの名無しさん :04/11/12 12:48:41
>>501
そのコードは移植性ないと思うんだが
VC++だとインクリメントの順番が副作用完了点を挟まなくても
別途保証されてたりするのか?

535 名前:デフォルトの名無しさん :04/11/12 12:53:02
>>534
されてないけど、501みたいなへたれコードは誰も書かないから問題ないよ。
遅いし。

536 名前:デフォルトの名無しさん :04/11/12 13:31:40
いつもお世話になっております
UpdateLayeredWindowに関する質問です

デスクトップマスコットのようなウィンドウを
UpdateLayeredWindowを使って描画しています
αチャネルを使って透明化する部分は全く問題ないのですが、

既に配置済みのボタンやコンボボックスが
UpdateLayeredWindowで指定したイメージで上書きされてしまい、表示されずに困っています
(実際、配置はされていて、マウスイベントなどは問題なく処理できます)

最終手段として、
コントロール以外をカラーキーで透明化したウィンドウと
イメージをαチャネルで透明化したウィンドウを2枚重ねて動かそうと考えましたが、
他によい方法があるのではないかと思い投稿しました

良い方法をご存知の方がいらっしゃいましたら、よろしくお願いします

537 名前:デフォルトの名無しさん :04/11/12 13:35:43
よく分からんがレイヤードウィンドウにコントロールを子ウィンドウとして配置してるってことか?

538 名前:デフォルトの名無しさん :04/11/12 13:56:46
>>536
UpdateLayeredWindow使ったことないけど
イメージの上にコントロールにWM_PRINT送って描画してもらい、UpdateLayeredWindowするとか。
コントロールがクリックされたら、そのイメージを作ってUpdateLayeredWindowしなきゃならなそうだけど。

539 名前:デフォルトの名無しさん :04/11/12 14:43:14
ある領域に(CreateWindowで作成した領域<TEXT(static)>)に
小さな子ウィンドをたくさん作成し、領域をはみ出るものについては
スクロールバーを出すことで対応したいと思っているのですが、
今、現在、ただ領域に子ウィンドウをたくさん作成すると
領域をはみ出てしまいます。
領域にスクロールバーを作ることはできたのですが・・・。

いい方法ありますでしょうか?

540 名前:デフォルトの名無しさん :04/11/12 14:45:03
>>539
その領域を別Windowにして貼り付ける。

541 名前:デフォルトの名無しさん :04/11/12 14:49:02
その前に作文力をなんとかしろ

542 名前:デフォルトの名無しさん :04/11/12 14:55:16
>>539
WS_CLIPCHILDREN

543 名前:デフォルトの名無しさん :04/11/12 15:37:40
レスありがとうございます。WS_CLIPCHILDRENを指定しましたらうまく行きました。
水平スクロールバーをつけちゃったりなんかしてみたのですが
スクロールバーが移動しません。
最後の質問にしますのでよろしくお願い致します
seru_hyouji_ryouiki = CreateWindow(
TEXT("STATIC"),TEXT("") ,
WS_CHILD | WS_VISIBLE | WS_BORDER |WS_VSCROLL |WS_CLIPCHILDREN,
100,150,
700,300,
hwnd,(HMENU)SERU_HYOUJI_RYOUIKI,
((LPCREATESTRUCT)(lp))->hInstance, NULL
);


scr.cbSize = sizeof(SCROLLINFO);
scr.fMask = SIF_PAGE | SIF_RANGE;
scr.nMin = 0;scr.nMax = 9;
scr.nPage = 2;

SetScrollInfo(seru_hyouji_ryouiki , SB_HORZ , &scr , TRUE);
scr.fMask = SIF_POS;


544 名前:ほんたま :04/11/12 20:16:41
>>482
>ボタンに文章ではなくて、
>ビットマップなどの絵を表示する方法を教えてください。

文章?ボタンに小説書いてんの?

545 名前:デフォルトの名無しさん :04/11/12 20:25:00
いけず

546 名前:デフォルトの名無しさん :04/11/12 21:53:32
>>543
水平スクロールバーはWS_HSCROLLだよね。
WM_HSCROLLメッセージは正しく処理してる?

547 名前:デフォルトの名無しさん :04/11/12 22:51:29
>>543
そのコード、続きはないの?
それだけだと範囲指定しただけで、位置を設定していないし。

548 名前:デフォルトの名無しさん :04/11/12 23:55:10
>534
あのコードはインクリメントの順番が保証されている事を要求しないと思うが。

549 名前:デフォルトの名無しさん :04/11/13 00:24:00
>>548
まとめてインクリメントされるとアボーン。

550 名前:デフォルトの名無しさん :04/11/13 00:31:31
そういう処理系もあるのか。
感謝。

551 名前:デフォルトの名無しさん :04/11/13 01:05:40
>>549
そんな処理系が有ったら恐い。
実例あるのか?

552 名前:デフォルトの名無しさん :04/11/13 01:12:33
つーか言語仕様的に式評価の前か後かに
まとめてインクリメントされるのでは?

int a = 1;
int b = (a++) + (a++) + (a++) + (a++);
だと b = 4 で

int a = 1;
int b = (++a) + (++a) + (++a) + (++a);
だと b = 20 になる。

553 名前:デフォルトの名無しさん :04/11/13 01:33:12
少なくとも C や C++ では、1つの式の中に副作用が発生する項目を
複数含んでいるコードの動作は未定義だったはずだよ。

554 名前:デフォルトの名無しさん :04/11/13 01:34:23
うちはb=15だった
未定義だな

555 名前:デフォルトの名無しさん :04/11/13 01:35:29
タイミングは未規定
結果の値が未定義

556 名前:551 :04/11/13 01:40:04
>552
ほんとだ。
失礼しました。

557 名前:デフォルトの名無しさん :04/11/13 01:40:51
スレ違いだけど参考までに
ttp://www.kouno.jp/home/c_faq/c3.html

558 名前:デフォルトの名無しさん :04/11/13 02:05:09
とにかく >>501 のコードは全然ダメだろ
ポインタに&演算してるし

559 名前:552 :04/11/13 02:11:45
スマソ、たしかに未定義でした。

560 名前:デフォルトの名無しさん :04/11/13 03:19:33
多重バッファ使った
waveOutWriteがうまくいきません。
バッファとバッファの間に、ノイズ(音切れ)が入るのです。
16個のバッファにデータをとりあえずロードさせ再生させても起こります。
バッファに書く速度が間に合ってないわけじゃないみたいです。

2個目以降のバッファは、メッセージ着てから再生では遅いのでしょうか?


とりあえず、ソースの部分貼り付けます。
1個目再生
::waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdr[0],sizeof(WAVEHDR));
::waveOutWrite(m_hWaveOut,&m_pWaveHdr[0],sizeof(WAVEHDR));

while(1)Sleep(1); // とりあえず待機(本来は、随時バッファ読み込み)

MM_WOM_DONE メッセージで、

::waveOutUnprepareHeader(m_hWaveOut,&m_pWaveHdr[m_nRingCursor],sizeof(WAVEHDR));
m_nRingCursor = (m_nRingCursor+1) % m_dwRingBufferSize;
::waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdr[m_nRingCursor],sizeof(WAVEHDR));
::waveOutWrite(m_hWaveOut,&m_pWaveHdr[m_nRingCursor],sizeof(WAVEHDR));


メッセージのコールバックは、関数タイプです。


561 名前:デフォルトの名無しさん :04/11/13 04:11:31
>>560
>2個目以降のバッファは、メッセージ着てから再生では遅いのでしょうか?

遅いよ。
用意したバッファは全部あらかじめ書き込んでおいて、
コールバックで使い終わったバッファに次のデータを用意して、
再び書き込む。

全部のデータを再生し終わるまで延々と繰り返す。
が、基本。
ちなみに、最低3個以上のバッファを作ることが推奨されているね。


562 名前:560 :04/11/13 13:41:12
>>561
いけました。
Writeの内容解釈間違えてた。
Writeって、書き溜め(バッファ)できたんですね。
ありがとうございます。

563 名前:デフォルトの名無しさん :04/11/14 00:34:09
CreateWindow()のスタイルBS_OWNERDRAWでWM_MEASUREITEMが発生すると書いてあったのですが発生している気配がありません。
どうしてでしょう?

CreateWindow(
TEXT( "BUTTON" ),
TEXT( "" ),
WS_CHILD | BS_OWNERDRAW,
0, 0, 200, 100,
hWnd,
(HMENU)1,
hInstance,
NULL
);

......

switch( msg ){
case WM_MEASUREITEM:
MessageBox( hWnd , TEXT("aaa") , TEXT("bbb") , MB_OK );
break;
}

564 名前:デフォルトの名無しさん :04/11/14 00:41:25
とりあえずmessageboxを確認に使うのをやめなさい

565 名前:デフォルトの名無しさん :04/11/14 00:45:05
(0,0) の位置にあったウィンドウに、
以下の機能がついています。

・チェックボックス
・入力欄

入力欄のところに実行した瞬間、文字列を転送するプログ
ラムを考えているのですが、どんな関数が必要になってき
ますか?
WindowFromPoint()は必要になるだろうと思ったのですが、
それ以上がいくら調べても分かりません。
入力欄のコントロールIDを得る関数があればいいのかなぁ
とか、色々考えて検索ずっとしてるのですが、そんなのないし・・・

これから先、検討がつきません。
どなたかお助けを・・・ M(._.)m


566 名前:デフォルトの名無しさん :04/11/14 00:49:05
>>564
どのような、確認の方法がよいでしょうか?

567 名前:デフォルトの名無しさん :04/11/14 00:50:53
>>566
AllocConsole

568 名前:デフォルトの名無しさん :04/11/14 00:59:27
>>565
SetWindowText

って既出?


569 名前:お助けお願いm(_ _)m :04/11/14 01:29:03
どなたか詳しい方教えていただけないでしょうか?
WindowsXPではGetSystemMetricsで検出できるのですが、
Windows2000でシャットダウン中を検出する事は可能でしょうか?


570 名前:デフォルトの名無しさん :04/11/14 01:31:05
>>568
それ使おうと思ったんすけど、
入力欄のコントロールIDが、同じプログラム内で
作ったものじゃないんで、わかんないのが前提なんっす・・・
レスありがとう

571 名前:デフォルトの名無しさん :04/11/14 01:50:57
>>567
ありがとうございます。
先ほどのプログラムを下のように書き直してみました。
ほかのところでの文字の表示は成功したのですがやはりWM_MEASUREITEMのところは通っていないような気がします。
それともAllocConsoleの使い方が間違っているのでしょうか?

CreateWindow(
TEXT( "BUTTON" ),
TEXT( "" ),
WS_CHILD | BS_OWNERDRAW,
0, 0, 200, 100,
hWnd,
(HMENU)1,
hInstance,
NULL
);

AllocConsole();
hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE );

......

switch( msg ){
case WM_MEASUREITEM:
WriteFile( hStdOutput , TEXT( "aaaa" ) , 4 , 0 , NULL );
break;
}


572 名前:デフォルトの名無しさん :04/11/14 02:10:55
>>571
CreateWindowの前にAllocConsoleしたほうがいいと思うけど。

ていうかBS_OWNERDRAWでそのメッセージが送られるってどこに書いてあるの?

573 名前:デフォルトの名無しさん :04/11/14 02:17:16
WM_DRAWITEMの間違いだったりして。イヤン

574 名前:デフォルトの名無しさん :04/11/14 02:23:44
コピペ。

BS_OWNERDRAW
オーナー描画ボタンを作成します。
オーナーウィンドウは、ボタンが作成されると WM_MEASUREITEM メッセージを受け取り、
ボタンの外観が変わると WM_DRAWITEM メッセージを受け取ります。
他のボタンスタイルと組み合わせることはできません。

575 名前:デフォルトの名無しさん :04/11/14 02:24:34
Win32 API プログラマーズリファレンスには、
オーナー描画ボタンを作成します。オーナー ウィンドウは、 ボタンが作成されるときに
WM_MEASUREITEMメッセージを受け取り、 ボタンの外観が変わったときにはWM_DRAWITEMメッセージを受け取ります。BS_OWNERDRAWスタイルは、 ほかのボタン スタイルと組み合わせることはできません。

と書いてあります。


576 名前:デフォルトの名無しさん :04/11/14 02:25:52
>>575
CreateWindowのBS_OWNERDRAWの説明です。

577 名前:デフォルトの名無しさん :04/11/14 02:40:51
俺のにはこれしか書いてない

BS_OWNERDRAW
Creates an owner-drawn button. The owner window receives a WM_DRAWITEM message
when a visual aspect of the button has changed. Do not combine the BS_OWNERDRAW
style with any other button styles.



578 名前:デフォルトの名無しさん :04/11/14 02:58:00
>>563
試してみたけど、うちの環境でも WM_MEASUREITEM は送られてこないっすよ。
WM_MEASUREITEM の説明にも、そのようなことは書いてないし…。

579 名前:デフォルトの名無しさん :04/11/14 02:58:34
>>565
やりたいことがよく分からないけど、
ウィンドウハンドルは WindowFromPoint() や ChildWindowFromPoint() で取得、
IDは GetDlgCtrlID() で取得するってのはだめっすか?

580 名前:デフォルトの名無しさん :04/11/14 02:59:04
>>569
WM_ENDSESSION で検出するのはだめっすか?

581 名前:デフォルトの名無しさん :04/11/14 04:58:37
メインウィンドウのようにタイトルバーや枠つきのエディットコントロール作りたいのですが教えてください

582 名前:デフォルトの名無しさん :04/11/14 05:29:43
>>579
う〜ん、なんとか成功させてお礼を言いたいとこだったけど、
もう今日は限界・・・合歓いっす。
レスありがとう。わずかな希望が見えた気がしたでつ。


583 名前:デフォルトの名無しさん :04/11/14 06:38:17
>>565
IDがなくともウィンドウハンドルがあれば十分だと思うが。

584 名前:デフォルトの名無しさん :04/11/14 07:23:12
>>569 以下は前にどっかで見たやつのコピペだけど
Windows 2000 ですが、実際にやって調べてみました。
HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
の Reason Setting と Shutdown Setting が変化するようです。
(どちらも DWORD 値)

シャットダウン
 Shutdown Setting=0x00000002
 Reason Setting=0x00000005
再起動
 Shutdown Setting=0x00000004
 Reason Setting=0x00000005
ログオフ
 Shutdown Setting=0x00000001
 Reason Setting=0x00000000

ちなみに、regmon という
レジストリ操作を監視するツールを使って調べました。


585 名前:デフォルトの名無しさん :04/11/14 07:24:37
続き

HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
Shutdown SettingとReason Settingのキーは無いようです。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
には存在していましたので、こちらで試しています。

OSのシャットダウン時の処理なので、ちゃんと動くまで再起動しまくって
いるので時間かかるー(笑)



キーさえ分かればきっと情報があるはずだ、ということで検索してみた。
ttp://www.microsoft.com/windows2000/techinfo/reskit/en-us/regentry/36031.asp
これによると Shutdown Setting はあくまでダイアログでの選択値のようっす。
Reason Setting の方は見つからず。


586 名前:デフォルトの名無しさん :04/11/14 11:09:18
VFWを使って画像処理ソフトを作っているのですが、フレームレートが15FPS以上に上がってくれません
他のソフトを使えば、30FPS出ているので、カメラ・PCの性能は十分あります
これは、VFWの仕様でしょうか?
それとも、プログラムのコードが問題あるのでしょうか?

587 名前:デフォルトの名無しさん :04/11/14 11:12:02
>>586
capPreviewRateやCAPTUREPARMSのdwRequestMicroSecPerFrameでの設定値を変えても、
capSetCallbackOnFrameで設定したコールバック関数の呼び出しタイミングが15FPSを切ってるという話です

588 名前:デフォルトの名無しさん :04/11/14 11:24:28
static TCHAR strFile[MAX_PATH];
LPSTR strText;
(中略)
GetOpenFileName(&ofn);
hFile = CreateFile(
   (LPCTSTR)strFile , GENERIC_READ , 0 , NULL ,
   OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL
);
if (hFile == INVALID_HANDLE_VALUE) break;

strText = (LPSTR)malloc(GetFileSize(hFile , NULL));
ReadFile(hFile , strText , GetFileSize(hFile , NULL) , &dwBytes , NULL);
CloseHandle(hFile);
SetWindowText(hwnd , strFile);
SetWindowText(edit , strText);
指定して読み込んだパスのファイルを開いて、
エディタ(edit)に書き出すコードのつもりなのですが、
エラーなしですが、何も書き出せません。パスまでは読み込める状態です。
間違っていそうな部分を上げましたが、情報不足でしたらすみません。
お願いします。

589 名前:デフォルトの名無しさん :04/11/14 12:00:46
WM_SETTEXT

590 名前:デフォルトの名無しさん :04/11/14 13:30:11
malloc の戻り値くらいチェックしろや


591 名前:デフォルトの名無しさん :04/11/14 15:08:21
問題解決とは直接関係ないがちゃんとナル文字の分もバッファを取れ。
DWORD dwFileSize;
・・・
dwFileSize = GetFileSize(hFile , NULL);
strText = malloc(dwFileSize + 1);
ReadFile(hFile , strText , GetFileSize(hFile , NULL) , &dwBytes , NULL);
strText[dwFileSize] = '\0';

ところでchar/TCHARのハンガリアンはstrじゃなくてsz。どうでもいいことだが。

592 名前:588 :04/11/14 15:21:48
>590
すみません。事故解決しますた。
edit がstatic になってませんでした。
NULLではなかったっぽいです。
ご迷惑かけました。

593 名前:588 :04/11/14 15:31:00
>591
補足かたじけないです。
WindowsSoftのコードを参考にしたのですが。
それにしてもWinプラは型がややこしい。。。

594 名前:デフォルトの名無しさん :04/11/14 16:13:53
mallocの戻り値、ReadFileの読み込みサイズくらいはチェックしましょう。

595 名前:デフォルトの名無しさん :04/11/14 17:31:20
ちょっと質問します。

自分のウィンドウに来たメッセージ(マウスボタンの押下など)を
裏に隠れているウィンドウに伝える方法ってありますか?

SetWindowRgnでウィンドウに穴を開けると
穴の部分のウィンドウメッセージは裏にいるウィンドウに伝わりますが
穴が空いてない部分でも同じようにメッセージを伝えたいのです。


596 名前:デフォルトの名無しさん :04/11/14 18:22:46
Mac のアプリを Win に移植したいのですが
ChasingArrows (ぐるぐる回転する矢印)を絵画するAPIはどれに相当するのでしょうか。

Macの場合はこれです。
Declare Function DrawThemeChasingArrows Lib "CarbonLib" (inBounds as Ptr, index as Integer, state as Integer, eUPP as Integer, userData as Integer) as Integer

597 名前:デフォルトの名無しさん :04/11/14 18:33:20
絵画(かいが?)するAPIってなんだよ。

598 名前:デフォルトの名無しさん :04/11/14 18:36:53
描画でしょ(w

599 名前:デフォルトの名無しさん :04/11/14 18:37:23
VC++でアプリ作ってるんですが、
CreateAbout?AboutWindow?Aboutを表示する関数があった気がしたんですが
誰か分かる人居ませんか?
どっかにAboutが入ったAboutを表示する関数があった気がして・・
無いようでしたら、おとなしくDialogで作ります。

600 名前:デフォルトの名無しさん :04/11/14 18:39:00
>>595
例えば、上にあるウィンドウが子ウィンドウならプロシージャに
SendMessage(GetParent(hWnd),msg,wParam,lParam);
って感じに、そのまま親ウィンドウにスルーしつつ、自分の処理もするとか
”伝える”って事は、自分で作ったウィンドウで隠れた場合だよね
親子関係じゃ無くても、下にあるウィンドウのハンドル取得して、同じようにすれば良い

VFW詳しい人って居ないのかな…

601 名前:デフォルトの名無しさん :04/11/14 18:48:11
プログラミングwindowsという本を見ていてどうしてもわからなかったのですが
static TCHAR szAppName[] = TEXT ("SysMets1");という一文があったのです。
今までヨンたほかのwindowsプログラミングの書籍ではTEXT("")という表記がまったく使われていなかった(static TCHAR szAppName[] = "SysMets1";っぽい感じ)上に、プログラミングwindowsという書籍の索引を引いてもまったく解説されておらず困っています。
このTEXT("")というのはいったいどういう意味なのでしょうか?
よろしくおねがいします。

602 名前:デフォルトの名無しさん :04/11/14 18:50:25
>>601
嘘つけ。第2章で出てくるだろ。<プログラミングWindows(上)

603 名前:デフォルトの名無しさん :04/11/14 18:51:51
>>597-598さま、大変失礼しました。絵画ではなく描画です。

Mac のアプリを Win に移植したいのですが
ChasingArrows (ぐるぐる回転する矢印)を描画するAPIはどれに相当するのでしょうか。

Macの場合はこれです。
Declare Function DrawThemeChasingArrows Lib "CarbonLib" (inBounds as Ptr, index as Integer, state as Integer, eUPP as Integer, userData as Integer) as Integer

604 名前:デフォルトの名無しさん :04/11/14 18:52:38
>>601
その本に馬鹿丁寧に書いてあるから
絶対読み落とすはずがない。

605 名前:デフォルトの名無しさん :04/11/14 18:53:39
>>602
立ち読みで一部だけ読んだとか?
律儀にTEXTマクロ使ってる本ってあんまり見ないな…ネットでも少ないけど

606 名前:デフォルトの名無しさん :04/11/14 18:55:36
>>603
日本語の「たくわん」に相当する英語を教えてください

607 名前:デフォルトの名無しさん :04/11/14 18:56:20
>>595
Transparent

608 名前:デフォルトの名無しさん :04/11/14 18:58:16
>>606さま、
Pickled Japanese radishだそうです

609 名前:デフォルトの名無しさん :04/11/14 19:00:47
>>595
この辺でぐぐってみそ
WS_EX_TRANSPARENT
WS_EX_LAYERED
setLayeredWindowAttributes



610 名前:デフォルトの名無しさん :04/11/14 19:26:25
>>599
ShellAbout()のことか?
ただしMicrosoftの文字が必ず入る。

611 名前:デフォルトの名無しさん :04/11/14 19:56:36
>>610
ありがとうございます。

612 名前:デフォルトの名無しさん :04/11/14 19:58:03
下げ忘れた・・・すまそん・・(´・ω・`)

613 名前:デフォルトの名無しさん :04/11/14 20:04:46
Chasing Arrowsコントロールとはこれのことです。
http://images.google.com/images?q=tbn:EruxJ3ZCH6cJ:developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/art/chasingarrows.gif
このコントロールを任意の座標に描画するAPIを探しています。宜しくご教授お願いします。

614 名前:デフォルトの名無しさん :04/11/14 20:07:04
>>613
Windowsのシステムカーソルにそんなものはない。

LoadCursorのドキュメントから用途にあったものを探せ。
OSが変わればカーソルも変わる。

615 名前:デフォルトの名無しさん :04/11/14 20:07:37
>>613
Windowsアプリでそれ使ってるアプリあるか?

616 名前:デフォルトの名無しさん :04/11/14 20:10:04
>>615
それがどうした?

617 名前:595 :04/11/14 20:15:27
レスありがとうございました

>>600
”伝える”の意味はそれで合っています
隠れるウィンドウは親子関係にないので、どうすればいいか分からなくなってしまいました
まずは隠れているウィンドウのハンドルを取得する方法を模索してみます

>>607, 609
レイヤードウィンドウについて調べてみましたが
完全に透明にしないとメッセージが裏のウィンドウに届いていませんでした
自分のウィンドウは見せる必要があるので、この方法では駄目でした
言葉が足りず、申し訳ありません


618 名前:デフォルトの名無しさん :04/11/14 20:20:23
>>617
完全な透明にしなくても後ろのウィンドウにメッセージが行くのがTRANSPARENT

619 名前:デフォルトの名無しさん :04/11/14 20:27:26
もしかしてWindowsにはChasing Arrowsコントロールそのものがないでしょうか。
長い処理などをユーザーに待たせる時にマウスカーソルを砂時計に変えるかわりに、
回転する矢印のコントロールをウィンドウに配置して、処理中を知らせる物です。

620 名前:デフォルトの名無しさん :04/11/14 20:30:52
>>619
無いっつってんだろ。

621 名前:デフォルトの名無しさん :04/11/14 20:32:07
ない。砂時計しかない。そこでWin糞とか言ってはいかん。
やる気があるならリソース埋め込んで自前で作れ。

622 名前:595 :04/11/14 20:49:52
WS_EX_TRANSPARENTで無事に目的の事が出来るようになりました
TRANSPARENTをレイヤードウィンドウと勘違いしていました

ありがとうございました


623 名前:デフォルトの名無しさん :04/11/14 20:59:29
>606が素晴らしいヒントを書いたのにねぇ。郷に入りては郷に従うべし。

624 名前:デフォルトの名無しさん :04/11/14 21:00:56
>>595
勘違いしたのは >>609 のせいだな


625 名前:デフォルトの名無しさん :04/11/14 21:02:47
>>623
別に素晴らしくもないと思う。むしろ回りくどくて書いた本人が満足してるだけっつーか。

626 名前:デフォルトの名無しさん :04/11/14 21:04:44
>>625
>>606 == >>623 なんだからそれ以上かまうな

627 名前:デフォルトの名無しさん :04/11/14 21:05:30
OutputDebugStringのような機能を独自で作りたくて
# そのままこれを使うといろんなアプリの出力が混じってしまうので
TCP、プロセス間通信あたりで実装しようかと思っていますが
もっとよい方法、定石、ライブラリみたいなものはあるんでしょうか?

628 名前:デフォルトの名無しさん :04/11/14 21:13:00
>>626
=ではなく==を使う辺りがプログラム板って感じだ

629 名前:デフォルトの名無しさん :04/11/14 21:14:48
>>627
ファイル書き出しが定石じゃないか?


630 名前:623 :04/11/14 21:17:11
>>626
違うよん。この件に関しては漏れは突っ込み入れ損ねたから。

631 名前:595 :04/11/14 21:17:52
>>624
悪いのは自分で >>609 さんは的確な回答を示していました
622の書き方も変なので勘違いがないように訂正させてください

WS_EX_TRANSPARENTをWS_EX_LAYEREDを指定し
SetLayeredWindowAttributesを呼び出したウィンドウ=レイヤードウィンドウに付け加えることで、
自ウィンドウが存在しないかのようにメッセージがすり抜け、裏にいるウィンドウに送られるようになりました

何度も言葉足りずで混乱させて申し訳ありませんでした


632 名前:デフォルトの名無しさん :04/11/14 21:24:01
>>629
それだとODPと同じにはならないし

633 名前:デフォルトの名無しさん :04/11/14 22:08:32
>>627
そういうのを syslog といいます

634 名前:デフォルトの名無しさん :04/11/14 22:16:36
>>606の言いたいことが全然解らん

635 名前:デフォルトの名無しさん :04/11/14 22:20:28
>>634
日本語で「たくわん」に相当する英語 = 存在しない

じゃないか?

636 名前:デフォルトの名無しさん :04/11/14 22:31:57
>>595 >>631
おお、すまそ。
あくまで SetLayeredWindowAttributes と WS_EX_LAYERED が使われていないと、
WS_EX_TRANSPARENT が有効にならないんだということが分かった。

お詫びのしるし
http://www.sutosoft.com/room/archives/000050.html
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp

637 名前:お助けお願いm(_ _)m :04/11/15 01:11:34
>>580
返事ありがとうございます。
残念ながら、その方法ではアプリケーションを終了するタイミングは
取れますが、私の欲しいOSのシャットダウン中であるという情報は
取れませんね。

何はともあれ返事をいただいた事に対して深く感謝いたしますm(_ _)m

638 名前:お助けお願いm(_ _)m :04/11/15 01:14:37
>>584-585
返信ありがとうございます。
まだ試しておりませんので、なんともわかりませんが
まったく手がかりがなかったので参考にさせていただきます。
誠にありがとうございました。m(_ _)m

639 名前:デフォルトの名無しさん :04/11/15 10:32:58
>>77にある他アプリのOLEドラッグ開始の検出方法ってどんなものですか?

640 名前:デフォルトの名無しさん :04/11/15 12:18:52
スパイウェアの開発者ですか?

641 名前:デフォルトの名無しさん :04/11/15 17:08:12
DispatchMessage()の仕様について聞きたいんですけど
このAPIの終了はプロシージャが終了して、そのリターン値を受け取ってから終了する
ってことでいいんですか

642 名前:デフォルトの名無しさん :04/11/15 17:22:54
はい。

643 名前:デフォルトの名無しさん :04/11/15 18:03:00
THX
てことはプロシージャは一つのWinMain()からは
1ループ(メッセージループ)毎に常に1回しか呼び出されないって理解してOKですか

644 名前:デフォルトの名無しさん :04/11/15 18:06:20

すんませんコレ
スルーしといてください

645 名前:デフォルトの名無しさん :04/11/15 20:05:38
メニュー項目に半角の'&'を出したいんですけど、
そのままだと次の文字がアクセラレータキーになっちゃいます。
どしたらいいですか。

646 名前:デフォルトの名無しさん :04/11/15 20:09:14
&&

647 名前:645 :04/11/15 20:13:04
>>646 thxです

648 名前:デフォルトの名無しさん :04/11/15 20:39:36
すいません質問です
コンソールアプリケーションです
GetCurrentDirectoryを使ってパスを取得しています
アプリケーションをダブルクリックで実行させると正しいパスが帰ってくるんですが
他のファイルをドロップして実行させると「C:\Documents and Settings\hogehoge」というパスを取得してしまいます
もちろんアプリケーションはそれとは別のディレクトリですし、ドロップしたファイルも同様です
これはこういう仕様なのでしょうか?


649 名前:デフォルトの名無しさん :04/11/15 20:47:23
>>648
そういう仕様です

650 名前:デフォルトの名無しさん :04/11/15 20:51:12
>>648
シェル (Explorer) から exe ファイルをダブルクリックなりドラッグ・アンド・ドロップなりで起動した際の
カレントディレクトリはどこにも規定されていなかったと思います。

98系だと EXE のパスや開くべきファイルのパス、
NT系だとユーザのホームディレクトリになるんだったかな・・・
実行ファイルのパスを得るためには、GetModuleFileName という API が用意されています。

651 名前:デフォルトの名無しさん :04/11/15 20:52:27
>649,>650
GetModuleFileNameで取得したパスを分解してディレクトリパスを取得して使ってみます
ありがとうございました


652 名前:デフォルトの名無しさん :04/11/15 20:56:21
確かにね、そういう仕様だ罠

なんかM$のデフォ設定きらい
C:はブート用(入れなおせば済むファイル)
D:をミラーリング(消えたらガクブル系)
みたいな管理を徹底的に無視しやがる

653 名前:デフォルトの名無しさん :04/11/15 21:24:08
わざわざGetModuleFileNameつかわなくても
argv[0]に入ってるみたいだけど

654 名前:デフォルトの名無しさん :04/11/15 21:43:12
>653
ああぁっ!

コンソールアプリなのに忘れてましたw

655 名前:デフォルトの名無しさん :04/11/15 22:23:51
こっちでいいのかわかりませんが、教えてください。
VB6でピクチャボックスにGetPixelつかうと、ウィンドウと重なっている場合、
前のウィンドウのピクセルを拾ってしまうんですが、
どうすれば重なって隠れているウィンドウの
ピクセル色が拾えますか?

656 名前:デフォルトの名無しさん :04/11/15 23:10:14
__argvを忘れてやるなよ。


657 名前:デフォルトの名無しさん :04/11/16 00:53:23
__argvはVCローカルなり

658 名前:デフォルトの名無しさん :04/11/16 00:55:28
便乗質問だけど
GetCommandLineで得られる文字列にも「実行ファイルのパス」が含まれてますが
これが確実にフルパスである、という保証はありますか?

GetCommandLineとGetCurrentDirectoryとGetModuleFileNameとを比較してみたら
引数の順序や戻り値の仕様がバラバラで精神衛生上アレだと思った

659 名前:デフォルトの名無しさん :04/11/16 01:59:27
全然ありませんが。>保証
引数や戻り値はまぁあれだ、作ってるやつ(チーム)がそれぞれ違ったりするんで許してやれ。

660 名前:デフォルトの名無しさん :04/11/16 02:45:50
>>658
俺が試してみたら、ファイル名だけだったよ

ファイル選択ダイアログとかはGetCurrentDirectoryで良いけど、
実行ファイルのパスが知りたいならGetModuleFileName使うが宜しい
コマンドライン引数を任意のタイミングで知りたいなら、GetCommandLineを使えばよい

661 名前:デフォルトの名無しさん :04/11/16 03:50:23
>>655
Windows 側でイメージは保持してくれません。
重なって隠れているピクセルは拾えません。

別のウィンドウが上に重なったら、その下にあるウィンドウのイメージは壊れます。
別のウィンドウの下になっている部分が表示される時には WM_PAINT
が送られますので自分で書かなければいけません。
よって、画面上にあるピクセルを取得しても別のウィンドウが重なっている時は
重なっているウィンドウのピクセルが返ってきます。
これを回避するにはあらかじめ画面に表示するイメージを別に作っておくしかありません。
「オフスクリーンビットマップ」で調べてみてください。

VB には他に逃げ道があるのかもしれませんが。


662 名前:デフォルトの名無しさん :04/11/16 07:34:36
>>660
__argc, __argvは、VC6.0以降は非サポートなの?

663 名前:デフォルトの名無しさん :04/11/16 09:49:03
指定したプロセスに対して,
どんなスレッドが起こされているのか
リアルタイムで表示するような
アプリケーションてないですかね?


664 名前:デフォルトの名無しさん :04/11/16 09:59:48
spy++

665 名前:デフォルトの名無しさん :04/11/16 10:00:49
リヤルタイムじゃないかもしれない

666 名前:デフォルトの名無しさん :04/11/16 10:21:53
リストビューのアイテムがクリックで選択されたと同時に
そのアイテム番号(リストの行)を拾いたいのですが、
なんかメッセージ飛んできますか?

667 名前:デフォルトの名無しさん :04/11/16 10:43:35
>>666
親へ WM_NOTIFY で NM_CLICK

http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listview/notifications/nm_click_listview.asp?frame=true

668 名前:デフォルトの名無しさん :04/11/16 10:57:51
>>667
ありがとん。

669 名前:655 :04/11/16 11:40:09
>>661
わかりました。
ありがとうございます。

670 名前:デフォルトの名無しさん :04/11/16 17:38:25
すいません。質問させてください。
Susieのプラグインで

HLOCAL *pHBm : ビットマップデータ本体のメモリハンドルが返される

とあるんですが、メモリの内容を見るにはどうすればいいですか?

671 名前:デフォルトの名無しさん :04/11/16 17:38:56
すいません。VBスレと間違えました。

672 名前:デフォルトの名無しさん :04/11/16 18:16:21
>>670
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_locallock.htm
別にAPIスレはC/C++限定じゃないが。

673 名前:デフォルトの名無しさん :04/11/16 19:20:55
文字リテラルは_Tまたは_TEXTを使用して定義する(_TEXT("heloo")という具合)と書いてあったのですが、実際のコードに_TEXTを使用するとコンパイルエラーになってしまいます。
サンプルプログラムを見るとTEXT("")という形で_が使われていなかったりして書いてあることと実際がぜんぜん違うじゃないかと困っています。
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, _TEXT ("Hello, Windows 98!"), _TEXT("HelloMsg"), 0) ;
return 0 ;
}
本に書いてあるとおりならこれで間違いないはずなのですがどうしてもコンパイルできないのはPCの問題でしょうか?

VC++6.0使用してます

674 名前:デフォルトの名無しさん :04/11/16 19:31:50
#include <tchar.h>

675 名前:デフォルトの名無しさん :04/11/16 19:34:23
TEXT() や __TEXT() を使いましょう。
_T() や _TEXT() を使いたければ、tchar.h 等をインクルードしましょう。

676 名前:デフォルトの名無しさん :04/11/16 19:40:27
/*--------------------------------------------------------------
HelloMsg.c -- Displays "Hello, Windows 98!" in a message box
(c) Charles Petzold, 1998
--------------------------------------------------------------*/

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;

return 0 ;
}

677 名前:デフォルトの名無しさん :04/11/16 19:40:53
>>674-675
わかりやすい回答ありがとうございます。
御礼をしておいてまた質問するもの失礼かと思いますが、#include <tchar.h> と_TEXTの組み合わせか、TEXT()を普通に使用するとではどちらが望ましいのでしょうか?

678 名前:670 :04/11/16 19:40:54
>>672
ありがとうございます。
ロックを解除したいのではなく、中身を見たいんですが・・・

679 名前:デフォルトの名無しさん :04/11/16 19:50:49
バカキター

680 名前:デフォルトの名無しさん :04/11/16 20:06:48
>>655
AutoRedraw=Trueしれ

681 名前:デフォルトの名無しさん :04/11/16 20:25:13
>>678
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_locallock.htm

682 名前:デフォルトの名無しさん :04/11/16 20:32:09
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        >>678
/     ∩ノ ⊃  ヽ      J
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

683 名前:670 :04/11/16 20:33:28
>>682
つりじゃないんですけど・・・

684 名前:デフォルトの名無しさん :04/11/16 20:59:36
>>677
他のヘッダやマクロを使う特別な理由がなければ、TEXT() でいいと思うよ。

685 名前:デフォルトの名無しさん :04/11/16 21:02:05
>>678
戻り値がメモリへのポインタなんだから、それを取得して好きに読めばよい。
取得したポインタの中身を読む方法が分からないんだとしたら、スレ違い。

686 名前:デフォルトの名無しさん :04/11/16 22:17:18
>>684
どうもですー。


687 名前:デフォルトの名無しさん :04/11/16 23:49:36
Str系APIってMBCS考慮するんだな。
知ってた?

688 名前:デフォルトの名無しさん :04/11/17 03:02:04
Win32APIで、メニューアイテムのテキストを収得、変更する方法はありますか

689 名前:デフォルトの名無しさん :04/11/17 04:15:49
API で出来なくてどうやってメニューをハンドリングしろと?
GetMenuString
ModifyMenu


690 名前:デフォルトの名無しさん :04/11/17 07:53:28
フックプロシージャをクラスのメンバー関数として持ちたいんですが、
staticで定義されたフックプロシージャにthisポインタを渡す方法は
何かないでしょうか?

691 名前:デフォルトの名無しさん :04/11/17 08:40:32
>>690
SetWindowLong/GetWindowLong

692 名前:デフォルトの名無しさん :04/11/17 09:40:20
>>690
自前の永続変数にthisアドレスをコピー。

693 名前:デフォルトの名無しさん :04/11/17 09:42:11
>>691
回答ありがとうございます。
あと質問の際の情報が不足していました申し訳ありませんでした。
お教えいただいた対策は、WH_CALLWNDPROC等のプロシージャ側にWindowHandleが送られて
くるタイプのプロシージャに対しては有効なのですが、今回メンバー関数に入れたい
フックプロシージャは、WH_KEYBOARD、WH_MOUSEなのでプロシージャにWindowHandleは
送られてきません(WH_MOUSEは送られてきたかも..)。

こういった場合の対策法は何かありませんでしょうか?



694 名前:690=693 :04/11/17 09:46:42
>>692
やっぱり、その方法しかないんでしょうか..

695 名前:690 :04/11/17 10:01:18
>>693
自己レスです。
よく考えたらHookだと目的のWindow以外のHandleも受け取るので無理ですね
やっぱり>>692の方法が現実的なんでしょうか?

とりあえず、>>692の方法で組んでみます。他にスマートな方法を知っている方が
居られましたらお教えください。

>>691,>>692
ありがとうございました。


696 名前:デフォルトの名無しさん :04/11/17 10:21:08
>>691はフックプロシージャをウィンドウプロシージャと読み違えて回答し、
>>690は見当違いな>>691の回答に丁重な謝辞を述べ、
まともな回答をした>>692を粗略に扱った、に10000ペソ。

697 名前:デフォルトの名無しさん :04/11/17 10:23:03
>>693は照れ隠しにスマートな方法はないか?
と全く心のこもっていないダミーの質問をして、己の短慮を誤魔化そうとした、に10000ペソ。

698 名前:デフォルトの名無しさん :04/11/17 12:59:47
実行した後、自分自身が消えるような実行ファイルはどのような
感じで作ったらいいですか?

699 名前:デフォルトの名無しさん :04/11/17 13:11:26
>>698
>ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。

だそうだが、それは真っ当な用途のための質問かい?

700 名前:デフォルトの名無しさん :04/11/17 13:12:05
はい、そうです。

701 名前:デフォルトの名無しさん :04/11/17 13:38:57
ま、いいや

実行ファイルのパス取得して、別プロセス起動後、自アプリを終了
ググれば、サンプルはいくらでもあるよ

NT系限定だけど、
MoveFileExでMOVEFILE_DELAY_UNTIL_REBOOTフラグを指定すれば、
再起動時に削除できる

702 名前:デフォルトの名無しさん :04/11/17 14:24:45
>>699
アンインストーラ自身とかは自殺してくれないと困るだろ。

703 名前:デフォルトの名無しさん :04/11/17 14:43:27
>>702
「アンインストーラを作りたいのですが・・・」
みたいに聞いてくれたら、
余計な突っ込みは入れないんだけどね

704 名前:デフォルトの名無しさん :04/11/17 15:01:15
MSIとか、InstallWizardとかググればいいものを。
わざわざ自分でインストーラ作るのは車輪の再発明。

705 名前:デフォルトの名無しさん :04/11/17 15:13:06
>>700-701
CreateFileでFILE_FLAG_DELETE_ON_CLOSEを指定する方法もある。

706 名前:デフォルトの名無しさん :04/11/17 15:27:50
>>698
バッチファイルを作って、ループを回しそこで削除すればいい。
最後にバッチファイル自身を消す。


707 名前:デフォルトの名無しさん :04/11/17 15:30:11
echo off
:start
del ほげほげ.exe
if exist ほげほげ.exe goto start:
del 自分自身.bat

708 名前:デフォルトの名無しさん :04/11/17 15:30:30
前にここで聞いたときは
1) rundll32で削除用DLLを起動
2) ヒープ上に3)、4)をやるコードをコピーしてジャンプ
3) 自分自身のロックをFreeLibraryで解放
4) 自分自身を削除
という方法を教わった。

で、XPSP2 on Athlon64にしたらヒープにジャンプしたところで
エラーが発生しましたとさ(チャンチャン

709 名前:デフォルトの名無しさん :04/11/17 16:35:20
ヒープにコードを書くのは、いまや非合法という扱いになったね。
ま、元々そうだったけど明確に弾かれるようになった。

SP2のデータ実行防止(DEP)機能なのか?
それとも多くのバイナリを/GSオプションでリコンパイルした結果?

710 名前:デフォルトの名無しさん :04/11/17 16:50:45
virtualallocならいいの?

711 名前:デフォルトの名無しさん :04/11/17 17:06:30
初めて質問します。

DirectXで描画している他人のウィンドウに落書きしたいのですが、
DirectXの描画速度が速いためにちかちかしてしまいます。

負けじとこちらもDirectXで描画してみたのですが、
やっぱりちかちかしてしまいました( つД;)

他人のDirectX描画をクリッピングとかできたりするんでしょうか?

テスト・開発環境はWinXP SP2+VC7+DirectX9cです

712 名前:デフォルトの名無しさん :04/11/17 17:34:34
>>709-710
原因はDEPだった。VirtualAllocでPAGE_EXECUTE_READWRITEを
指定したメモリを確保するように変更して解決

713 名前:デフォルトの名無しさん :04/11/17 20:09:35
タスクマネージャが立ち上がったら終了するようなウィスルを作りたいのですが、
どうすればいいですか?

714 名前:デフォルトの名無しさん :04/11/17 20:12:12
タスクマネージャ.exeを事前にすり替えrp

715 名前:デフォルトの名無しさん :04/11/17 20:13:43
がんばってウィスれ!

716 名前:デフォルトの名無しさん :04/11/17 21:02:20
正攻法ならグローバルフックとpsapiを調べれ

717 名前:デフォルトの名無しさん :04/11/17 21:07:41
>>711
DirectXの描画速度は99%無関係だと思う


718 名前:デフォルトの名無しさん :04/11/17 22:52:16
>>711
リージョン使って落書きの形のウィンドウを作って、
そのDirectXなウィンドウの上に置くとか。

719 名前:711 :04/11/17 23:38:53
>>718

ウィンドウを重ねて(TOPMOST)で作成しても、
落書きしたい相手のウィンドウが上書きしてくるんです。
(言い忘れましたが、落書きしたい相手というのがゲームなので少し特殊なのかもしれません…)

DirectXでTOPMOSTよりも前面に上書きするオプションがあるかどうかなど当たってみます。


720 名前:デフォルトの名無しさん :04/11/18 00:58:15
>>711
サーフェスぶんどってそこに描画ならできたはず。
詳しくは知らないのであとは調べてくれ。

721 名前:デフォルトの名無しさん :04/11/18 01:30:48
>>719
フルスクリーンだと>>720しないときついけどウィンドウモードならリージョンでも
いけるはずなんだけどなぁ。nVidiaのカードだとドライバーのバージョンでいろいろ
挙動が変わったと思う。Layerd Windowも試してみるといいかも。

722 名前:デフォルトの名無しさん :04/11/18 01:42:01
IHTMLDocument2のwriteでxmlデータを出力してみたのですが、どうにもxmlとして解釈してくれません。
なんとかxmlとして表示させられないでしょうか?

723 名前:デフォルトの名無しさん :04/11/18 01:42:25
>689
できました。づもありがとうございます。

724 名前:デフォルトの名無しさん :04/11/18 01:50:19
副スレッドを立てて処理をする時
一方のスレッドが参照のみを行う(NULLでない間ループ等)場合でも
クリティカルセクションオブジェクトというのは作る必要があるんでしょうか?

725 名前:デフォルトの名無しさん :04/11/18 01:58:47
ない

726 名前:デフォルトの名無しさん :04/11/18 04:12:19
たとえば状態の変化が
NULL 5秒
NULL 5秒
!NULL 5秒
NULL 5秒
NULL 5秒
ポーリング感覚が10秒だったら検出出来ない罠

727 名前:デフォルトの名無しさん :04/11/18 04:34:50
>>724
ポインタがNULLかどうかなら大丈夫だけど
一般にCPUが一命令で処理できないようなデータの参照は駄目。
あと最適化でNULL突っ込むタイミングが変わらないとも限らないから
volatile指定しておくといいかも。

728 名前:デフォルトの名無しさん :04/11/18 15:19:28
他から紹介されてここにたどりつきました
個々のプログラムが使用するメモリー容量を取得したいのですが・・・
(タスクマネージャのプロセスタブで表示できる仮想メモリサイズ)
APIはどれを使えばいいのか知りたいのですが解るかた教えてください。


729 名前:デフォルトの名無しさん :04/11/18 15:53:29
serviceを作っています。
ある条件が真になるとserviceから現在logonしているuserのデスクトップ上で
applicationを起動したいのですが方法をご存知の方教えてください。

現在は、ターゲットapplication起動用のapplicationを
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
に登録する方法を取っているのですが、serviceから直接起動できるのなら
そのようにしたいと考えています。

730 名前:デフォルトの名無しさん :04/11/18 16:14:47
CreateProcessAsUser

731 名前:デフォルトの名無しさん :04/11/18 17:40:24
便乗スマソ。現在ログオンしているユーザーのトークン取得ってどうするの?

732 名前:デフォルトの名無しさん :04/11/18 17:56:09
てきとーにOpenProcessTokenする

733 名前:デフォルトの名無しさん :04/11/18 19:50:40
HDCのデータをビットマップファイルで出力するにはどうすればいいですか?

734 名前:デフォルトの名無しさん :04/11/18 19:53:09
>>733
GDIにはないから、BITMAPFILEHEADER構造体→BITMAPINFOHEADER→色値の順にへこへこ書き出す
GDI+にはあるらしいが俺は試してないんで、すまんがコメントを控えさせていただく

735 名前:デフォルトの名無しさん :04/11/18 22:31:00
>>733
IPicture::SaveAsFile()もあるでよ

736 名前:デフォルトの名無しさん :04/11/18 22:54:56
現在表示されている画面に直接描画をしたいのですが
どうしたらいいでしょうか?

単にデスクトップへの描画でなく
デスクトップよりも手前に表示されているウィンドウがあればそれも含めて
現在の画面に直接落書きするようなことをしたいのです

画面に落書きが表示された状態でも操作は普通にさせたいので
画面のハードコピーをとって表示させてその上に書くというのは無しで

737 名前:デフォルトの名無しさん :04/11/18 22:59:44
>>736
ガッ = GetDC(ぬるぽ);

738 名前:デフォルトの名無しさん :04/11/18 23:04:20
>>737
なるほどぉ
ありがとうございます

739 名前:デフォルトの名無しさん :04/11/19 00:13:06
どこかのスレでC++を事前に勉強しておかないと、VC++を覚えるのは困難
だと言っている人がいましたが本当なのでしょうか?
できれば、Cから一気にVC++に飛びたいのですが……

740 名前:デフォルトの名無しさん :04/11/19 00:20:32
>>739
言ってる意味ぜんぜん分からないから。
VC++はCやC++の延長上にあるものじゃないから。
雪と雪見大福くらい違うから。

741 名前:デフォルトの名無しさん :04/11/19 00:24:30
740に突っ込みたいけどそれ以前にスレ違いだボケ>>739

742 名前:デフォルトの名無しさん :04/11/19 01:02:40
>>740
VC++はCやC++の開発環境なんですけど・・・

743 名前:デフォルトの名無しさん :04/11/19 01:09:13
>>742
VC++覚えるのにCの知識もC++の知識も要らないでしょ。
VC++でCやC++の開発したければそれぞれの言語の知識が必要だけど。

744 名前:デフォルトの名無しさん :04/11/19 02:10:48
>>740
突っ込みどころ満載で・・・

745 名前:デフォルトの名無しさん :04/11/19 02:49:38
みんないじめてるな

>>739
Windows のアプリが作りたいのに C++ をわざわざ他のプラットフォーム
で勉強してもしょうがないよ。
まあ、C の知識のみ API の知識なしで、 MFC 使って C++ のプログラム
を覚えるのはちと荷が重いけどね。

VC++ でアプリ開発するには
C言語 + API
C++言語 + MFC (+ API)
C++言語 + ATL+ API
等、選択肢はいくつもある。
段階的に覚えていけばよいよ。


746 名前:デフォルトの名無しさん :04/11/19 10:24:32
>>743
君のいう「VC++を覚える」とは、エディタの使い方かよ。 (プ

747 名前:デフォルトの名無しさん :04/11/19 10:42:18
>>746
あとは、プロジェクトの設定とかだな

748 名前:デフォルトの名無しさん :04/11/19 10:56:39
Serviceと、そのServiceから起動されるExeを作ってます。
Serviceから現在ログインしているユーザでExeを起動すると
パスワード有りの場合は何も問題なく実行出来るのですが、
パスワード無しの場合LogonUser関数で失敗(ErrCode:1327)します。

原因を追いかけていくと
ローカルセキュリティの設定 → セキュリティオプション内の
『アカウント:ローカルアカウントの空パスワードの使用を制限する』
の設定で挙動が変化すると判ったので
Exeを起動している間だけここの設定を『有効→無効』にしたいと思っています。

ここの設定を変更する方法(APIとか)を教えてください。



749 名前:デフォルトの名無しさん :04/11/19 11:10:24
でも、プログラミングを教えるようなサイトでも、VCを言語として表現してる所があったり…
MFCの意味で使ってるっぽい

750 名前:デフォルトの名無しさん :04/11/19 11:15:56
とりあえず、MFCはバージョンアップも止まりドトネト対応しないから、M$が収束させる方向なんだが。


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