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


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

Win32API質問箱 Build17
501 名前:デフォルトの名無しさん :04/03/13 13:21
LonghornではWin32APIをエミュレートするんだっけ?


502 名前:デフォルトの名無しさん :04/03/13 17:42
>>501
つーか、WindowsってあらゆるAPIをエミュって捉え方してるだろ

503 名前:デフォルトの名無しさん :04/03/14 00:52
hEdit = ::CreateWindowW(L"EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 400, 200, hWnd, 0, hInstance, NULL);
::SetWindowTextW(hedit, L"あいうえお\r\nかきくけこ\r\n");

UINT len;
char buf[512];

*reinterpret_cast<WORD*>(buf) = sizeof(buf);
len = ::SendMessageA(hEdit, EM_GETLINE, 0, reinterpret_cast<LPARAM>(buf));
buf[len] = '\0';
::MessageBoxA(hWnd, buf, NULL, MB_OK); // <---(1)
::MessageBoxW(hWnd, reinterpret_cast<LPCWSTR>(buf), NULL, MB_OK); // <---(2)

WCHAR wbuf[512];
*reinterpret_cast<WORD*>(wbuf) = sizeof(wbuf) / sizeof(wbuf[0]);
len = ::SendMessageW(hEdit, EM_GETLINE, 0, reinterpret_cast<LPARAM>(wbuf));
wbuf[len] = L'\0';
::MessageBoxW(hWnd, wbuf, NULL, MB_OK); // <---(3)
::MessageBoxA(hWnd, reinterpret_cast<LPCSTR>(wbuf), NULL, MB_OK); // <---(4)


W系で作成したエディットコントロールに対して、A系W系APIで最初の行の文字列を取得します。
(1)(3)は正常に表示され、(2)(4)は文字化けします。
SendMessageAではマルチバイト文字列、SendMessageWではUNICODE文字列が取得されるようですが
エディットコントロール側がそれらを判別してるのでしょうか?
それともSendMessageが文字列の変換をしているのでしょうか?

504 名前:デフォルトの名無しさん :04/03/14 00:54
そういう意味では、そもそも、NT系OSは全て、Win32API はシステムコールじゃなくて、
ラッパーで実現してるとは言えるかもね。
世の中には、NTシステムコールを直に呼び出しているソフトとかあるのかな?

505 名前:デフォルトの名無しさん :04/03/14 00:56
>>504
いつ互換性がなくなるか分からんからなあ・・・
よっぽどの必要がないかぎりやらんだろう

506 名前:デフォルトの名無しさん :04/03/14 02:08
スレッドハンドルからそのスレッドが所有しているウィンドウハンドルを得る方法はありますか?

507 名前:デフォルトの名無しさん :04/03/14 02:17
GetGUIThreadInfo()
EnumChildWindows()で列挙していったらどうか?

確認してないので責任は持たない。

508 名前:デフォルトの名無しさん :04/03/14 02:19
windowsで、UNIXのシグナルの
SIGSTOP(プロセス一時停止)
SIGCONT(再開)
に相当するAPIってありますか?
自プロセスではなく他プロセスに対しての命令です。



509 名前:デフォルトの名無しさん :04/03/14 02:41
>>508
プロセスの終了ならTerminateProcessでてきるけど一時停止は聞いたことないなぁ。
何故停止するのかよくわからんけど、Mutexとか使って排他制御とかじゃだめなん?

510 名前:デフォルトの名無しさん :04/03/14 04:11
>506
ハンドルじゃなくてIDなら
EnumThreadWindows()とかGetWindowThreadProcessId()
とかあるけど、ダメ?

>508
シングルスレッドプロセスなら、
使ったこと無いけどSuspendThread()でどう?

511 名前:デフォルトの名無しさん :04/03/14 12:43
>>508
SCM(NTサービス)から起動されたプロセスだと一時停止もあるけど。


512 名前:デフォルトの名無しさん :04/03/14 14:08
>>511
それはサービスとしての機能が停止しているだけで、
プロセスが停止しているわけではないと思うんだが...。

513 名前:デフォルトの名無しさん :04/03/14 17:24
>>512
SIGSTOP(プロセス一時停止)
SIGCONT(再開)

に該当するのは、

SERVICE_CONTROL_PAUSE
SERVICE_CONTROL_CONTINUE

でわ?

停止シグナルをどうするかはプロセス側の処理でそ。
StopProcess()なんてAPIがあって勝手に止められても困ると思う。


514 名前:513 :04/03/14 17:28
てゆうか、Win32だとEventを使うのが正解なのかも。。


515 名前:デフォルトの名無しさん :04/03/14 18:08
>>513
だからSERVICE_CONTROL_PAUSEが通知されたからといって、
そのプロセスが停止されるわけじゃないんだってば。

>>508
/subsystem:consoleなヤツならGenerateConsoleCtrlEventが一番近い。
でも/subsystem:windowsやヤツには、それに相当するような一般的な仕組みはない。


516 名前:デフォルトの名無しさん :04/03/14 18:19
>>515
止まるとは一言も書いてないんでつが。。


517 名前:デフォルトの名無しさん :04/03/14 19:09
>>516
SIGSTOPを受けたら絶対にプロセスは一時停止しなければならないとでも
思ってるんじゃないの

518 名前:SIGSTOP :04/03/14 20:03
俺が止まれといってるんだ・・・
なぜ・・・・止まらないぃぃっ!?

519 名前:508 :04/03/14 20:29
有益な情報ありがとうございます。
皆さんの与えてくれたキーワードで色々調べてみようと思います。

>>515
「でも/subsystem:windowsやヤツには、それに相当するような一般的な仕組みはない。 」

そうなんですか。
タスクスケジューラに「一定期間アイドル状態だったら実行」という項目があるので
(使ったことないけど)、その手のタスク制御APIがあるのかもと思ったのですが、残念。


520 名前:508 :04/03/14 20:34
皆さんのレスを「サービスならサスペンドできるけどね」って風に
読み間違えてました。

>>511
サービスから対象プロセスを起動して、自分の起動したプロセスを
制御せよ、ってことですね。ありがとう!
ってことはサービス以外から起動したものはやっぱ制御不能なのか。

521 名前:508 :04/03/14 20:38
>>520
と思ったらやっぱり
SERVICE_CONTROL_PAUSE はサービス自身のサスペンドだから違うのか。



522 名前:デフォルトの名無しさん :04/03/14 21:25
>>521
RegisterServiceCtrlHandler()で指定したコールバックルーチンに
SERVICE_CONTROL_PAUSEが返って来るですよ。
一時停止は自分でしないといけないです。


523 名前:デフォルトの名無しさん :04/03/14 21:33
>>518
漏れ(Win32)にそんなシグナル送っても止まるかーよ。 ア フ ォ 〜

524 名前:デフォルトの名無しさん :04/03/14 21:38
>>523
TerminateProcess(>>523, 0)
あひゃひゃ。


525 名前:デフォルトの名無しさん :04/03/14 21:43
てゆうか何で一時停止がしたいのよ?

526 名前:デフォルトの名無しさん :04/03/14 22:19
まあ、外からプロセスなんぞどこで止まるかわかんね。>>524
止まるというのは、自分が関数呼んだときだろ。
そんなにうまく止まるなら、リセットしなくても良いよな。
OS自体が固まるなんて起きないよ。ぷ。

527 名前:デフォルトの名無しさん :04/03/14 22:46
(A`)?

528 名前:デフォルトの名無しさん :04/03/14 23:14
>>526
Win32を何だと思ってるのだろう?

529 名前:デフォルトの名無しさん :04/03/14 23:52
>>528
止まる場所、とか、止まる保証全く無いんだが。
WinはリアルタイムOSジャないよ。

530 名前:デフォルトの名無しさん :04/03/14 23:56
>>529
止まらない場合ってどんなとき?


531 名前:デフォルトの名無しさん :04/03/15 00:04
まあ、ウインドウズメディアプレーヤーが止まるよな。
このときの止まらないときは、フォアグラウンドのタスクが止まらないとき。
Winがフォアグラウンドでファイルを整理し始めると肝心のプログラムが録画
し始める以上にCPU喰いやがってフレーム落ちするんだよな。
しょうがネーから自分で最高のレベルで動くように改造したよ。ぷ

532 名前:デフォルトの名無しさん :04/03/15 00:06
start /high のことか?

533 名前:デフォルトの名無しさん :04/03/15 00:12
>>532
お前馬鹿か?
自分でOSを回避しないとリアルタイムできないだろう。変なの。


534 名前:デフォルトの名無しさん :04/03/15 00:14
>>531
これか? そりゃ、止まらんだろ。

REALTIME_PRIORITY_CLASS
このプロセスが、最も高い優先順位クラスを持つプロセスであることを示します。
このクラスを割り当てられたプロセスに所属するスレッドは、重要なタスクを実行する
オペレーティングシステムのプロセスを含むほかのすべてのプロセスのスレッドより
先に実行されます。少しでも長い時間実行すると、ディスクキャッシュがフラッシュ
されなくなったり、マウスが応答しなくなることがあります。

535 名前:デフォルトの名無しさん :04/03/15 00:20
>>534
タスクマネジャーそのまんまだな。
お前、システムアイドルプロセスを止める方法知ってる?
そうするとCPUが少し早くなるよ。

536 名前:デフォルトの名無しさん :04/03/15 00:29
>>535
TerminateProcess()すりゃええんでないの?
でも、そんなことをしたら色々不都合なことが起きそうだな。


537 名前:デフォルトの名無しさん :04/03/15 01:47
ヘー、馬鹿かよ、未だに強制終了すると、なんにも起きないな。
悪かった。俺が全て悪かったよ。これで良いか?
もう、全て悪い使い方悪かったよ。済みません。

538 名前:デフォルトの名無しさん :04/03/15 03:49
デバッグAPIで無理心中すりゃいいじゃん

539 名前:デフォルトの名無しさん :04/03/15 10:53
GetSaveFileNameを利用してコモンダイアログを呼び出しています
ダイアログ内でフォルダを開こうとするとアクセスバイオレーションエラーが
発生するんですがこれはどうにか出来ないものなのでしょうか?

環境はWinXP、VC++6.0SP5を使っています

540 名前:デフォルトの名無しさん :04/03/15 12:40
>>539

541 名前:デフォルトの名無しさん :04/03/15 21:32
DLLファイル等からリソース内のアイコンを抽出するものを作っています。
EnumResourceNamesの第一引数にそのファイルのハンドルがいるのですが、
LoadLibraryEx(Filename, NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_WITH_ALTERED_SEARCH_PATH);
とこんな感じで取得しています。
ですが、よくある実行不可能なリソースだけのDLLだとLoadLibraryExが0を返します。
こういったDLLを同じように扱うことはできるでしょうか。




542 名前:デフォルトの名無しさん :04/03/15 21:41
おとなしくResourceHackerを使えば

543 名前:デフォルトの名無しさん :04/03/15 21:58
>よくある実行不可能なリソースだけのDLL
って どこにあるの? リンクを教えてみて。 ホントにDLLかどうか見てみたい。

544 名前:デフォルトの名無しさん :04/03/15 22:16
>>542
それでも読み込めないです…
eXeScopeだといけるんですが。

>>543
ttp://hp.vector.co.jp/authors/VA013969/
こちらのアイコン集です。
ちゃんと読み込めるアイコンビューアもありますし、上の通りeXeScopeでも読めます。
プログラムの無いDLLといった感じでしょうか…

545 名前:デフォルトの名無しさん :04/03/15 22:50
DUMPBIN : warning LNK4095: "xxx.dll" は NE フォーマットの実行可能ファイルです

546 名前:541 :04/03/15 23:27
何となく原因が判明…
そのDLLが16bitなのでLoadLibraryが失敗してるみたいです。
これは諦めるしかないんでしょうか…

547 名前:デフォルトの名無しさん :04/03/15 23:42
あてずっぽうだけどLoadLibraryExがNEだめなので、LoadLibraryだったらいけるとか?

548 名前:デフォルトの名無しさん :04/03/15 23:47
おまいら! NE形式はNew Exe、つまり新EXE形式って知ってたか? これに対応してないリンカはバージョンが古いんだよ

549 名前:デフォルトの名無しさん :04/03/15 23:50
>>547
LoadLibraryはLoadLibraryExのラッパーですが?


550 名前:デフォルトの名無しさん :04/03/16 06:32
ウインドウに子ウインドウを載せるるときはどうやりますか?


551 名前:デフォルトの名無しさん :04/03/16 06:45
>>546
16bitのEXEを使ってLoadLibrary しても EnumResourceNamesが無いからねえ
自前でやった方が速いんじゃないの?

3C番地に PE ヘッダのオフセット があり
オフセット+0x24 が16bitのリソースへの位置(オフセット相対)
オフセット+0x34 が16bitのリソースの個数


552 名前:デフォルトの名無しさん :04/03/16 10:36
ListCtrlで質問。
オーナードローで描いてるんですが、列幅変えるとグリッドの線が残ってしまいします。
そこで全部書き直ししようとしてInvalidateRect(NULL)とUpdateWindow()したんですが全然症状が変わりません。
この方法じゃ駄目なんでしょうか?

553 名前:デフォルトの名無しさん :04/03/16 10:49
どのタイミングでオーナードローしてる?
自分の環境ではグリッド線が残ることはないが?

554 名前:デフォルトの名無しさん :04/03/16 10:50
>552
オーナードローなんだから、当然、全部自分で書き直さな。

>425の答、知ってる人いないの?

555 名前:552 :04/03/16 11:21
>>553
DrawItemで描いてます。

>>554
や、だからDrawItemにdでこさせようとしてるんですが上手く行かんのですよ。


556 名前:デフォルトの名無しさん :04/03/16 11:35
case WM_DRAWITEM:
  if(wParam == IDC_LIST){
    描画処理関数((LPDRAWITEMSTRUCT)lParam);
  }

↑こんな感じってことだよね?

557 名前:552 :04/03/16 11:46
>>556
はいそんな感じです。

・・・と言いますか、>>425と同じ話のような気が。
列幅変更した時は、スクロールしない限りDrawItemにdでこないぽいです。
全画面再描画イベント起こせればいいんですが・・・

558 名前:デフォルトの名無しさん :04/03/16 11:51
列幅変更すればバリバリWM_DRAWITEMdできてますが...
猫とか丸ごとコピーしてサンプル作ってみたらどうですか?

559 名前:デフォルトの名無しさん :04/03/16 12:14
こんにちは

質問したいことがあります。

「.xls」ファイル内のデータを取り出したいのですが、
.xlsファイルのフォーマットがわからない為、データ解析ができません。
Win32APIには、.xlsのファイル内データを取り出すための専用ライブラリーが存在するのでしょうか?

(.xlsファイルを.csvに変換するというやり方でもかまいません。)

560 名前:541 :04/03/16 12:19
>>551
ありがとうございます。今丁度知りたかった部分でした。
とりあえずやってみようと思います。

561 名前:デフォルトの名無しさん :04/03/16 12:28
>>559
ODBCでも使えば?

562 名前:デフォルトの名無しさん :04/03/16 12:31
これは?
http://www.attain-sys.com/vc/excel/vc_excel.html

563 名前:552 :04/03/16 14:59
原因特定出来ました。
列の最小幅を設定するためにHDN_ENDTRACKを引っかけて、
その中で幅を再設定していたのが問題だったようです。

そこで改めて質問です。
列幅の最小値を設定するのに上記以外の方法はありませんか?

564 名前:デフォルトの名無しさん :04/03/16 15:12
幅を再設定してもメッセージ戻り値をちゃんと返せば
問題なく再描画されるのでは?

565 名前:デフォルトの名無しさん :04/03/16 23:20
jpegファイルをウィンドウ上に表示したいのですがdllは使いたくありません
できればソースがあるとうれしいのですが

566 名前:デフォルトの名無しさん :04/03/17 00:00
libjpeg使え

567 名前:デフォルトの名無しさん :04/03/17 00:19
>>565
スレ違いの気がしてこないか?

568 名前:デフォルトの名無しさん :04/03/17 00:26
BITMAPV5HEADER

569 名前:デフォルトの名無しさん :04/03/17 00:56
>>565
GDI+でどうぞ

570 名前:デフォルトの名無しさん :04/03/17 00:58
8bppのDIBSectionを作るとき、パレット関係のデータ(領域)を
用意せずにCreateDIBSectionを呼びだして、後からSetDIBColorTable
でパレットを設定してるんですがこれって問題ないでしょうか。
変なところにアクセスしてないか心配なので...

571 名前:デフォルトの名無しさん :04/03/17 04:37
ツールバーの正確な幅を知る方法はないでしょうか?
ボタンサイズから幅を得ようとすると、セパレータがある場合当然ズレがでるし。

572 名前:552 :04/03/17 09:20
どうも、解決しました。
ふとMFCの方を見たらRedrawItems()と言うまんまな関数が用意されていたので、HDN_ENDTRACKフック内でこれ使って対処しました。
結果的にMFCアプリとして書き直しになりましたが、まあ問題が出ているよりはマシと。
どうもお世話様でした。

573 名前:デフォルトの名無しさん :04/03/17 09:51
>>565
IPicture

574 名前:573 :04/03/17 09:56
すまん。途中で書き込んでしまった。
サンプルはこれ↓
http://support.microsoft.com/default.aspx?scid=kb;ja;218972

575 名前:デフォルトの名無しさん :04/03/17 10:14
[フォントの指定]コモンダイアログボックスで苦戦しています。
あるマシンで選んだポイントサイズをファイルに保存し、そのポイントサイズを別のマシンのダイアログでデフォルト値とする必要があります。
CHOOSEFONT::iPointSize は出力用だし、
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
で計算しようにも HDC がありません。
どうすればよいのでしょうか?

576 名前:デフォルトの名無しさん :04/03/17 11:38
htmlの<table>タグのような表を表示しているソフトを見た事があるんですが、
猫でもわかるプログラミングを見ても、何を使えばできるのか分かりません。
WinAPIに表を作るクラスはあるのでしょうか?

577 名前:デフォルトの名無しさん :04/03/17 11:43
http://www.kumei.ne.jp/c_lang/sdk3/sdk_221.htm
これのこと?

578 名前:576 :04/03/17 13:42
>>577
え〜と、<table>タグみたいな表を見たのは、DLで手に入れた全く関係ないソフトです。
WinAPIでそのような事ができるのならば使おうと思ったんですが、
そもそも、そのソフトは自前で<table>タグっぽい表を自前で描画していただけかも知れません。

お騒がせしました。

579 名前:デフォルトの名無しさん :04/03/17 13:44
>>578
よくわからんのだが、table(つまりHTMLをレンダリングして)使いたいのか?
それともtable要素のような表を使いたいのかどっちだ。
全くわけがわからん。
前者であればIEコンポ使えばいいし、後者なら>>577
当然自前で描画する方法もある。
質問するときはわかるように説明してくれ。


580 名前:デフォルトの名無しさん :04/03/17 14:12
というか、質問したいことさえわかっていない模様。

581 名前:576 :04/03/17 14:33
>>579
説明が下手で申し訳ないです。
目的は、htmlで<table>タグを使った時のような、表を描画したいです。
以前、表を描画するクラスを作ったんですが、イマイチすっきりした設計ができなかったので、
既に用意された物があるのか聞きたかったです。

582 名前:576 :04/03/17 15:09
>>581の補足ですが、
表のレイアウト(特にrowspanによるセルの連結)が自由にできるので、
<table>タグを使いたいと思いました。

IEコンポで検索したら、いろいろでてきたので、じっくり勉強しようと思います。
どうも、ありがとうございました。

583 名前:デフォルトの名無しさん :04/03/17 19:21
>>573
thx.
とてもグッドです。

584 名前:デフォルトの名無しさん :04/03/18 04:17
リストビューにアイコンを表示したいんですが、何故かできないのです。

//リソースの内容
CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,6,25,174,120
MY_ICON ICON DISCARDABLE "my_icon.ico"

//イメージリスト作成後、リストビューに挿入
hList = GetDlgItem(hWnd, IDC_LIST);
hImage = ImageList_Create(16, 16, ILC_COLOR4, 1, 0);
ImageList_AddIcon(hImage, LoadIcon(gInst, "MY_ICON")); //gInstはNULLにしても駄目です
ListView_SetImageList(hList, hImage, LVSIL_SMALL);

//リストビューに項目挿入時
listitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
listitem.pszText = FileName;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.lParam = i;
listitem.iImage = 0;
ListView_InsertItem(hList, &listitem);

わかる方、いらっしゃったら教えてください。

585 名前:デフォルトの名無しさん :04/03/18 04:18
タイマーをKillTimerするときって2度KillTimerしないといけないとか
そんなような議論があったかと思いますがそうなのですか?
昔見たコードでうろおぼえですが
case WM_TIMER:
 KillTimer(XXX);
 if()
 {
  KillTimer(XXX);
 }

とかなんとかっていうコードを見たような。。
あやふやですみません。



586 名前:デフォルトの名無しさん :04/03/18 10:54
>>584
まずはエラーチェックしてみたらどう?
LoadIconやImageList_AddIconが成功しているかどうかとかさ。
片っ端からエラーチェックすれば、どこで躓いてるか分かるでしょ。


587 名前:デフォルトの名無しさん :04/03/18 13:31
既存のソフトをCreateProcessで起こしたのですが、[←][→]キーを送れなくて困っています。
▲ PostMessage(hWnd, WM_KEYDOWN, VK_RIGHT, 0);
アルファベットは送れています。
◎ PostMessage(hWnd, WM_KEYDOWN, 'Z', 0);
原因や対策など何か御存知の方いらっしゃいましたら、すみませんが教えてください。

588 名前:584 :04/03/18 13:42
>>586
if(ListView_SetImageList(hList, hImage, LVSIL_SMALL) == NULL
で引っかかっているようなので、その辺り調べてみます。どうもでした。

589 名前:デフォルトの名無しさん :04/03/18 13:49
自作のアプリに他のアプリを取り込みたいのですがやり方が解りません
どうやれば出来るでしょうか?

590 名前:デフォルトの名無しさん :04/03/18 13:51
>>589
CreateProcess()

591 名前:587 :04/03/18 15:21
>>589 「他のアプリを取り込みたいのですが」
>>590さんの速攻レスに追加。

CreateProcess() で得た PROCESS_INFORMATION を保存しておく。
起こした他アプリの窓が開いた後で EnumWindows() する。
OSが、こちらの関数 CALLBACK EnumWndProc() を呼んで来る。
呼ばれたら、引数で渡されたhWndから GetWindowThreadProcessId() でプロセスIDを得る。
保存しておいたPROCESS_INFORMATIONのプロセスIDと一致したら、それが起こした他アプリなのでhWndが判明する。
そのhWndを使って、他アプリにPostMessage()などを行う。

以上の手順となります。
しかしPostMessage()でVK_RIGHT[→]が送れなくて悩んでいるワタシ…

592 名前:デフォルトの名無しさん :04/03/18 15:39
VK系統はkeyなんちゃら関数でやらんと駄目だった記憶。
大昔組んだのだが忘れた。
PostMessageやSendMessageじゃなかったのは確か。

593 名前:デフォルトの名無しさん :04/03/18 15:41
以前にも聞いた気がするのですが、
spy++がやっているような、ウインドウの強調表示をさせるには、
どうすればいいのでしょうか?

594 名前:デフォルトの名無しさん :04/03/18 15:44
>>592
これのことか?↓
keybd_event()

595 名前:デフォルトの名無しさん :04/03/18 15:53
>>593
多分、FrameRgnを使ってごにょごにょとやってるんだと思ふ。

596 名前:590 :04/03/18 16:39
>>591
WaitForInputIdle()もお忘れ無く

597 名前:デフォルトの名無しさん :04/03/18 23:01
「猫でもわかるプログラミング」を読破したらすっかり
オブジェクト指向でない脳になってしまいました。
ちゃんとクラス使っててWin32 APIが学べるサイトはないですかね。

598 名前:デフォルトの名無しさん :04/03/18 23:07
>>593
普通のウィンドウは PatBlt で四辺塗りつぶし。
リージョン使ってるウィンドウは仮想DC に FrameRgn してから BitBlt で転送描画。
自分が作ったときはこうやった。

599 名前:デフォルトの名無しさん :04/03/18 23:10
>>597
MFCとかATLのサイトでも見とけ。
APIの解説をするサイトで、いちいち使えるクラスライブラリから作るのか?

600 名前:デフォルトの名無しさん :04/03/19 01:52
>>597
ウィンドウをC++のクラスでラップする方法なら↓ここが参考になるかも・・・

http://techtips.belution.com/ja/vc/0009/

601 名前:デフォルトの名無しさん :04/03/19 11:02
なら素直にWTL使った方が良いのでは・・・


602 名前:デフォルトの名無しさん :04/03/19 11:39
>>597
MFCかVCL使いなよ。
OOPしたいのにWin32API使うなんて矛盾してる。

603 名前:デフォルトの名無しさん :04/03/19 11:51
ホントに初心者です。よろしくお願いいたします。

自作のアイコンをツールバーに表示しようと思っているのですが、
16色4bitの背景透明のBMPを作る手順がわかりません。
自分がやってる方法は
・Photoshop Elementsでアイコンの横並びの絵を描いて
・インデックスカラーで”ローカル”パレットで16色に減色
・bmp形式でWindows標準の4bitで保存
<実行結果>背景透明じゃないし、アイコンの絵がズレてる。

インデックスカラーで"システム"パレットで減色するとアイコン
の絵のズレはないんですが、8bitで背景も透けませんでした。
.rcファイルに
BM_TOOLBARBITMAP DISCARDABLE "ToolIcon.bmp"
TBBUTTONで構造体設定、CreateToolbarExでツールバーを生成してます。

いろいろ検索してみたんですが、フルカラーの画像から16色4bitの背景透明のBMP
に変換するまでの過程が説明されたものが見つかりませんでした。
ご教授ください宜しくお願いいたします。m(_ _)m

604 名前:デフォルトの名無しさん :04/03/19 12:02
>>602
別に矛盾はしてない。
「作りたい」より「学びたい」であるならば代替案も要らないな。

でもまあ、OOPの基礎があればWIN32API乗っけるくらい屁でもねえだろ
脳内変換でがんばればいいじゃん、という話だな
猫のソースを自分でクラスにすりゃそれで実習までできる。

605 名前:デフォルトの名無しさん :04/03/19 12:03
>>603
Edgeっつーツールが透過つきのアイコンファイルを
エクスポートしてくれるから試してみ。

606 名前:デフォルトの名無しさん :04/03/19 12:12
>>605
D-Pixedもico出力フィルタ入れれば透過/複数サイズ色数格納できたりする

607 名前:593 :04/03/19 12:18
>>595
>>598

ありがとうございます。
試してみます。

608 名前:603 :04/03/19 14:27
Edgeを試してみました。背景透過エクスポートにはico形式しかありませんでした。
自分はBitMap形式が欲しかったのでちょっと違ったようです。
(※ただ、おかげさまで実行ファイル(exe)のアイコンは見事透過されるようになりました。)

「4bit16色のBitMap形式で背景透過する方法」を、もう一寸詳しいやり方を
ご教授くださいますでしょうか。
度々申し訳ございませんが宜しくお願いいたしますm(_ _)mm(_ _)m

609 名前:デフォルトの名無しさん :04/03/19 14:29
OOPやりたいならさっさとC♯/.NETに移行するって手もあるぞ。

610 名前:デフォルトの名無しさん :04/03/19 14:33
>>608
別途α画像を用意する

パレットが化けてカラーキーじゃ抜けないってことでそ?

611 名前:デフォルトの名無しさん :04/03/19 14:53
.Netで作ったアプリは禿げしく重く感じるのは俺だけ?
ネイティブコードにはまだまだ到底かなわないとオモータよ。

612 名前:デフォルトの名無しさん :04/03/19 14:54
.NetよりまだVBのEXEの方がマシよーん。

613 名前:605 :04/03/19 15:00
>>603
すまん。最初の方だけ読んでicoだと思い込んでた。
ツールバーあんまり詳しくないんであれだが、背景透明というのは
ボタンの表面色に合わせるってことだろうか?
っていうことであればとりあえず↓なんかを参照。
http://yokohama.cool.ne.jp/chokuto/urawaza/toolbar1.html

614 名前:デフォルトの名無しさん :04/03/19 15:09
>>603
BMPは画像形式として、透過をサポートしてないよ。
ツールバーについてはよく知らないが、何か「透過色」があるんじゃないのか?
「この色を設定してたら透けるようになる」みたいな。

615 名前:デフォルトの名無しさん :04/03/19 15:14
>>590-591
亀レスですがありがとうございます
やってみます

616 名前:デフォルトの名無しさん :04/03/19 15:47
>603
ツールバー作ったこと無いけど、
LoadImageでフラグをごにょごにょ指定して読み込めばいいんじゃないの?

617 名前:デフォルトの名無しさん :04/03/19 16:07
>>611
MSが本気で.NETのライブラリをネイティブなものにするのなら、Longhornにおける
W32APIとの速度優位性は逆転するはず。ただ、そうするとWindowsを1/3ほど
再設計/再実装する必要が出てくるんで、エンバグは必至(いくら.NET Frameworkを
叩き台としてテストしているとはいえ)。なので、将来5年位はW32APIで行けると思ってる。


とスレ違いネタでした。

618 名前:デフォルトの名無しさん :04/03/19 16:15
WIN32 APIで大体の事ができるようになってきました。(C言語)
(Windows標準で付いてくるペイントブラシが自作できる位)
「猫でもわかるプログラミング」も大体、理解しました。
C++は、DOS等で練習問題程度はできるようになりました。
他にできる言語はVB、Perl位です。MFCはやってません。

この状態で次に勉強するのに最適な方向は何でしょうか?
MFC?ATL?WTL?VCL?GTK?.Net?
それとも>>597みたいに自作でクラスライブラリ作成??

619 名前:デフォルトの名無しさん :04/03/19 16:21
↓次にお前は「大体の事ができるようになってきたなんてヤツに限って(」と言う。

620 名前:デフォルトの名無しさん :04/03/19 16:22
>>618
>この状態で次に勉強するのに最適な方向は何でしょうか?

マジレス:UNIX

621 名前:デフォルトの名無しさん :04/03/19 16:23
勉強ばっかしてないでとっとと実用的なアプリを書け。

622 名前:デフォルトの名無しさん :04/03/19 16:29
>>618
なにがしたいの?何が作りたいの?

623 名前:デフォルトの名無しさん :04/03/19 16:42
>>618
それだけできれば食っていける

624 名前:デフォルトの名無しさん :04/03/19 16:54
>>618は半年ROMってからで直せ
次はネタ振りできるようになってから書き込めよ

625 名前:618 :04/03/19 17:25
書き込んで風呂に入って出てきたら
レスがいっぱい付いててビックリしました。

>>620
実はUNIXも興味はあるんです。やっぱり
ネットワーク系のプログラムだとUNIXの方が
勉強の環境としては良いんですかね?

>>621
実用的なアプリですか・・・。
作った事はあるのですが
ここで晒すと自分がバレてしまうので・・・。

>>622
「何が作りたい」というのは色々ありますが
作る上での環境が現在はC言語(Not C++)で、
WIN32 APIゴリ押しという感じがあるので
もうちょっと再利用性とかライブラリとか
使いやすい環境(言語,フレームワーク等)が
無いかなー、と思ってるところです。

>>632
ありがとうございます。実はコレで食っています。
でも、Windowsプログラムのみで食ってる訳では
無いです。本職はwebやflashやdirector等です。
それらで足りない部分をC等で補ってます。

>>624
すみません。でも、ネタでは無いんです。
ここのROMは3年くらいやってます。

626 名前:デフォルトの名無しさん :04/03/19 17:39
>>618
いまさら先の短いVC+MFC覚えるのもしんどいしねぇ。王道ではあるけど。
.NETいくならC#だしWin32に残るならVB、Delphi、C++Builderあたりが無難でないの。

627 名前:デフォルトの名無しさん :04/03/19 21:00
C++なら再利用できるというのは幻想

628 名前:デフォルトの名無しさん :04/03/19 21:03
どっちみち再利用なんてしないんだから

629 名前:デフォルトの名無しさん :04/03/20 01:56
>>616
LR_LOADTRANSPARENT でよいのでは。


630 名前:デフォルトの名無しさん :04/03/20 05:06
VC6を使ってます。
dll内のグローバル変数を共有メモリにするため
#pragma data_segで、変数を確保しています。

そこで質問です。共有のために、data_seg内の変数は初期化が必須らしいのですが、
配列の場合はどうすれば良いのでしょうか。

今は例えば次のようにやっていますが、配列の長さを変えるたびに一苦労。

char name[20]={
 '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
 '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
};

何か良い方法がありましたら、ご教授下さい。

631 名前:デフォルトの名無しさん :04/03/20 05:37
char name[20] = {0};

632 名前:( ´,_ゝ`) :04/03/20 06:08
>>614
しかしながら、XPから32bitのBMPをアルファチャネル付きとして
扱えるのであった。

アルファチャネル付きのアイコンやツールバーはここが参考になる。
http://www.microsoft.com/japan/msdn/windows/windowsxp/winxpicons.asp#winxpicons_toolbar

633 名前:デフォルトの名無しさん :04/03/20 12:32
そりゃ話が違うだろ・・・>αと透過

634 名前:デフォルトの名無しさん :04/03/20 13:03
そうか?

635 名前:デフォルトの名無しさん :04/03/20 14:28
>>633 ( ´,_ゝ`)プッ・・

636 名前:デフォルトの名無しさん :04/03/20 16:32
>>597
亀レスすまそ

Win32 APIは立派にオブジェクト指向だぞ
第1引数がハンドルになってる関数いっぱいあったろ
概してOSとのやり取りはオブジェクト指向の権化のようなものだ

オブジェクト指向でない部分というとWinMainに長々と書きまくることだとか
ハンドルをポインタにキャストする場面だとかだ

決してclassという予約語を使うことがオブジェクト指向なわけではない
そこを間違えてる限りオブジェクト指向に関して進歩はないぞ

637 名前:デフォルトの名無しさん :04/03/20 17:52
Cでもオブジェクト指向厨久しぶりに見かけたな。

638 名前:デフォルトの名無しさん :04/03/20 17:53
>>636
いい事言うね。貰いますよ(w

ハンドルオブジェクト削除関数 CloseHandle(HANDLE handle)
とか見てると、つくづくオブジェクト指向だなって思う。
どういう種類のハンドルなのか、実行時にしか判らないのにエライと思うよ、WIN32API。

そんなわけで、オブジェクト指向を無意味に拒絶するヤシは
スルーする方向でヨロ。

639 名前:デフォルトの名無しさん :04/03/20 18:23
そうなると fopen() なんかもオブジェクト指向になるが。。。
FILE *fp なんかメンバー変数とみなせるしな。丸見えだけど。


640 名前:603 :04/03/20 18:28
遅くなりました。みなさんレスありがとうございます。

みなさんのアドバイスを見て、初心者なんで自分の実力以上に
大変で、どれも上手くいかなかったり試せてなかったりです(汗)。
そんで、ちょっとオープンソースのプログラムを参考にさせていただこうと思い、
以下のSotaさんのサイトのソース(ttPageやFFFTP等)を眺めたところ、

ttp://www2.biglobe.ne.jp/~sota/index.html

ソースにLR_LOADTRANSPARENTやバーの表面色に背景色を合わせるような処理が
見あたらないんで半分お手上げ状態です。
ツールバーのビットマップソースを見てみるとRGB(192.192.192)で
描かれていて「これが透過色かな?」とアイコンを作ってみたんですが、
インデックスカラー減色のシステム(Windows)カラーにRGB(192.192.192)の色が無く透過せず。
で、他の減色方法で試すと、透けました!けどボタンの枠と絵がズレちゃってる_| ̄|○
というわけで透過色と減色方法についてちょっと調べています。
詳しい方がいたら&Sotaさんの方法が判る方、ご教授くださいm(_ _)m
初歩的な事で申し訳御座いません。長文失礼いたしました。

641 名前:デフォルトの名無しさん :04/03/20 19:11
>>640
ソース晒せ

642 名前:デフォルトの名無しさん :04/03/20 19:27
>>639
思うに >>636>>638
「抽象化」と「オブジェクト指向」がごっちゃになっているんではないかと。


643 名前:デフォルトの名無しさん :04/03/20 20:12
>>640
詳しくないけども一応。CreateMappedBitmap とか調べてみそ。
RGB(192.192.192) は COLOR_BTNFACE に置き換えられるはず。
枠と絵がズレるはよくわかんない。

644 名前:デフォルトの名無しさん :04/03/20 20:17
>>639
>そうなると fopen() なんかもオブジェクト指向になるが。。。

ある意味、正しいと思うよ。

645 名前:643 :04/03/20 20:22
ゴメン。CreateMappedBitmap は無視してけろ。
なんか、別の関数の説明にあったような気がする。
ダメだ。忘れた。自力でがんばれ。

646 名前:デフォルトの名無しさん :04/03/20 20:48
ツリービューでアイテムをクリックしたらNM_CLICKが来るけど、
ダブルクリックしたらNM_CLICKが来た後にNM_DBLCLKが来ちゃいます。
NM_CLICKが来た時点だとクリックかダブルクリックか分からないので
困るんですけど、どうしたらいいでしょうか??

647 名前:デフォルトの名無しさん :04/03/20 21:18
>>644
俺もそう思う。
例えば手元の FreeBSD 4.7R + gcc 2.95.4 の stdio.h みて見ると...

typedef struct __sFILE {
 unsigned char *_p; /* current position in (some) buffer */
 int _r; /* read space left for getc() */
 int _w; /* write space left for putc() */
(... 中略 ...)
 /* operations */
 void *_cookie; /* cookie passed to io functions */
 int (*_close) __P((void *));
 int (*_read) __P((void *, char *, int));
 fpos_t (*_seek) __P((void *, fpos_t, int));
 int (*_write) __P((void *, const char *, int));
(... 中略 ...)
} FILE;

となってて、C++ の仮想関数をポインタで実装している。
C で抽象化を実現する時の常套手段。

648 名前:デフォルトの名無しさん :04/03/20 22:53
ま、初期の C++ はプリプロセッサで C のコードを吐いてたわけだから。


649 名前:デフォルトの名無しさん :04/03/21 00:46
>>646
ttp://techtips.belution.com/ja/vc/0040/

650 名前:デフォルトの名無しさん :04/03/21 02:27
質問なのですが、
ダイアログじゃない、CreateWindowで作った窓の上にあるコントロールを
Tabで移動したいので、
親窓にWS_EX_CONTROLPARENT、コントロールにWS_TABSTOP
を指定してCreateしたのですが、
これだけでは全く反応してくれません。

他にどういった指定が必要なのでしょうか?

651 名前:デフォルトの名無しさん :04/03/21 09:26
IsDialogMessage

652 名前:デフォルトの名無しさん :04/03/21 11:04
>>651
650じゃないけど、
タブで親子関係のコントロール間も移動させたいとなると、
IsDialogMessageに渡すだけじゃ無理っぽくない?
フレーム無しのダイアログ貼り付けた時とか、
プロパティとかのタブコントロール周りを真似る時とか。
昔うまくタブ移動できなかったよ。
メッセージちゃんと処理してなかっただけかもしれないけど。


653 名前:デフォルトの名無しさん :04/03/21 12:14
ダイアログは張り付けられたコントロールをサブクラス化してるんじゃなかったか?

654 名前:デフォルトの名無しさん :04/03/21 12:34
サービスからHTTPでWebサーバに接続したいのですが
サービスでWinInetは使用すべきでないようですし、
WinHTTPはWindows 2000以降でもサービスパック当てないと
使えないようですし、何か他の簡単な方法がありませんか?

655 名前:デフォルトの名無しさん :04/03/21 12:39
winsockでだめなの?

656 名前:デフォルトの名無しさん :04/03/21 12:57
>>655
できればもっと簡単なAPIがないものかと

657 名前:デフォルトの名無しさん :04/03/21 13:05
libwww
APIでもなんでもないが。

658 名前:デフォルトの名無しさん :04/03/21 13:45
> サービスでWinInetは使用すべきでないようですし

マジ?
ソースがあれば欲しい

659 名前:650 :04/03/21 13:58
>651
サンクス、出来ました。

660 名前:デフォルトの名無しさん :04/03/21 14:49
>>657
機能的には良さそうですが使うまでが簡単では
なさそうですねえ...(私の頭には)

>>658
Platform SDKのWinInetのトップページに書いてありました。
WinHTTPが出たから新しいほう使え、くらいのことかもしれない
と思ってましたが、今検索したら
http://support.microsoft.com/default.aspx?scid=kb;ja;238425
が引っかかりました。少し古いですけど。

661 名前:デフォルトの名無しさん :04/03/21 15:07
>>660
おおさんくす
winhttpの存在を知らなかった・・・
ところでコレ、XP以降専用なんですかね。

662 名前:デフォルトの名無しさん :04/03/21 15:36
2000とXPも中身はだいぶ違うからな・・・
新機能に絡んだ開発は嫌気がさす

663 名前:デフォルトの名無しさん :04/03/21 15:56
>>662
俺は楽しいけど。てか、ずーと同じOSで仕事するってのは
考えただけでアクビが出そう。

664 名前:デフォルトの名無しさん :04/03/21 17:15
>>661
WinHTTP 5.0はXPではおそらく標準で入っていて、
2000やNT4には追加コンポーネントだったみたいです。

WinHTTP 5.1はWindows 2003では標準、
Windows 2000 SP3やXP SP1でもインストールされるようです。
5.1が出たので、5.0の追加コンポーネントはもう配布していません。

665 名前:デフォルトの名無しさん :04/03/22 00:02
インプットボックスみたいなコモンダイアログボックスはありますか?

666 名前:デフォルトの名無しさん :04/03/22 00:50
GetOpenFileNameをフックして、ドライブリストとファイル一覧と
タイプ一覧とプレースバーを消して使うといいよ。

667 名前:デフォルトの名無しさん :04/03/22 09:53
すげー発想だな(w


668 名前:デフォルトの名無しさん :04/03/22 10:06
俺はメッセージボックスをフックとサブクラス化使って
>>665がやりたいようなことやってるぞ。
こんなアフォなことするくらいなら大人しくダイアログ作った方が早いけど。

669 名前:デフォルトの名無しさん :04/03/22 19:26
実際にやるかどうかはともかく、
そういう柔軟な発想ができるってことが大事なのかもね

670 名前:デフォルトの名無しさん :04/03/22 20:52
たしかに…
ココまで無理やり代用するのはすごい

671 名前:デフォルトの名無しさん :04/03/22 22:41
Windowsでは、実行時にメモリ上のバイナリイメージからライブラリを動的にロードする方法はありますか?
LoadLibrary関数はディスク上のDLLファイルからの入力しかサポートしていないようですが、
同じようなことをメモリ上に展開したイメージから行いたいのです。

672 名前:デフォルトの名無しさん :04/03/22 22:43
メモリ上にあるなら、直接呼べよ。 何の障害があるんだ?

673 名前:デフォルトの名無しさん :04/03/22 22:45
データ領域のコードって実行できるんだっけ?

674 名前:デフォルトの名無しさん :04/03/22 22:47
>>673
困った事にな。 それが禁止出来るならバッファオーバランなんて相当なレベルでまで防止出来るだろ。

675 名前:デフォルトの名無しさん :04/03/22 22:50
そういやそうか。
仮想メモリ上のコード領域の自己書き換えが駄目なんだっけ?

676 名前:671 :04/03/22 22:53
説明不足ですみません。
メモリ上にはあくまでPEフォーマットなどのバイナリデータとして存在しているだけで、
関数やリソースのアドレスが正しくマッピングされているわけではありません。
DLLをファイルからロードしてメモリにマッピングするのと同様に、
メモリ上のデータからライブラリをロードして使いたいということです。

677 名前:デフォルトの名無しさん :04/03/22 22:57
>>676 いったんファイルに書き出してしまうのが一番楽だが。

678 名前:デフォルトの名無しさん :04/03/22 23:00
ちゅーても、ロード時にリロケートされた結果のイメージがそんなに変わったりしないよな
今の32bit環境用に昔のCOMモデルのようなシンプルイメージを復活してもよさそうな気もする

679 名前:デフォルトの名無しさん :04/03/22 23:27
http://www.microsoft.com/japan/msdn/windows/windowsxp/securityinxpsp2.asp
XPのSP2からはスタックとヒープ領域のコードは実行不可になるみたいだよ。

680 名前:デフォルトの名無しさん :04/03/22 23:57
また遅くなるのか

681 名前:デフォルトの名無しさん :04/03/23 00:07
>>676
「可能」か「不可能」かという問いに対しては、
藻前のスキルが糞なら「不可能」という答えになるし、
そこそこデキるヤツなら「可能」という答えになる。

藻前がそこそこデキるヤツと仮定して聞くが、
メモリにあるそのイメージは、ページ境界とセクション境界は
どちらも4KBでリンクされたヤツなんだろうな。
そうでなけりゃあ、無理。っつーか、面倒。アライメントやりなおせ。

次に、もしリロケートされてないんなら、PEの仕様書みて自分でまずリロケートしろ。

イメージがリロケートできたら、多分、GetProcAddressできんじゃねえかな?
っつーか、自前でリロケートできりゃあ、GetProcAddressなんざ使わなくたって
エクスポートテーブル読めるわけだが。
それができれば、自前でヘルパルーチン書いて遅延ロードでもして使え。

ただし、初期化ルーチンは明示的に呼び出してやらなきゃいけない。
それにいくつかのAPI(GetModuleHandleとかGetModuleFileNameとか)は、
正しい結果が得られない場合があるので、そのモジュールの
IATをフックして、つじつまを合わせてやらないといけない。

...なんせ、OSはそのイメージをDLLとしてロードした覚えがないからな。
.tlsセクションなんて切られてた日にゃあ、多分、あきらめたほうがいい。

もしここに書いたことがワケワカメなら、すまんが逝ってよし。

682 名前:デフォルトの名無しさん :04/03/23 00:09
676じゃないが、んな無茶するのか。自前展開なんて・・・

683 名前:デフォルトの名無しさん :04/03/23 00:10
ネット越しに落としてきた怪しげなDLLを実行するのかね。

684 名前:デフォルトの名無しさん :04/03/23 00:12
>>679
今のところ対応してるのはK8ファミリだけだけどね。


685 名前:デフォルトの名無しさん :04/03/23 00:13
UPXのソースでも読んでみるとか

686 名前:デフォルトの名無しさん :04/03/23 00:24
GPLに汚染される気があるならupxでも読んでみるとかな。

687 名前:デフォルトの名無しさん :04/03/23 01:21
>> 679
>> 684

なあ、VC6 の atlbase.h の中で定義している
CWndProcThunk のロジックってこの仕様変更に引っかからないのかな?
思いっきり、構造体内部にコード書いてそこにジャンプさせてるんだが…

VC.NET の atlbase.h はこっそりと HeapAlloc に書き換えてるようだが。


688 名前:デフォルトの名無しさん :04/03/23 01:25
互換性モードで回避、かのう。

689 名前:684 :04/03/23 01:56
>>687
ATLはよくわからないけど、VirtualAllocかVirtualProtectでPAGE_EXECUTE系の属性を付けてなければ、その手のコードは全部引っかかります。
だから、HeapAllocでもひっかかります。
ただ、>>679の参照先によるとヒープ領域は"規定では実行不可"なのでオプションで実行可に変更可にできるんだと思う。
自動変数に確保だと、たぶんどうしようもないんじゃないかな。

690 名前:デフォルトの名無しさん : :04/03/23 02:07
デスクトップをムービーキャプチャするソフトを
作成中なのですが、
メディアプレイヤーなどで再生している 画像、ムービー
の部分だけキャプチャできません(透けて表示されてしまいます)

うまくおこなう方法はありませんでしょうか?
著作権がからむのでキャプチャできないようなんらかのプロテクトが
かかっているのでしょうか?もしかしてこれが電子透かしという技術?



691 名前:デフォルトの名無しさん :04/03/23 02:31
>>690
くすくす

692 名前:デフォルトの名無しさん :04/03/23 02:31
「オーバーレイ」でググってみましょう

693 名前:デフォルトの名無しさん :04/03/23 02:34
>>689
やっぱ、HeapAlloc でもダメですか。

ATL ってWindows に登録したWindowプロシージャからクラスの本当のWindowプロシージャ
を呼び出す間に HWND を this ポインタに差し替えるちょっとしたトリックを
上記の CWndProcThunk ってので実現してます。結構すっきりしていてオーバーヘッドも
少ないので、毎回クラスとウィンドウのマップを引いてる
MFC の実装より気に入ってたんだが。
ATL/WTL で書いたコードまとめてあぼーんですか…

いや ATL を使わない時でもウィンドウプロシージャとクラスを結びつける
便利で高速な方法として重宝してたんだけどね。
たった、10バイト強のトリックコードを
VirtualAlloc で確保すると言うのもなー


694 名前:デフォルトの名無しさん : :04/03/23 03:25
そうだったのか・・
勝手に”電子透かし”ってキーワードに結びつけてた・・ハズスィ。

■screen overlay

 Windowsの表示に、ビデオ出力を重ねて表示させること。
ビデオ出力を表示させるウィンドウをマゼンタなどの特定の色にしておき、
その部分にビデオ信号をアナログ的に合成し表示させる方法。

ということは、ムービーの画像をビデオカードで合成してるから、
デバイスコンテキスト経由だとキャプチャは不可能ってことか。

なにか良い手はないかな?


695 名前:デフォルトの名無しさん :04/03/23 03:34
ttp://zidney.define.jp/programing/sample/bind/
これか

696 名前:デフォルトの名無しさん :04/03/23 10:53
> 自動変数に確保だと、たぶんどうしようもないんじゃないかな。
VirtualProtectで実行属性を付けてやるのも駄目なの?

697 名前:デフォルトの名無しさん :04/03/23 11:17
>>693
WTLスレで結論が出ている。
全く問題ない。


698 名前:デフォルトの名無しさん :04/03/23 12:27
ATLをバージョンアップして再コンパイルすればWTLも動くという結論のようだが全く問題ない?

699 名前:デフォルトの名無しさん :04/03/23 12:38
とMicrosoftの中の人は主張してますな

700 名前:デフォルトの名無しさん :04/03/23 18:02
>>696
どうしようもないってのは、すでにexeになってる物のことです。
>>698の言うようにコンパイルし直せば問題ないです。

701 名前:デフォルトの名無しさん :04/03/23 22:25
>>694
CodeProjectにサンプルがあったような気がしたよ。ちゃんと見てないけど。

702 名前:デフォルトの名無しさん :04/03/24 00:29
過去にATLで作ったexeがSP2で動かなかったら嬉しいな。
SP2対応と称して、ただリビルド。それだけで客から金が取れて (゚д゚)ウマー

703 名前:デフォルトの名無しさん :04/03/24 05:48
それ、ビジネスモデル特許とらなきゃ

704 名前:デフォルトの名無しさん :04/03/24 08:56
無理、VBで多用され尽したビジネスモデルだろ

705 名前:デフォルトの名無しさん :04/03/24 18:43
ディスプレイの省電力モードの制御について質問なんですが
省電力モードにするには
PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, TRUE);
とすれば良いのはわかったのですが
省電力モードから復帰したときを知るにはどうしたらいいのでしょうか?

検索して
復帰したときSC_MONITORPOWER のLPARAMの内容が-1のイベントがくる
と書いてあるサイトを見つけたのですが、そのようなイベントは実際には発生しないので
何か良い方法を知っている人いませんか?

706 名前:x :04/03/24 19:58
>>705
WM_POWERBROADCAST
じゃないの?

707 名前:デフォルトの名無しさん :04/03/24 20:02
>>679
うわ、
おれが納品したやつまるごと動かなくなるな(w
ヒープ上のコードの実行って、シェアウェアの
プロテクト用途とかでも極自然なことだと思うけど。
きついなこれ。

708 名前:デフォルトの名無しさん :04/03/24 22:43
NamedPipeやRPCでローカルマシン上からの接続だけを
許可するにはどうしたらいいんですか?

709 名前:デフォルトの名無しさん :04/03/24 23:20
ポートをふさぐ。

710 名前:デフォルトの名無しさん :04/03/25 08:51
特定のアプリのウィンドウプロシージャを取得する方法を教えてください。
GetWindowLong&GWL_WNDPROCでやると「アクセスが拒否されました」ってエラーがでちゃいます。

711 名前:デフォルトの名無しさん :04/03/25 09:23
c言語のsetenvと同様のことができるapiありますか?
vbで使いたいのですが・・・

712 名前:デフォルトの名無しさん :04/03/25 09:52
>>711
SetEnvironmentVariable

713 名前:デフォルトの名無しさん :04/03/25 10:09
>>710
SetWindowsHookExでがんがれ

714 名前:デフォルトの名無しさん :04/03/25 10:13
ヒープやスタック上のコード実行禁止になるのは、Athlon64 とかのそ
ういう機能を持ったプロセッサだけじゃないの?



715 名前:デフォルトの名無しさん :04/03/25 10:32
>>712 thx.

716 名前:デフォルトの名無しさん :04/03/25 11:13
>>714
機器の指定までできるならいいけど

717 名前:デフォルトの名無しさん :04/03/25 11:58
タブ付きのダイアログなんか作るとき、VCのリソースエディタだと
非常に面倒で参ってます。何か便利な方法や、フリーのリソースエディタで
タブ周りが洗練されているものなど、ございましたら紹介して頂けないでしょうか

今はタブ毎に別のダイアログとして作成 > 最後にテキストでリソースを開いて統合
という、泥臭い方法やっています

718 名前:デフォルトの名無しさん :04/03/25 12:26
>>717
他人が読んでわかるように書け。

719 名前:デフォルトの名無しさん :04/03/29 04:31
復旧記念age

720 名前:(ログ差分カキコ) :04/03/29 05:41
719 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/25 12:37
>>717
DelphiでTPageControl
720 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/25 13:14
>>718
失礼。今までは例えば
タブAが押された>コモンコントロールのAを表示/Bを非表示に
タブBが押された>コモンコントロールのBを表示/Aを非表示に

としていたのですが、AとBが重なっていたりすると
リソース作りが非常に面倒で参っていたという話でした。

>>719
ありがとうございます。TPageControlについて調べていたら
どうやらタブが押された場合は、TPageControlの様に
ダイアログ毎交換してしまう方法が一般的なんですね。

Win32APIで、これをどうやって実現すればいいのか、もう少し調べてみます。

721 名前:(ログ差分カキコ) :04/03/29 05:44
> 最後にテキストでリソースを開いて統合
を自分でツール作ればいいんじゃないかな?

あるいは、DelphiのIDEでTPageControlで作った .DPRから変換作成したらどう?

722 名前:(ログ差分) :04/03/29 05:45
MFCのプロパティシート/ページも子ダイアログ切り替え式だよ。

723 名前:(ログ差分) :04/03/29 05:45
ごめん .DPR はプロジェクトで .DFM だ。 テキストで保存出来るから、変換は簡単

そういや昔そんなツールがあったような

724 名前:(ログ差分) :04/03/29 05:46
MSDNのタブコントロールの章に出てるね<ダイアログ切り換え

725 名前:(ログ差分) :04/03/29 05:47
プロパティシートコントロールを使えばいいと思うのだが、
だれも指摘しないのか?

726 名前:(ログ差分) :04/03/29 07:18
いいんじゃないの。タブだって間違いじゃないんだし。タブの方法を質問してんだし。

727 名前:(ログ差分) :04/03/29 07:18
プロセスハンドルを取得後ReadProcessMemoryで指定したメモリアドレスの情報を読み込むことが出来ますが
その逆で特定のプロセスの欲しい情報が格納されているメモリアドレスを調べる方法がありましたら教えてください。

728 名前:(ログ差分) :04/03/29 07:19
メモリエディタ作って「検索」したいってこと?
DLL潜り込ませて検索させるか
ReadProcessMemoryで丸ごと読み込んで検索するしかない

729 名前:727 (ログ差分) :04/03/29 07:22
そうですね早い話がメモリエディタですね
とりあえずReadProcessMemoryで0〜検索する方法でやってみたいと思います

730 名前:(ログ差分) :04/03/29 07:23
プロセスが持っているファイルハンドルを取得するAPIってありますか?
ハンドルテーブルというところに格納されているってのはわかったんですけど
APIが見当たらないです。

731 名前:(ログ差分) :04/03/29 07:23
エクスプローラでファイルを右DnDするとでてくるメニューはどうやったら作れますか?

732 名前:(ログ差分) :04/03/29 08:24
>>731
IShellFolder::GetUIObjectOf(IID_IContextMenu)

733 名前:(ログ差分) :04/03/29 08:25
win9x環境で一度ロードされてしまった16bitDLLをアンロードするにはどうやればいいの?

734 名前:(ログ差分) :04/03/29 08:26
Q: あるプログラムが使用しているWIN32APIやDLL内ファンクションの一覧をリストアップするような
ツールはないでしょうか? 検索してもノイズ情報しか見つけられませんでした...とほほ

735 名前:(ログ差分) :04/03/29 08:26
良からぬ事を企んでいそうなので教えてあげない

736 名前:734 (ログ差分) :04/03/29 08:27
>>735
よからぬ事を考えて、それを実現するぐらいの能力があるなら、2ちゃんで質問してないかと...

漏れはWindowsプログラミングの勉強をはじめたばかりの初心者で、どんなサービスを使えば
いいのかよくわかってない。だから他のプログラムが使っているサービスを参考にして勉強を
すすめていこうと思ってるわけなのです。

737 名前:732 :04/03/29 08:28
>>731
IShellFolder::GetUIObjectOf(IID_IDropTarget) し、
これで取得した IDropTarget に対して IDropTarget::Drop() の間違いでした。

738 名前:(ログ差分) :04/03/29 08:29
737 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/26 11:25
>>736
サービスってAPIのことのつもりだよな。

そのツールを使って
仮に使ってるAPIがずらずらっと出てきたとして、
仮にその引数や返却値までわかったとして、
藻前様はそれだけで使い方がわかるのですか。たいしたもんだ。

738 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/26 11:27
そーゆーのはバイナリから判断するもんでもないだろ。
サンプルやソース公開してるフリーウェアのコード読んで勉強しろ。

739 名前:デフォルトの名無しさん :04/03/29 08:47
質問です。あるウィンドウが、自分がデスクトップ上で
一番手前であるかどうか知るのはどうしたらいいんでしょうか?
GetActiveWindow APIで判断できるかと思ったんですが、
これで取得できるのは自分のプログラム内のアクティブウィンドウ
だけでした。よろしくお願いします。

740 名前:デフォルトの名無しさん :04/03/29 08:48
>>736
逆汗ツールでapiのインポートテーブルを書き出す物もあるよ。

741 名前:デフォルトの名無しさん :04/03/29 08:50
>>739
GetForegroundWindow()

742 名前:デフォルトの名無しさん :04/03/29 09:00
Winspector - Ultimate Programmers Window Spy Utility
ttp://www.windows-spy.com/

別のツールだがこれも使えそう。
フリーのSpy++みたいなもの。

743 名前:(ログ差分) :04/03/29 09:30
739 名前: x [sage] 投稿日: 04/03/26 11:30
 このソフトと同じようなことをやりたいけど、どうやっていいのかわからない。
 MSDNもあるけど、検索しようにもキーワードが浮かばない。
 使ってるAPIでもわかれば、それを手がかりにMSDNを読み始められるのに。

 ってことでしょ。気持ちはわかるよ。


740 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/26 11:38
 Dependency Walker

744 名前:739 :04/03/29 09:38
>>741
無事できました。ありがとうございます。

>>743
? 大丈夫ですか?

745 名前:デフォルトの名無しさん :04/03/29 09:59
>>744
飛んだログの補完だろ

746 名前:デフォルトの名無しさん :04/03/29 11:09
>>742
これ、めちゃくちゃ重いんだけど、どうにかならないもんなんだろうか?

747 名前:739 :04/03/29 11:21
>>745
なるほどw
ハンドル見落としてました。失礼しますた。

748 名前:デフォルトの名無しさん :04/03/29 12:24
MDIの子ウィンドウをアクティブにしないで生成するには
どうしたらいいんでしょうか?
WM_CREATE内でShowWindow(SW_HIDE)しても、WM_MDIACTIVATEが呼ばれて
アクティブになってしまうんですが。

749 名前:デフォルトの名無しさん :04/03/29 12:26
WM_CREATEで適当にフラグ立てて、WM_MDIACTIVATEでフラグを見てメッセージを殺す
というのでは駄目かな

750 名前:デフォルトの名無しさん :04/03/29 12:43
すみません、質問です。

システムが各種コントロールで使用しているパーツのイメージ
(チェックボックスやラジオボタン等のビットマップ)を
利用する方法があれば教えてください。

少々複雑なカスタムコントロールを作成しようとしているのですが、
自前でビットマップを用意するより、システムのものが流用可能であれば
そっちを利用した方がいいと思いまして。


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