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


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

Win32API 質問箱 Build9
501 名前:デフォルトの名無しさん :03/03/01 18:03
>>497
GetWindowLong(GWL_HINSTANCE)
ただし他プロセスのウィンドウには無効

GetWindowModuleFileName() なんてのもあったが使える環境に制限があったような

502 名前:デフォルトの名無しさん :03/03/01 18:04
>>499
そんなに言うんじゃコード出せ

503 名前:497 :03/03/01 18:08
>>500 >>501
さんくす!

504 名前:デフォルトの名無しさん :03/03/01 18:10
>>499
示している? 何を?

505 名前:デフォルトの名無しさん :03/03/01 18:11
>>502頼む相手をまちがって内科医?

506 名前:デフォルトの名無しさん :03/03/01 18:45
>>505
つまり、499 の発言はまったくの無根拠という事か?

507 名前:デフォルトの名無しさん :03/03/01 18:45
単純に文字列をクリップボードにコピーする関数をループで呼び出すと
GlobalFreeする場合は2回じゃないけど、数万回回してると不正落ちするけど、
GlobalFreeせずに無限ループさせても割り当てメモリ量変わらないし、
解放しないのが正しいっぽい。

508 名前:507 :03/03/01 18:47
あー、だけど、データがコピーされないことは無かった。
クリップボードにデータをセットした後、
ハンドルをロックして解放前に0でfillしてたけど、
確実に毎回クリップボードにデータは反映されていた。

509 名前:デフォルトの名無しさん :03/03/01 18:48
>>506
おまえヴァカ?

499が何の話をしているのか
読めてねーじゃねーか
>490は示している

510 名前:デフォルトの名無しさん :03/03/01 19:00
SHFileOperationの戻り値を全部知りたいんですけど・・
わからなくて困ってます。
おしえてくさい。

511 名前:デフォルトの名無しさん :03/03/01 19:03
>>509
書き捨てコードを95OSR2/98SE/Me/2kでテストしたら、
まあ、結局>>490の先頭三行は事実無根だったわけだが。
クリップボードに他アプリの(以前の)データなんて残らなかった

512 名前:デフォルトの名無しさん :03/03/01 19:27
>>510
おまえヴァカ?
499 が 490 を支持する根拠は何も無いんだろと言ったのに。
根拠があるなら 490 じゃなくても回答可能だろうが。

513 名前:490 :03/03/01 19:28
テスト環境はMe

case WM_LBUTTONDOWN:
{
HANDLE h = LocalAlloc(LMEM_MOVEABLE, 6); // GlobalAlloc(GMEM_MOVEABLE, 6);
char* p = (char *)GlobalLock(h);
lstrcpy(p, "Hello");
GlobalUnlock(h);

OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_TEXT, h);
CloseClipboard();
}
break;

case WM_RBUTTONDOWN:
{
OpenClipboard(hWnd);
HANDLE h = GetClipboardData(CF_TEXT);
CloseClipboard();

char* p = (char *)GlobalLock(h);
MessageBox(hWnd, p, "WM_RBUTTONDOWN", MB_OK);
GlobalUnlock(h);

GlobalFree(h);
}
break;


514 名前:490 :03/03/01 19:28
訂正: 失礼、テスト環境はXP

515 名前:512 :03/03/01 19:29
すまん >>510
>>509 宛てですた

でもさ、「戻り値を全部」 なんて知る必要があるのか?

516 名前:509 :03/03/01 19:30
支持?
評価していただけだが

517 名前:デフォルトの名無しさん :03/03/01 19:31
>>513
> HANDLE h = LocalAlloc(LMEM_MOVEABLE, 6); // GlobalAlloc(GMEM_MOVEABLE, 6);

何で?

518 名前:517 :03/03/01 19:32
>>487の一言が気になってわざとやってみた

519 名前:デフォルトの名無しさん :03/03/01 19:32
>>516
「評価」 なんてどうとでも取れる言葉を使うな。
あんたの主論は一体何なんだ?

520 名前:518 :03/03/01 19:33
ありゃしまった
漏れは517ではない、513だ
悪りぃ悪りぃ

521 名前:509 :03/03/01 19:36
>>519
490の言うことに賛成でも反対でもない
ただ490が出した情報が事実ならどうだと言ったまで

妙なバイアスを持つのを止めはしないが
つまらんよ

522 名前:デフォルトの名無しさん :03/03/01 19:38
>>518
HLOCAL と HGLOBAL を同一とみなす根拠には足らないと思うけど・・・。

523 名前:デフォルトの名無しさん :03/03/01 19:41
とりあえず490以降のageてて半角カナの人達はsageましょう。
同一人物だろうけど。

524 名前:518 :03/03/01 19:42
悪りぃ、そっちは漏れが古いせいだろう(藁

525 名前:デフォルトの名無しさん :03/03/01 20:27
繰り返しの呼び出しではないが、1 回の呼び出しにおける状況を観察した。


1.GlobalAlloc() でハンドルを得る。これを A とする。

2. SetClipboardData(CF_TEXT, A) 後、ただちに GetClipboardData(CF_TEXT)
  すると A が返ってくる。

3. その後 A には、GlobalLock() を使っていくらでも変更ができる。

4. CloseClipboard() の前でも後でも、GlobalFree(A) するしないにかかわらず、
  次に GetClipboardData(CF_TEXT) で得られるハンドルは A とは異なる。
  これを B とする。

5. B の内容も、 2. で SetClipboardData(CF_TEXT, A) した時点のもので、
  A とは異なる。
  つまり、3. における変更は全て無視されている。


つまり、SetClipboardData(CF_TEXT, A) の時点でどこかにコピーが確保される
のは間違いない。
つーか、CloseClipboard() の前で GlobalFree(A) しても動いてしまう。
ちなみに、GlobalAlloc() の代わりに LocalAlloc() を使っても同様だった。

526 名前:491 :03/03/01 20:35
>>493
あー、環境はWin2kでVC++6.0の場合です。
んでボタン押すごとに1度呼び出すようにしてみると分かりやすい。
1度目は成功するが2度目失敗する。
でも3度目はリセットされるのか成功し、4回目はまた失敗する。
その繰り返し。

527 名前:デフォルトの名無しさん :03/03/01 20:48
>>526
ウィンドウアプリだと何かポカする可能性が高いから、コンソールで
試してみてくれ。
そんな症状どうにも再現せん。

528 名前:デフォルトの名無しさん :03/03/01 21:37
>>495
> どういう場合にコピーを作るんだ?
いちいち場合分けする必要なんてないだろ。
つ ね に じゃないの?
大雑把に疑似コードで説明すれば、こういうこと。

HANDLE g_hMem; クリップボードが持っている
SetClipboardData(hMem)
{
 g_hMem = GlobalAlloc(GlobalSize(hMem));
 memcpy( GlobalLock(g_hMem) , GlobalLock(hMem) );
 GlobalUnlock(hMem); GlobalUnlock(g_hMem);
}

529 名前:デフォルトの名無しさん :03/03/01 21:46
>>513
> case WM_RBUTTONDOWN:
> {
> OpenClipboard(hWnd);
> HANDLE h = GetClipboardData(CF_TEXT);
> CloseClipboard();
>
> char* p = (char *)GlobalLock(h);
> MessageBox(hWnd, p, "WM_RBUTTONDOWN", MB_OK);
> GlobalUnlock(h);
>
> GlobalFree(h);
> }

このコード間違ってるよな。
GlobalLock() は CloseClipboard() の前に行う必要があるはず。

530 名前:491 :03/03/01 22:36
>>527
#include <windows.h>
BOOL CopyToClipboard(LPCTSTR lpString)
{
  HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, strlen(lpString) + 1);
  if (!hMem)
    return FALSE;
  if (::lstrcpy((char*)::GlobalLock(hMem), lpString) && OpenClipboard(::GetDesktopWindow()))
  {
    ::GlobalUnlock(hMem);
    if (::EmptyClipboard())
    {
      if (::SetClipboardData(CF_TEXT, hMem))
      {
        ::CloseClipboard();
        ::GlobalFree(hMem); // コメントアウトすれば正常になる
        return TRUE;
      }
    }
    ::CloseClipboard();
  }
  ::GlobalFree(hMem);
  return FALSE;
}
int main()
{
if (!CopyToClipboard("test")) { ::MessageBox(NULL, "1回目失敗", NULL, MB_OK) };
if (!CopyToClipboard("test")) { ::MessageBox(NULL, "2回目失敗", NULL, MB_OK) };
return 0;
}

これでも2回目失敗と出る。

531 名前:デフォルトの名無しさん :03/03/01 22:58
http://216.239.33.100/search?q=cache:VPZCMnIF73QC:msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/dataexchange/clipboard/clipboardoperations.asp+CloseClipboard+globalfree&hl=ja&ie=UTF-8&inlang=ja
↑ここの Memory and the Clipboard という所を読むと、
SetClipboardData()した時点で確保したメモリの所有権は
システムに移って、空にするときにシステムによってその
メモリが解放されるみたいだから自分で解放したらまずいんじゃない?

532 名前:デフォルトの名無しさん :03/03/01 23:04
実験した人は実験した環境もお願い。

533 名前:デフォルトの名無しさん :03/03/02 00:56
>>530
何故かはわからないが、SetClipboardData() が成功したところで、
  ::CloseClipboard();
  ::OpenClipboard(NULL);
  ::CloseClipboard();
とやると失敗しないようになった。
ただ、その場合は直後の GlobalFree() が失敗するので、GlobalFree() を
呼ばないのが正解なのかも知れない。

534 名前:デフォルトの名無しさん :03/03/02 01:08
OpenClipboard(::GetDesktopWindow())

OpenClipboard(NULL)
にしたらどちらも成功した。

535 名前:デフォルトの名無しさん :03/03/02 01:41
終了前に
「クリップボードのデータを他のアプリケーションでも使えるようにしますか?」
って聞いてくるアプリケーションがあるけど
あれは『はい』を選ぶとどういう処理をするんだろう。

536 名前:デフォルトの名無しさん :03/03/02 01:48
>>535
普通に何もしなけりゃよいと思うが……
逆に『いいえ』で空にするんでない?

537 名前:デフォルトの名無しさん :03/03/02 01:56
>>535-536
あれは、遅延レンダリングをやってるアプリの場合。
そのアプリを終了したら、データ渡す中の人がいなくなるだろ。

538 名前:デフォルトの名無しさん :03/03/02 10:07
SDK で CString だけを使いたいのですが、
どうすればいいですか?

539 名前:デフォルトの名無しさん :03/03/02 10:09
ATL使えばいいんちゃう?

540 名前:デフォルトの名無しさん :03/03/02 10:11
たのしかった
http://homepage3.nifty.com/digikei/ten.html

541 名前:デフォルトの名無しさん :03/03/02 10:18
ATL 嫌いな人

542 名前:デフォルトの名無しさん :03/03/02 10:56
>>535
>終了前に
>「クリップボードのデータを他のアプリケーションでも使えるようにしますか?」
>って聞いてくるアプリケーションがあるけど
>あれは『はい』を選ぶとどういう処理をするんだろう。

内部の特殊なデータ形式を汎用的なデータ形式(画像ならDIBとか)に
するんじゃない?


543 名前:デフォルトの名無しさん :03/03/02 11:27
>539
VC++ 6.0 なんです。

544 名前:デフォルトの名無しさん :03/03/02 11:57
>>538
VC++よく知らないがMFCのヘッダ入れればいいだけじゃ?

#include <vcl.h>
#include <stdio.h>

void main()
{
AnsiString str;
str = "ぬるぽ";
printf("( ´∀`) %s\n", str.c_str());
}

>bcc32 ansistr.cpp vcl.lib rtl.lib
>ansistr
( ´∀`) ぬるぽ

↑BCBの場合はこんなんでAnsiString使えるが

545 名前:デフォルトの名無しさん :03/03/02 12:40
>>538
std::basic_string<TCHAR> を使う

546 名前:デフォルトの名無しさん :03/03/02 13:04
結局、CloseClipboard()後のGlobalFree()はやってはいけないって事かな。
俺も>530をやってみたらエラーになった。(Win2,VC++6.0,sp5)
上手くいく場合は偶々運が良く通ってるだけのような気がする。
Meの場合メモリ管理がいい加減だから何とかなってるのかもね。

547 名前:デフォルトの名無しさん :03/03/02 14:17
Atok15で日本語入力をONにしたときに表示される
「ひらがなで入力します」というツールチップを
エディットボックス以外でも表示させたいのですが
どうすればよいのでしょうか?

日本語入力がONになるタイミングは
IMN_SETOPENSTATUSでわかるんですが、
その後どうしたらよいのかが全然わかりません。

548 名前:無言 :03/03/02 15:41
SDKで矢印キーが
押された時のメッセージはどうなりますか?
WM_KEYDOWNまではわかったんですが
上下右左の区別がつきません


549 名前:デフォルトの名無しさん :03/03/02 15:50
>>548
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp?frame=true

550 名前:547 :03/03/02 16:54
ShowCaretで解決しました。

551 名前:無言 :03/03/02 16:54
区別はついたんですが
なぜか「○○が押された」っていうMessageBoxを
出した後OKするとでエラーがでます。
あとはbreakしてreturn(0L)で
プロシージャ―終了なんですけど・・・
なんでですか?

552 名前:デフォルトの名無しさん :03/03/02 17:04
>>551
>出した後OKするとでエラーがでます。

どうして「どんな」エラーが出たのかを書かないのかねぇ。

553 名前:無言 :03/03/02 18:44
window4(アプリ名)が原因で<不明>にエラーが・・・
っていうエラーです
ちなみにMeをつかってます
すいません 大事なところ書きませんでした

554 名前:デフォルトの名無しさん :03/03/02 18:48
>>553
で、エラーメッセージを省略。どこまで喧嘩を売れば気が済むのか。

555 名前:無言 :03/03/02 19:00
window4 が原因で<不明>にエラーが発生しまし
た。window4 は終了します。 閉じる(C)

問題が解決しない場合は、コンピューターを再起動して
ください。

というダイアログが二回
<不明>の部分がKERNEL32.DLLにかわって1回です。
これで大丈夫ですか

556 名前:デフォルトの名無しさん :03/03/02 19:09
>>548
左矢印を押すと、(char)wParam に VK_LEFT が入るらしい。

557 名前:デフォルトの名無しさん :03/03/02 19:11
↓↓↓↓↓★ピンクエンジェル★↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp/linkvp.html

558 名前:デフォルトの名無しさん :03/03/02 19:11
>>555

それ、WM_KEYDOWNとかいう以前の問題な気もするんだが。
WM_KEYDOWNの処理部分の流れは追ってみた?


559 名前:無言 :03/03/02 19:31
いろいろ教えてもらって申し訳ないんですが
エラーの原因は配列のメモリが少なすぎたからでした
たかがこんなミスに・・・
すいませんでした
全くもってWM_KEYDOWNは関係なかったです
これからメモリをケチらないようにします
かまってくれてありがとうございました


560 名前:デフォルトの名無しさん :03/03/02 19:42
そういえば、Rebarの配色が変わらないという問題は解決したのか?

561 名前:デフォルトの名無しさん :03/03/02 20:07
ファイルにあるBMPを縮小拡大して、またファイルに保存したいんですが、
方法がわからなくて困ってます。

StretchBlt だか StretchDibits だか使えばいいことはわかったんですが、
あれを使ったあと、どうやってDCからデータを取り出せばいいのかわかりません。

最終的にはBMPを縮小拡大して保存したいだけなので、
なにかいい方法があったら教えてください。


562 名前:デフォルトの名無しさん :03/03/02 20:10
>561
表示しないなら、DCを使う必要は無いんじゃないか?

563 名前:デフォルトの名無しさん :03/03/02 20:14
>>561
メモリDCを作ってカキコせよ

564 名前:デフォルトの名無しさん :03/03/02 20:16
>562
おお、やっぱりあるんですか!?
見つけたAPIがDC使うもんしかなかったもんで。
あるならDC使わないやつ使いたいです


565 名前:561 :03/03/02 20:21
>563
メモリDCから、
どうやればビットマップデータを
取り出すのかわからないのです。
GetObjectかな?あれは違うっぽいし。


566 名前:デフォルトの名無しさん :03/03/02 20:23
>>565
GetDIBitsとかでどこかに書き出してBITMAPFILEHEADER込みでセーブ。

567 名前:561 :03/03/02 20:29
GetDIBitsって縮小拡大もできるんですか?
増色・減色のやつかと思ったけど。

とりあえず、縮小拡大のほかに
減色もやるため、GetDIBits使ってやってますが、
あれで縮小拡大もできるならありがたやです。


568 名前:デフォルトの名無しさん :03/03/02 20:31
>>567
先にStretchBltでもすれば?

569 名前:デフォルトの名無しさん :03/03/02 20:42
DIBSectionにStretchDIBits()すれば、直接ピクセル列を取得できる
けど、画面モードによっては画質が劣化する。


570 名前:デフォルトの名無しさん :03/03/02 21:52
MenuHelp() の第7引数
lpwIDs
 Pointer to an array of values that contains pairs of string resource identifiers and menu handles.
について質問です。
MenuHelp() の説明では
The function searches the array for the handle to the selected menu and,
if found, uses the corresponding resource identifier to load the appropriate Help string.
って言っているんですが、番兵もいない配列のポインタだけしか渡していないのに
配列のサイズが分からないはずの MenuHelp() は、どうして配列中に該当する ID がないって分かるんですか?

571 名前:561 :03/03/02 22:24
>569

デキター!!!
CreateDIBSection と StretchBlt 使ったらできたよ。
こんなものがあったとは、
とりあえず、参考にしたところを貼っと期末。
http://black.sakura.ne.jp/~third/win121.html

ありがとう、毎朝あなたの事を拝むよ。


572 名前:デフォルトの名無しさん :03/03/02 22:25
}

bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes);
ReadFile(hFile , bmpInfo , bmpFileHeader.bfOffBits - dwBytes , &dwBytes , NULL);
hBitmap = CreateDIBSection(
NULL , bmpInfo , DIB_RGB_COLORS , &bPixelBits , NULL , 0
);
ReadFile(hFile ,bPixelBits ,
bmpFileHeader.bfSize - bmpFileHeader.bfOffBits , &dwBytes , NULL);
CloseHandle(hFile);

*(lpCmdLine + lstrlen(lpCmdLine) - 4) = 0;
wsprintf(strFileName , TEXT("%s_not.bmp") , lpCmdLine);

winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc= WndProc;
winc.cbClsExtra= winc.cbWndExtra= 0;
winc.hInstance= hInstance;
winc.hIcon= LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor= LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName= NULL;


573 名前:デフォルトの名無しさん :03/03/02 23:01
指定した時間になったら自動的にデフラグを
行いたいのですがそういうAPIないでしょうか?

574 名前:ねこま :03/03/02 23:16
それはタスクスケジューラの仕事でしょう

575 名前:デフォルトの名無しさん :03/03/02 23:45
アプリケーションが起動してるかどうか検知するAPIありますか?

576 名前:デフォルトの名無しさん :03/03/02 23:57
>>575
ウインドウが出てるならそのウインドウハンドルとか。

577 名前:デフォルトの名無しさん :03/03/03 04:48
ドラッグ&ドロップでファイルパスを取得するみたいに
IEなどからURLがドラッグ&ドロップされたのを取得するには
どうすれば良いでしょうか?

578 名前:デフォルトの名無しさん :03/03/03 08:24
>>577
ファイル名の変わりにURL飛んできたりしないの?もしくはDDEとかか。

579 名前:デフォルトの名無しさん :03/03/03 09:19
DragQueryFileでは無理っぽ?

580 名前:デフォルトの名無しさん :03/03/03 09:22
IDropTarget実装してRegisterDragDrop


581 名前:デフォルトの名無しさん :03/03/03 09:37
ダイアログボックスだけのプログラムで、ボタンをクリックすると
「ファイルを開く」のコモンダイアログが開くようにしたいのですが、
クリックするとなぜかプログラムが終了してしまいます。
原因はどこにあるのでしょうか。

582 名前:デフォルトの名無しさん :03/03/03 09:47
>575
プロセスとウィンドウを列挙して目的のアプリを検索する。
Spy++のソースが参考になると思われ。


583 名前:デフォルトの名無しさん :03/03/03 10:08
>>581
原因はあなたにあると思われます。


情報少なすぎ。

584 名前:デフォルトの名無しさん :03/03/03 10:13
>>580
ありがとうございます。ちょっと複雑そうですがやってみます。

585 名前:デフォルトの名無しさん :03/03/03 10:15
>>581
case でbreakがないとか・・

586 名前:581 :03/03/03 11:19
GetOpenFileNameのときのOPENFILENAME構造体のhwndOwnerは
hDlg(ダイアログベースなのでこれが唯一のウィンドウハンドル)
でいいんですよね?
caseの中のここの部分をMessageboxにすると正常にメッセージボックスが
出ますので、case文の間違いではないと思います。

587 名前:デフォルトの名無しさん :03/03/03 11:22
>>585
WM_NOTIFYだかの後にbreak忘れててたまたま動作してたんだけど
XPでビジュアルスタイル有効にしたら動きがおかしくなったことがあった

588 名前:581 :03/03/03 11:37
ちなみに今作っているのは、スケルトンみたいなものなので、
GetOpenFileNameをコールした後、なにもせず return TRUE しています。

589 名前:デフォルトの名無しさん :03/03/03 12:27
>なにもせず return TRUE しています。
疑問はないのか

590 名前:581 :03/03/03 13:58
ZeroMemoryをコールしたらうまくいきました。
これって必須なんですね。コールしなくても問題ないと思ってました。
おさわがせしました。

591 名前:デフォルトの名無しさん :03/03/03 17:08
質問です。
他のアプリケーションソフトのボタンを
SendMessage の BM_CLICK で擬似クリックすると、
コールした方のプログラムは、ボタンが押された方のプログラム処理が終了するまで
待機してしまいますが、これを避ける方法ってないでしょうか?

マウスの座標を指定して擬似クリックをすれば回避できるのはわかっているのですが、
直接ボタンへのメッセージする処理で実現できる方法があれば、教えていただきたいのですが。

よろしくお願いします。

592 名前:デフォルトの名無しさん :03/03/03 17:10
>>591
PostMessage使えない状況?

593 名前:デフォルトの名無しさん :03/03/03 17:14
裏http:://morphism.tripod.co.jp

594 名前:591 :03/03/03 17:31
>>592
ありがとうございました!
できました


595 名前:デフォルトの名無しさん :03/03/03 17:39
>>591
SendMessageなんか使うから・・・
反応を待たずにF&FならPostMessageだろ

596 名前:595 :03/03/03 17:49
スマン、レス遅杉で誤爆と同等になった
一滴益

597 名前:デフォルトの名無しさん :03/03/03 18:53
SDKでクライアント領域にBMPを表示する時
BMPの一部を透明にして表示できますか?
また、できる時はどうするんですか?

598 名前:デフォルトの名無しさん :03/03/03 18:56
>>597
ググれ
http://www.google.com/search?q=%E3%83%93%E3%83%83%E3%83%88%E3%83%9E%E3%83%83%E3%83%97+%E9%80%8F%E6%98%8E&sourceid=opera&num=0&ie=utf-8&oe=utf-8

599 名前:デフォルトの名無しさん :03/03/03 19:02
>597
BMPを透明にするってどういう事?
そのBMPを描画しなきゃいいんじゃないの?
さもなきゃ、裏のデスクトップのDC持ってきて、矩形をコピーすりゃ
「透明に見える」んじゃない?

600 名前:デフォルトの名無しさん :03/03/03 19:06
>>599
いや「一部」
よく読もう

601 名前:597 :03/03/03 19:16
わがまま言ってすまないと
思うんですができるだけ高速なのを教えてください
元のBMPとそのモノクロ使う方法以外にありませんか?

602 名前:デフォルトの名無しさん :03/03/03 19:23
さっきから「SDKで」って言うのがひっかるのは自分だけ?
おれが勘違いしてんのかな・・・

603 名前:デフォルトの名無しさん :03/03/03 19:32
最前面に出ているとは限らない他のアプリに、
Ctrl+Sなどのメッセージを送ることを可能でしょうか?

以前流れてしまって・・・よろしければご教授下さい。

604 名前:597 :03/03/03 19:34
単にWinGLとかを使わない方法を
教えて欲しかっただけです。
なにか「SDKで」は誤解を招くような
意味を持っているんですか

605 名前:デフォルトの名無しさん :03/03/03 19:42
>>604
>>598

606 名前:デフォルトの名無しさん :03/03/03 19:44
SDKで、という言い方した場合は、MFCのようなクラスライブラリなんかを
介せず、直接自分でAPIを叩くことを言うな、普通。

んで多分597が言いたいのはGDIのみで処理するということだろうが、
OpenGLだろうがDirectXだろうがSDKはSDKだ。

607 名前:デフォルトの名無しさん :03/03/03 19:45
>>604
602氏じゃないけど、SDKって言っても色々あるからね。WinG SDKとか。
と、姑息に切っておく。後、WinGLってなんじゃらほ。

608 名前:デフォルトの名無しさん :03/03/03 19:47
>>604
まぁ、SDKで通じないことはないけど
DirectX9 SDKを使いましょうとか言われるかもよ。

とりあえずリージョンやレイヤードウインドウでググれ。

609 名前:597 :03/03/03 19:56
いいアドバイスありがとうございます。
しかし本命のBMPの一部を透明にして表示
は教えてくれないんですか
一つのBMPのみでは一部を透明化し表示できないんですか

610 名前:597 :03/03/03 20:04
あとで気づいたんではなれましたが「SDKで」に関しては
606の方がいったとおりクラスライブラリを
使わないということです。
あとWinGLとは画像の処理を高速でできるライブラリです。
しかしシュアウェアなので使いたくありません。

611 名前:デフォルトの名無しさん :03/03/03 20:11
>>609
そもそも質問の意味が曖昧なんだよなぁ。

透明って事は当然そのBMPの後ろが透けて見えるはずだけど
「後ろ」は一体どこなのか?
デスクトップ?それともクライアント領域?

前者なら既に答えはでてるし、
後者ならOS限定でよければAlphaBlendという手がある。

ところで、WinGLってなんか古〜いイメージがあるけど
今でも使えるレベルのものなの?

612 名前:597 :03/03/03 20:26
>>611
後ろはクライアント領域です。
また概に他のBMPが貼り付け先の下にあるものと考えほしいです。
OS限定というのは具体的に何のOSのことですか
あまりに古いのでは使えないくらいなら大丈夫(Win98からなら)です。
WinGLについてですがMeで使えましたよ。
でももっと速いのはあるとおもいますが


613 名前:603 :03/03/03 20:59
うう、またか、また流れていくのかぁ(´Д⊂

どうか>>603にお慈悲を…、要するにShift、Alt、Ctrl付きの
メッセージを送れれば御の字なのです。

>>612
AlphaBlend使わないなら、たぶん楽な方法は無いですよ。
自前で描画用のメモリに、抜き色除いて直接転送するか、
元画像から動的にマスクデータを作るとか。

614 名前:デフォルトの名無しさん :03/03/03 21:01
>>612
透明=何も書かない
SetPixel使って1pixelずつ描け。
んで、透明にしたいところは描くな


615 名前:603 :03/03/03 21:02
>>612
あとあれだ、最初はアイコンから初めてみるとか。
あれは簡単に抜き色設定出来たはず。

616 名前:597 :03/03/03 21:15
今回の603さんの流れは多分僕の責です。
SetPixelはきついですが
AlphaBlendについて調べてみます。
ダメならアイコンでやります。
いろいろなレスありがとうございました。

617 名前:デフォルトの名無しさん :03/03/03 21:22
そういやDCにリージョンを適用するとどうなるんだっけ?
597の目的のことができるかな。

618 名前:デフォルトの名無しさん :03/03/03 22:09
SetPixelじゃ遅すぎだろ。

619 名前:デフォルトの名無しさん :03/03/03 22:15
>>613
一般的じゃない事だと全然レスが付かないんだよなぁ。

俺も試したことが無いんで想像でしか言えないが、

1、対象アプリのウインドウのVIQに接続
2、keybd_eventでCtrlとかを押す
3、対象アプリのウインドウにWM_KEYDOWNメッセージ送信

というのはどうだろう?
試してみたら結果を教えて。

620 名前:デフォルトの名無しさん :03/03/03 22:27
画像処理でやるなら、GetDIBits()でDCのピクセル列をDIBピクセル列
として取得しそこにBMPのピクセル列を自分で描画、そして結果をDC
に描画、という感じかな。


621 名前:デフォルトの名無しさん :03/03/03 22:42
>>620
でもその場合、複数の色の深度に対応した処理を書かなくちゃいけないよな?
8bit、16bit、24bitとか。
この3つで大丈夫かな?

622 名前:デフォルトの名無しさん :03/03/03 23:52
みんな、SDKの時は言語はC使ってる?
それともC++?

623 名前:tantei :03/03/03 23:53
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 直通  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  hentaimtt@k9.dion.ne.jp
   グローバル探偵事務局 



624 名前:デフォルトの名無しさん :03/03/04 00:08
>>622
DirectX SDKの時はC++

625 名前:デフォルトの名無しさん :03/03/04 00:44
>>619
遅くなりましてすいません。まずVIQからつまづいてました(笑
virtualized input queueって言うんですねぇ…無知無知…。

AttachThreadInputでくっつけた後、keybd_eventと
SetKeyboardStateの2つを試してみました。が…どうも上手く行きませんで(´Д⊂

しかしMSDN見る限りこれで出来そうですし、
619さんの仮説は間違ってないと思います。後は私のやり方が…。

いずれにせよ強力な手がかりを示唆いただき、本当にありがとうございました。感謝です。

>>616
とんでもない、こちらの質問が特殊なせいですので…。

626 名前:デフォルトの名無しさん :03/03/04 00:53
>>621
んなこたない。
どんな色深度でも32bitで取得するのが一番楽。

627 名前:デフォルトの名無しさん :03/03/04 01:04
CreatePopupMenu() を使って複数のサブメニューを持つ階層メニューを動的に作っています。
この階層メニューを破棄する場合、再帰的に全てのサブメニューを DestroyMenu() する必要があるのでしょうか。
それとも、サブメニューの解放は Windows が行ってくれるのでしょうか?
よろしくお願いします。


628 名前:  :03/03/04 01:32
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_createpopupmenu.htm
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_destroymenu.htm

上のサイトになんて書いてあるか、読んできてくれたら、
解決方法を教えてあげよう。

629 名前:デフォルトの名無しさん :03/03/04 07:18
>597
CreateDIBSectionは?

630 名前:デフォルトの名無しさん :03/03/04 10:14
>625

Ctrl+Sとかなら、なんかのショートカットなわけで、それなら
SPY++あたりでID調べて、WM_COMMAND直接送るのでは
いかんかね?

631 名前:デフォルトの名無しさん :03/03/04 12:19
>>622
STL使いたいから最近はC++

632 名前:デフォルトの名無しさん :03/03/04 15:17
>>625
AttachThreadInput( targetTID, myTID, TRUE );
SetFocus( targetHwnd );  //重要

keybd_event( VK_CONTROL, 0, 0, 0 );
keybd_event( 'S', 0, 0, 0 );
keybd_event( 'S', 0, KEYEVENTF_KEYUP, 0 );
keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 );

とりあえず、これでできましたよ。

633 名前:デフォルトの名無しさん :03/03/04 23:04
>>630
なるほどーその手がありましたね!
今回はちょっと汎用性を持たせなければなので(送り先が不定なんです)アレなのですが、
次回はその方法で行ってみようと思います。スマートで良いですね。

>>632
ぃやった!見事に送れました。
ふーむ、AttachThreadInputでくっつけるだけじゃダメなんですねぇ…。
後はうまくフォーカスを戻せれば…苦節数週間、おかげでようやく解決できそうです。

こんな質問にお答え頂き申し訳ないです。
お二方とも本当にありがとうございました。

634 名前:デフォルトの名無しさん :03/03/05 00:10
あるプロセスからCreateThread()で複数スレッドを呼び出して処理をさせているのですが、同時に呼べるスレッド数の上限は決まっているのでしょうか?
大量のスレッド(1000〜10000個)を呼んでも、平気なのですか。


635 名前:デフォルトの名無しさん :03/03/05 00:21
>>634
普通に考えて65536個ぐらいに限界があると思われ。

636 名前:デフォルトの名無しさん :03/03/05 00:38
>>634-635

どっちにしろそれだけスレッド作ったら流石に重い。


637 名前:デフォルトの名無しさん :03/03/05 00:50
>>633
AttachThreadInputはいらんだろ。
keybd_eventはフォーカスウィンドウにいくから。

638 名前:デフォルトの名無しさん :03/03/05 00:51
>>634
生成できるスレッド数の最大値…ってのが、
レジストリのどっかにあったと思ったが。


639 名前:デフォルトの名無しさん :03/03/05 01:01
>>637
AttachThreadInputしておかないとフォーカスの設定が出来ない

640 名前:デフォルトの名無しさん :03/03/05 08:55
>>634
デフォルトでスタックは1MB
ユーザーが利用可能なアドレス空間は2GB
さあ計算してみよう。
もちろんスタックだけではなくヒープやモジュールにも
使われるから実際にはそれより少なくなる

641 名前:デフォルトの名無しさん :03/03/05 09:09
>>597
激しく遅レスで、もういないと思うが、
Win32APIで簡単にというなら、
SetLayeredWindowAttributesで良いと思う。

642 名前:デフォルトの名無しさん :03/03/05 09:22
>>641
>>597はクライアント領域にカラーキーかマスク付き転送したかったのでは?
リージョンを組み合わせるとかTransparentBltとか



643 名前:デフォルトの名無しさん :03/03/05 11:26
マウスカーソルが重なった際に表示されるヒントを
ツールバーではなく、プッシュボタンに実装する手段はありますか?

ヒントというのは例えばブラウザの閉じるボタンにカーソルを合わせたときに
出る「閉じる」のポップアップウィンドウのことです。

644 名前:デフォルトの名無しさん :03/03/05 11:52
>>643
MFCかWTLのCToolTipCtrlクラスを使う。

Win32APIだけでやりたいなら
CToolTipCtrlのソースやMSDNの「ToolTip Controls」を見て勉強する。

645 名前:643 :03/03/05 12:43
>644

ありがとうございます。ソース見て勉強します。

646 名前:641 :03/03/05 16:54
>>642
すまそ、文盲ですた。
荒縄で首吊って逝ってk(ry

647 名前:デフォルトの名無しさん :03/03/05 17:00
晩御飯までには帰ってくるのよ。

648 名前:デフォルトの名無しさん :03/03/05 17:29
   ||/
   /||
 /∧||∧
  ( / ⌒ヽ 
   | |   | 
   ∪ / ノ
    | ||
    ∪∪
         ∧ ∧,〜
        ( (⌒ ̄ `ヽ    _
          \  \ `ー'"´, -'⌒ヽ
         /∠_,ノ    _/_
         /( ノ ヽ、_/´  \
       、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
      /`   \____>\___ノ
     /       /__〉     `、__>


649 名前:デフォルトの名無しさん :03/03/05 17:30
>>646
荒縄ハァハァ

650 名前:デフォルトの名無しさん :03/03/05 19:15
>>648仕事が手緩い

   ||/    
   /||    
 /∧||∧     ∧ ∧,〜
  ( / ⌒ヽ   ( (⌒ ̄ `ヽ    _
   | |   |    \  \ `ー'"´, -'⌒ヽ
   ∪ / ノ    /∠_,ノ    _/_ 
    | ||    /( ノ ヽ、_/´  \ 
    ∪∪   、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
        /`   \____>\___ノ
       /       /__〉     `、__>



651 名前:デフォルトの名無しさん :03/03/05 19:27
ならばいっそ

     ||    
     ||    
   ∧||∧   
  ( / ⌒ヽ/  ∧ ∧,〜
   | | /   ( (⌒ ̄ `ヽ    _
    /  |  \  \ `ー'"´, -'⌒ヽ
  / ∪ / ノ  /∠_,ノ    _/_ 
     | ||  /( ノ ヽ、_/´  \ 
     ∪∪  、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
        /`   \____>\___ノ
       /       /__〉     `、__>


652 名前:デフォルトの名無しさん :03/03/05 19:32
>>651仕事が手緩い
    ||
    ||
  ∧||∧     ∧ ∧,〜
  ( / ⌒ヽ//  ( (⌒ ̄ `ヽ    _
   | |  // |    \  \ `ー'"´, -'⌒ヽ
   ∪ /// ノ    /∠_,ノ    _/_
    | //||    /( ノ ヽ、_/´  \
    //∪∪   、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
        /`   \____>\___ノ
       /       /__〉     `、__>

653 名前:デフォルトの名無しさん :03/03/05 20:08
>>651-652
ワロタ

654 名前:デフォルトの名無しさん :03/03/05 21:45
アプリケーションでマウスホイールの処理をしたいので
WM_MOUSEWHEELメッセージを受け取ろうと激しく希望しているのですが
spy++で見る限りでは送られて来ないみたいです。
親ウィンドウには送られてきているみたいですが、それをウィンドウプロージャで
キャッチすることは出来ません。
GetMessage()では取得できないのでしょうか?

655 名前:デフォルトの名無しさん :03/03/05 22:07
>>654
まずOSと〜環境を〜
spy++から察するに、とりあえずこんなの加えてプロシージャでキャッチしてみるよろし

#define WM_MOUSEWHEEL 0x020A

656 名前:654 :03/03/05 22:15
>>655
レスありがとうございます。
環境はVC++6.0(sp5)でWin2kでやってます。
windows.hのインクルードの前に
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
としています
#define WM_MOUSEWHEEL 0x020A
もやってみたのですが駄目でした。

子ウィンドウのスクロールバーはマウスホイールで操作可能なことから
メッセージを横取りされているように感じたのですが気のせいでしょうか…

657 名前:デフォルトの名無しさん :03/03/05 23:03
>>656
失礼、なるほど子ウィンドウですか。

今、全く同じ環境で、適当にMDIアプリ作ってみましたが、
一応子ウィンドウ側のプロシージャで問題なくホイールメッセージを受け取れるようです。
うーん、何がまずいんでしょうねぇ…。

658 名前:654 :03/03/05 23:59
>>657
アプリ作っての確認までしていただき本当にありがとうございます。

今、別のPCで試してみたところ、正常にWM_MOUSEWHEELを受け取れました。
マウスが悪かったのか、メインPCで動作している何らかのアプリが邪魔をしているのかは分からないのですが
今度新しいマウスを買うとか、OSを入れなおしてみるとかしてみます。

検索するとWM_MOUSEWHEEL関係の悩みが結構引っかかるのですが
マウスホイールを主力として使うアプリケーションの開発は難しいのでしょうか…

659 名前:デフォルトの名無しさん :03/03/06 01:11
>>658
何か、マウス関係のユーティリティが動いてないか?

いずれにせよ、ホイール無しのポインティングデバイスなんて山ほどある
んだから、頼りきるのはマズイな。
全ての操作をキーボードでもできるようにすればベストだ。

660 名前:654 :03/03/06 01:55
>>659
今、マウス購入時に付いてきたユーティリティーを削除したら
正常にWM_MOUSEWHEELを受け取ることが出来るようになりました。
的確なアドバイスをありがとうございました。

環境によって思うように動かないことがある、というのを痛感しました。
キーボードでの操作の実装もしっかりするように心がけなくてはいけませんね。

661 名前:デフォルトの名無しさん :03/03/06 08:56
>>654
もしWin95まで考慮に入れているならzmouse.hもチェック
意外とWin95も生存しているようだし



662 名前:デフォルトの名無しさん :03/03/06 09:38
>651

>652

笑いまくった
いってる言葉と行動がともなってねー

663 名前:デフォルトの名無しさん :03/03/06 10:00
>>660
マウスのドライバやユーティリティによってはいきなりWM_VSCROLLだったり・・・
ホイールが二つ以上あったりホイールじゃない何かだったりと・・・

664 名前:デフォルトの名無しさん :03/03/06 19:23
QueryPerformanceCounterをサポートしていない環境というのはあるんでしょうか?

665 名前:デフォルトの名無しさん :03/03/06 20:05
ハードウェアによってはあるかもね。
返り値で判定できるでしょ。

666 名前:デフォルトの名無しさん :03/03/06 20:13
>>665
知らねーなら答えるなよボケ

667 名前:デフォルトの名無しさん :03/03/06 20:15
サポートしていない環境がないなら返り値による判定なんて必要ないだろうな

668 名前:デフォルトの名無しさん :03/03/06 20:19
>>666
お前が氏ね

669 名前:デフォルトの名無しさん :03/03/06 20:21
どうしてそこで「氏ね」という単語が出てくるのか。
668は日本語が不自由と見た。

670 名前:デフォルトの名無しさん :03/03/06 20:27
    ||
    ||
  ∧||∧
  ( / ⌒ヽ 
   | |   | 
   ∪ / ノ
    | ||
    ∪∪   俺が変わりに死ぬよ

671 名前:デフォルトの名無しさん :03/03/06 20:27
   ||/
   /||
 /∧||∧
  ( / ⌒ヽ 
   | |   | 
   ∪ / ノ
    | ||
    ∪∪
         ∧ ∧,〜
        ( (⌒ ̄ `ヽ    _
          \  \ `ー'"´, -'⌒ヽ
         /∠_,ノ    _/_
         /( ノ ヽ、_/´  \
       、( 'ノ(     く     `ヽ、  命を粗末にしてはならん!
      /`   \____>\___ノ
     /       /__〉     `、__>

672 名前:デフォルトの名無しさん :03/03/06 20:34
>>664-671
デキレースだな…

673 名前:デフォルトの名無しさん :03/03/06 21:06
今更関係ないけど、DirectX8のある機能を使っていると
QueryPerformanceCounterが正常動作しないというバグがあったな


674 名前:デフォルトの名無しさん :03/03/06 22:51
>>673

> QueryPerformanceCounter

COMの参照カウンタのことでしょうか?
(ネタじゃないので、マジレスきぼんぬ)

675 名前:デフォルトの名無しさん :03/03/06 22:58
>>674
絶対違うと思います。

676 名前:デフォルトの名無しさん :03/03/07 00:59
それはともかく QueryPerformanceCounterをサポートしてない環境って何?
486では使えないけどPentium以降はサポートしてるんじゃないの?

677 名前:デフォルトの名無しさん :03/03/07 02:05
くるーそー

678 名前:デフォルトの名無しさん :03/03/07 10:33
WinChipやCylixのCPUでもサポートしてんの?

679 名前:デフォルトの名無しさん :03/03/07 12:06
QueryPerformanceCounterは、rdtscが動かなくても、動いたりする

680 名前:デフォルトの名無しさん :03/03/07 12:10
rdtscに依存していたらSpeedStep等で困りそうだ


681 名前: ◆8/MtyDeTiY :03/03/07 13:40
あるスレッドが WaitForSingleObject() とかで待機中かどうかを
調べる方法ってありますか?

682 名前:デフォルトの名無しさん :03/03/07 13:53
>>681
WaitFotSingleObjectで待機している場合にシグナル状態になるイベントオブジェクトを
WaitForSingleObjectで待ってみてはどうだろうか(藁

683 名前:デフォルトの名無しさん :03/03/07 20:48
調べたって調べた次の瞬間には待機に入ってるかもしれないし
待機を脱してるかもしれない。無意味。
そういうこと聞く人は同期について根本的に理解してなさそうだから
マルチスレッドのアプリケーション書かないでくれ

684 名前:デフォルトの名無しさん :03/03/07 20:53
>>683
はい、さようなら。

685 名前:デフォルトの名無しさん :03/03/07 21:43
>>681
同期オブジェクトって、利用方法についてある程度パターンがあるのよ。
それに沿って使ううちは問題ないけど、そこから外れるととたんに苦しくなる。
時間を無駄にしたくないなら、設計をそれに合わせたほうがいいよ。

>>684
さようなら。

686 名前:デフォルトの名無しさん :03/03/07 21:51
>>685
で、具体的な方法は提示できないと。口だけって奴だな。

687 名前:デフォルトの名無しさん :03/03/07 23:42
685ではないが、>>681の質問から「具体的な方法」が提示できたら
そいつはエスパーか占い師だ(w
で、>>681が単に待ちを中断する方法が欲しいのなら、
WaitForMultipleObjectsを使えばいいだけだよな。
何かを待つときはスレッド間通信用の口を残しておくのがベター。
Win32だと待機リソースに応じて様々な手段が用いられ、汎用の方法は
無いんで状況に応じて色々工夫は必要だろう。


688 名前:686 :03/03/07 23:44
>>687
すまん。俺もそう思う。ついつい暑くなってしまった。申し訳ない。

689 名前:デフォルトの名無しさん :03/03/08 01:03
イヤな方法だが、WaitForSingleObject() の前後でフラグを操作すれば
判別できないでもない。

690 名前:デフォルトの名無しさん :03/03/08 01:16
>>689
(同期がらみの解決方法として)安易にフラグを持ち出すと

>同期について根本的に理解してなさそうだから

って言われちゃうよん。

つか、イヤどころの話じゃないと思う。

691 名前:デフォルトの名無しさん :03/03/08 01:32
まあ端的に云ってしまえばフラグ操作とwait状態への侵入またはそこからの
復帰をatomicに実現できないから駄目。
というか「そういうことをしたくなる」こと自体が設計上の
問題を如実に示している。
という訳で元に戻る。


692 名前:デフォルトの名無しさん :03/03/08 03:43
単に調べるだけなら、WaitForSingleObjectをクリティカルセクションで囲って、
他のスレッドからはTryEnterCriticalSectionで調べるってのは駄目?

…いやまあ、俺も用途が思いつかないのには同意だ。

693 名前:デフォルトの名無しさん :03/03/08 05:04
 あのー、>>681氏はひょっとして
「任意の外部のプロセス/スレッドが待ち状態に陥ってるかどうかを知りたい」
んじゃないのかと思うんですが。

 VisualC++のデバッガ上で動かしてるプログラムがブレークに3秒間
応答しないと、デバッガが「デッドロックしている可能性があります」云々
とメッセージを出しますが、それを「可能性」じゃなくて確定する
方法があると確かに便利かもしれませんよね。
デバッグ系のAPIでなんとかならないかな?

694 名前:デフォルトの名無しさん :03/03/08 09:00
> TryEnterCriticalSection

Win98系で使えないのでご注意...なんで使えねえんだよ...
まあMutexのほうが便利だが

> それを「可能性」じゃなくて確定する

SuspendThread→GetThreadContext→ResumeThread
して、プログラムカウンタの値が変化してないことを確かめる?
うーん、うそ臭い

695 名前:デフォルトの名無しさん :03/03/08 09:42
EnumProcessModulesについての質問ですが、
対象プロセスの本体(exeファイル)がhModule[0]以外に入る事はあるのでしょうか?

696 名前:デフォルトの名無しさん :03/03/08 12:30
>694
Sleep....

>691
SignalObjectAndWaitわ〜

697 名前:デフォルトの名無しさん :03/03/08 12:53
>SignalObjectAndWait
>Windows 95/98:サポートされていません。

698 名前:681 :03/03/08 13:17
ども。おはようです。

681が、スレッドの状態を知りたかったのは、

while( WaitForSingleObject( event, INFINITE ), true ) {
// なんか処理
}
とかでイベントを待ってるスレッドに
PulseEvent() で、イベントを伝えたかったからです。

[1] スレッドの状態が解れば、最悪Busyループを組むことでとにかくイベントは伝えられますよね。
[2] "スレッドが待機中になるまで待つ"システムコールなんかがあると最良かな。


で、
[1]のための方法が"クリティカルセッションで囲んで、TryEnterCr..."で、
[2]のための方法が、SingleObjectAndWait() な訳ですね。
そんで、[1]も[2]も、Win9xではサポートされない、と。

Win2000とかのときだけ、これらの方法を採って、
Win98とかのときは"WaitForSingleObject()の前後でフラグ or Mutex"でお茶を濁す、
って云うのが現実的かなぁ。

699 名前:681 :03/03/08 13:20
つか、PulseEventでイベントを伝えようとすること自体が阿呆なのかな。


700 名前:デフォルトの名無しさん :03/03/08 13:49
なんでスレッドの状態を知りたいの?
その必要がないように思えるんだけど・・・

> PulseEventでイベントを伝えようとすること自体が阿呆なのかな

Win32にはWindowMessageキューという大変便利なキューがありますよ。

701 名前:デフォルトの名無しさん :03/03/08 16:07
>>692
つーかタイムアウト0のWaitForSingleObjectでOK。
>>694
OPTEX_TryEnterをどうぞ
http://www.microsoft.com/msj/archive/s202b.htm
NT 4.0でしか使えないと書いてるがそれはこの記事が1996年9月の
ものだからで、Win98以降ならInterlockedCompareExchangeが
サポートされてるから使えるはず。
CMPXCHGでInterlockedCompareExchangeを自作すれば
Win95でも使えるかも。
>>698
[1]はPulseEventする時点ではもう待機を脱しているかも
しれないから駄目。
> というか「そういうことをしたくなる」こと自体が設計上の
> 問題を如実に示している。
に尽きる。
[2]はPulseできないが、それでいいんならなんでSetEvent
では駄目なの?

702 名前:デフォルトの名無しさん :03/03/08 16:28
そもそもSignalObectAndWaitは
「スレッドが待機中になるまで待つ」APIじゃないし。
そんなAPIがない理由は、戻ってきた次の瞬間には
もう相手のスレッドも待機を脱してるかもしれないから。
そんなことをしたくなること自体が(ry
ついでにスペルくらいちゃんと読め。SingleObectAndWaitではない。
やっぱりお前はマルチスレッドのアプリを書くべきじゃないと思うんだが。

703 名前:デフォルトの名無しさん :03/03/08 16:29
ついでにPulseEventの解説より引用。
> Note This function is unreliable and should not be used.
> It exists mainly for backward compatibility. For more
> information, see Remarks.

704 名前:702 :03/03/08 16:31
とか偉そうに書いてたら俺までスペル間違えた∧||∧
SignalObjectAndWait

705 名前:デフォルトの名無しさん :03/03/08 17:03
こーゆー話をするスレあったんだよな。
寂れてるけど。

マルチスレッドプログラミング相談室 その2
http://pc2.2ch.net/test/read.cgi/tech/1037636153/l50

706 名前:デフォルトの名無しさん :03/03/08 19:26
APIの話である限りはここでもいいんじゃないの?
PulseEventがだめぽな場合の具体例。
http://www.microsoft.com/msj/0997/win320997.htm
デバッグAPIはKernelAPCを使って実現されてる。

707 名前:デフォルトの名無しさん :03/03/08 20:07
ExitWindowsExecをrundllを使わずに呼ぶ方法ない?

708 名前:デフォルトの名無しさん :03/03/08 20:07
>>707
普通にloadLibraryすれば?

709 名前:デフォルトの名無しさん :03/03/08 20:44
>>708
32ビットアプリから、という趣旨では?
「Win32」 API質問箱だし。
2000やXPではログオフするだけなのにいまさらそんな方法
追求してどうするねん、という気もするが

710 名前:デフォルトの名無しさん :03/03/08 20:50
>>709
>32ビットアプリから、という趣旨では?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/loadlibrary.asp

だからそう言う趣旨で答えてる。

711 名前:デフォルトの名無しさん :03/03/08 21:08
>>710
ExitWindowsExecは16bitのUSRE.EXEにあるから
サンクを使う必要があるのでは?



712 名前:デフォルトの名無しさん :03/03/08 21:16
USREって…妙なタイプミスをしてしまった

ExitWindowsExecならQT_Thunkでどうにかなるかも


713 名前:デフォルトの名無しさん :03/03/08 21:27
サンク 32 16 DLL API
検索キーワードはこのあたりでよい?

714 名前:デフォルトの名無しさん :03/03/08 21:28
>>713
同意。

715 名前:デフォルトの名無しさん :03/03/08 21:36
http://www.geocities.co.jp/Hollywood/4205/doc/mscdex2.html
QT_Thunkでぐぐったらこんなのが

716 名前:デフォルトの名無しさん :03/03/08 21:37
>>706
あんまりよくない。
マルチスレッドとか同期とかの話は長引いたり荒れたりするから隔離しないと。

717 名前:デフォルトの名無しさん :03/03/08 21:38
でも漏れ実はサンクなんて使ったことねーよ・・・

718 名前:デフォルトの名無しさん :03/03/08 22:20
いずれにせよ「そういう趣旨で」答えてなんで普通にLoadLibrary
って回答になるねん。
確かにWin16側の関数もLoadLibraryって名前だけどサンク経由で
呼ぶのは「普通」じゃないと思う

719 名前:デフォルトの名無しさん :03/03/08 22:49
おとなしくrundll使ったほうが楽なんだだろうが呼び出しに失敗する事が多い…

720 名前:デフォルトの名無しさん :03/03/08 23:44
Win16コンパイラならOpenWatcomに入ってるが
ヘッダがないな…
まあExitWindowsExecを呼び出す程度なら
自分で書き下せばいいけど

721 名前:デフォルトの名無しさん :03/03/09 00:55
ShellNotifyIconでタスクトレイにアイコンを登録する時に
Windows2000だと、256色のアイコンが16色になってしまうのですが、
これってなぜですか?
XPの写真を見ると256色以上のアイコンが綺麗に描かれているのは、
OSの違いのせいでしょうか?
それともプログラミングの問題ですか?

722 名前:デフォルトの名無しさん :03/03/09 01:00
>>721
詳しくはわからなが、漏れの XP ではこんなコードで 256 色になってるので試してみてくれ。
NotifyIconData.hIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_SHARED);

723 名前:デフォルトの名無しさん :03/03/09 01:07
>>721
2000以前のWindowsの仕様でタスクトレイのアイコンは16色にしか
できません。Me以降なら256色にできます。
2000以前で256色にする裏技もあるらしいけどやり方は不明。すまん。

724 名前:デフォルトの名無しさん :03/03/09 01:07
>>722
試してみましたが、私の方では駄目でした。
XP、もしくは正常なプログラミング方法では、やはりそういうコードで
256色になるのですね。

725 名前:721=724 :03/03/09 01:08
>>723
そうでしたか。
どうもありがとうございます。

726 名前:デフォルトの名無しさん :03/03/09 02:24
CPU使用率をはかるAPIありますか?


727 名前:デフォルトの名無しさん :03/03/09 02:35
>>726
http://pc2.2ch.net/test/read.cgi/tech/1018239290/681

728 名前:デフォルトの名無しさん :03/03/09 05:03
APIでツールバーにヒントを加える方法はありますか?
検索したのですが、MFCでのやり方しか見つからないです。

729 名前:デフォルトの名無しさん :03/03/09 05:35
ヒントってツールチップ?
それなら、TBSTYLE_TOOLTIPSを指定して、WM_NOTFYのTTN_NEEDTEXTに反応してやる。

730 名前:728 :03/03/09 06:04
>>729
出来ました。ツールチップって言うんですね。
ありがとうございました。

731 名前:デフォルトの名無しさん :03/03/09 11:57
//DLL.h
#define EXPORT extern "C" __declspec(dllexport)
EXPORT void CALLBACK ITEMWEAPON(void);
をインクルードしたソースファイルを
Borland C++ CompilerでDLLにするときに
「DLL.h 2:宣言が正しく終了していない」がでます。
またソース部の
EXPORT void CALLBACK ITEMWEAPON()
{ //いろいろかいてある
}
でもEXPORT void CALLBACK ITEMWEAPON()の
部分で「宣言が正しく終了していない」が
なんでなんですが

732 名前:デフォルトの名無しさん :03/03/09 13:15
>>727
おお。レジストリを使うのか。
サンクス。


733 名前:731 :03/03/09 13:36
なんか自分で解決しました・・
cではできなくc++でできました。
意味ねぇー

734 名前:デフォルトの名無しさん :03/03/09 13:38
extern "C" ってC++用じゃなかったか

735 名前:デフォルトの名無しさん :03/03/09 18:20
だれかborland c++ compilerで
リソースのDLLを作る時の
コマンドラインオプションと
コンパイラを教えてくれませんか
調べてもわからないので
どうしようもないです。教えてください

736 名前:デフォルトの名無しさん :03/03/09 18:22
brc32
じゃなかったっけか?

737 名前:デフォルトの名無しさん :03/03/09 18:27
ttp://www.google.com/search?num=50&hl=ja&q=borland%20リソース%20DLL
つーかどこ調べたんだよ。

738 名前:デフォルトの名無しさん :03/03/09 18:50
>>737
調べてないと思われると叩かれるから
おまじないのように書いてるだけで
実際に調べてるわけないじゃん

739 名前:735 :03/03/09 20:50
いや、ちゃんと調べましたよ
ヘルプファイルとMSNサーチで
ただヘルプファイルのbrc32の
コマンドラインオプションには
DLLを作る場合使うというものは書いてなく
MSNではBorlandQ&Aがまともなほうで
他のページはBorland c++ compiler 5.5は
無料でいいですよーーーというページばかりで
300近くのサイトに入りまくるのもバカらしくなり
ここに書き込みました
BorlandQ&Aについては前にリソースの
コンパイルで調べようとしたら
BCC32の簡単なコマンドラインオプション以外は
ヘルプファイルを見ろって感じだったんで
はじめからアテにしてませんでした。
ちなみにISDNの3時間/月なんで
時間かけれるわけなんです



740 名前:デフォルトの名無しさん :03/03/09 20:56
縦に読めない

741 名前:デフォルトの名無しさん :03/03/09 20:58
いや、ちゃんと調べましたよヘルプファイルとMSNサーチでただヘルプファイルのbrc32のコマンドラインオプションには
DLLを作る場合使うというものは書いてなくMSNではBorlandQ&Aがまともなほうで他のページはBorland c++ compiler 5.5は
無料でいいですよーーーというページばかりで300近くのサイトに入りまくるのもバカらしくなりここに書き込みました
BorlandQ&Aについては前にリソースのコンパイルで調べようとしたらBCC32の簡単なコマンドラインオプション以外は
ヘルプファイルを見ろって感じだったんではじめからアテにしてませんでした。ちなみにISDNの3時間/月なんで
時間かけれるわけなんです


すげぇ、展開すると日本語の文章として崩壊する。

742 名前:735 :03/03/09 21:20
。つけてないからですね。←これ!!
で最後は「ないんです」です。意味違ってます。
Borland c++ でリソースのDLLの話は解決しました。
ヘルプファイルには.EXEと書いてあるくせに
.DLLでも全く問題ありませんでした。
でもさすがに一切のコードなしの
Cソースをコンパイルしたのはびっくりしました。
コードなしのCソースをコンパイルしDLL作成→
rcをコンパイル&リンク でバッチリでした。
brc32じゃ と書いた736さんありがとうございました。
けどボーランドもテキトウだなぁぁ。
(。を意識しました)


743 名前:デフォルトの名無しさん :03/03/09 21:23
プログラミングする前に国語勉(ry

744 名前:デフォルトの名無しさん :03/03/09 21:26
>>けどボーランドもテキトウだなぁぁ。
おまえの「ちゃんと調べた」の方がよっぽどテキ(ry

745 名前:735 :03/03/09 21:44
国・社は点悪いです(特に社)。
英はまあまあ。
理・数は完璧?
な純理系ですから。
よく使う言葉は「多分・・」です。
(WINAPI関係ないですね。けど日本人として○○○?って感じです)

746 名前:デフォルトの名無しさん :03/03/09 21:48
いいからすっこめ コミュニケーション能力に問題あり

747 名前:デフォルトの名無しさん :03/03/09 21:49
>>745
無職ですよね。

748 名前:735and745 :03/03/09 22:04
学生です。
高校受験終わったんで
ゆっくりとプログラミング
やってまーーす。
中3です(マジ)
田舎だし、他のやつ受験終わってないし、
家で遊んでます(明後日公立試験)。

749 名前:デフォルトの名無しさん :03/03/09 22:05
>>748
読点を覚えなさい。多分堕ちてます。

750 名前:デフォルトの名無しさん :03/03/09 22:05
>>748
プログラミングは

 理系より文系



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