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


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

Win32API質問箱 Build15
751 名前:デフォルトの名無しさん :03/12/30 01:38
>>748
PDHかな?
もしくはそのプロセスへ潜り込んで、中からGetCommandLineとか。


752 名前:デフォルトの名無しさん :03/12/30 02:33
>>751
情報ありがとうございます。
>もしくはそのプロセスへ潜り込んで、中からGetCommandLineとか。
は、具体的にどのような方法でやればよろしいのでしょうか?
a.exeがb.exeを起動しているとして
bのプロセスに潜り込むのですか?

753 名前:デフォルトの名無しさん :03/12/30 08:00
748はマルチ
無視汁!

754 名前:デフォルトの名無しさん :03/12/31 13:26
RegEnumValueをwhile(1)ループさせて、indexの値を0から初めて
インクリメントしていって任意のレジストリの名前とデータを列挙させているの
ですが。
RegEnumValueがERROR_NO_MORE_ITEMSを返したらwhile(1)ループから
抜けだすようにしているのですが。
レジストリエディタでみるとまだまだ列挙できるはずのレジストリはたくさん
あるのに。なぜか四つほど列挙しただけで
ERROR_NO_MORE_ITEMSを返しているようです。
なぜなんでしょう?

755 名前:デフォルトの名無しさん :03/12/31 13:35
>>754
ごめんなさい
表示部分のプログラムであほやってました(汗
ちゃんと列挙できてます。

756 名前:デフォルトの名無しさん :03/12/31 20:47
>>731-732
で紹介しているlistexp2を使ってgdi32.dllをDigital Mars C/C++ compiler
を使ってDLL作成しようとしたら、リンクの段階で失敗。↓
sc _di32.cpp _di32_dummy.cpp _di32.def -WD -w 
VC++が無いんで、解決する方法があればどなたか教えていただきたい。

757 名前:756 :03/12/31 20:51
エラーを書き忘れていました。
OPTLINK : Error 180: No Match Found for Export/ENTRY - : d_AbortDoc
などと、 _di32.defが悪いじゃないかと思うが、オブジェクトファイルの作成も警告が出る程度
なんで大丈夫だと思うんですが、リンクでは失敗してしまいます。

758 名前:デフォルトの名無しさん :03/12/31 21:15
>>756
大晦日なんだし、そんなこと気にするな。

759 名前:756 :03/12/31 21:41
>>758
そーですね、棚の置くからVC++4.0を探してくるべきですね。
失礼しました。

760 名前:デフォルトの名無しさん :04/01/01 17:13
2004年も宜しくお願いいたします。

761 名前:デフォルトの名無しさん :04/01/01 18:14
>>760
こちらこそよろしく。

762 名前:mi :04/01/01 20:06
あの、そこの天才プログラマさん教えてください。。
waveoutopenで開いてwavprocを使うようにしたんですけどwaveout
prepareheaderが失敗するんです。errorcode1で。
wavprocのMMopenでやってもopenの直後でやってもどこでも失敗するんです↓
なにが原因でしょうか??ちなみにxpです。win98で動かすとちゃんと動くんですけど。。。


763 名前:デフォルトの名無しさん :04/01/01 21:01
スピンコントロールを使いたいのですが
アップ・ダウンボタンを押したときに0.5ずつ
インクリメント/デクリメントしたいのですが
デフォルトでは1ずつになっています。
どのようなメッセージを投げればよいでしょうか?

764 名前:デフォルトの名無しさん :04/01/01 22:05
>>762
waveout・・・()関数はコールバック内で使っちゃいけないよね、確か。
win98で動くのは奇跡かと。
コールバックはあまり使えないから、ウィンドウプロシージャかスレッドで
処理させたほうがいいと思う。

765 名前:デフォルトの名無しさん :04/01/02 02:24
>>763
WM_VSCROLL(WM_HSCROLL)を自動で処理する

766 名前:763 :04/01/02 17:08
>>765
ありがとうございます。
猫さんのページを参考にしてWM_VSCROLLを処理しようと思ったのですが
アップを押されたのかダウンを押されたのかわからず
どのように処理してよいのかわかりませんでした。
スクロールバーにはSB_LINEUPなどのメッセージがあったのですが
スピンコントロールの場合はどのように取得すればよいのでしょうか?
なにとぞご教授お願いいたします。
case WM_VSCROLL:
if ((HWND)lParam == hUpdown1) {
wsprintf(str, "%03d", HIWORD(wParam));
SetWindowText(GetDlgItem(hDlg, IDC_EDIT), str);
}
break;


767 名前:デフォルトの名無しさん :04/01/02 18:47
>>763
Spy++で見れ。

768 名前:デフォルトの名無しさん :04/01/02 22:30
指定した時刻にスタンバイ(出来れば休止状態)から復帰する
プログラムを作りたいんですけど、何てAPI使えばいいですか?
環境などにも依存するのならそれも合わせて教えてください

769 名前:デフォルトの名無しさん :04/01/02 22:55
>>768
そういうのはOSのタスクの機能を使ったほうがよいのでは?
ウチのカノープスのTVチューナーボードはタスクを利用して
録画処理を起動してるよ。
タスクに実行時にスリープ中だったら解除するという設定がある。

というかスタンバイ中ってプログラム停止させられちゃうのでは?

770 名前:デフォルトの名無しさん :04/01/02 23:07
Sleepじゃだめか

771 名前:not 768 :04/01/02 23:08
>>769
それじゃ「タスク」はどのような処理をしてるのかという話になるんだが。
いや、俺も知らないんだけどね。

772 名前:デフォルトの名無しさん :04/01/02 23:16
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndevio/html/onnowapp.asp

773 名前:デフォルトの名無しさん :04/01/02 23:44
>>771
別にどんな処理してるかなんて知る必要ないでしょ。
単にタスクに起動したい時刻のスケジュールを登録すればいいのでは。
うまくいけば「コントロールパネル」の「タスク」で確認できるはず。
ただ環境依存としてヘルプによるとWin95,WinNT4.0は駄目見たい。
いや、俺もやったことないんだけどね。

774 名前:デフォルトの名無しさん :04/01/02 23:54
SleepもWaitableTimerも精度に問題があると思う。
時刻を監視するスレッドを作ったほうが

775 名前:名無し@沢村 :04/01/03 00:20
ヌヒ等はITaskSchedulerも知らんのか

776 名前:デフォルトの名無しさん :04/01/03 00:34
沢村キター

777 名前:デフォルトの名無しさん :04/01/03 00:35
>>775
調べてみたけど、ITaskSchedulerはCOMじゃね?
と、言うわけで768はCOMスレ行きケテーイ。

778 名前:デフォルトの名無しさん :04/01/03 01:17
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用

779 名前:デフォルトの名無しさん :04/01/03 02:11
このスレの香具師は基本的にはCOMは使わんの?

780 名前:デフォルトの名無しさん :04/01/03 02:30
Win32だから使っても不思議はないけど?

781 名前:デフォルトの名無しさん :04/01/03 09:16
>>779
使うだろうけど、ここで話題にするのはスレ違いだろう。

782 名前:デフォルトの名無しさん :04/01/03 09:36
Win32 Platform SDK に含まれているからスレ違いではないだろう

783 名前:デフォルトの名無しさん :04/01/03 09:45
>>782
議論の的はCOMがWin32APIかどうかであって、
Win32 Platform SDKに含まれているかどうかではないだろう。
それともWin32 Platform SDKに含まれていればWin32APIと呼ぶわけ?

784 名前:デフォルトの名無しさん :04/01/03 09:48
お、ということは IWebbrowser2 についても聞いていいわけですか?
IWebbrowser2 って、そのままだと XP の Visual Style が
反映されないみたいなんだけど、どうすればいいんでしょう?
前にどこかのスレで聞いてみたんだけど反応なかったので…

785 名前:デフォルトの名無しさん :04/01/03 10:14
IEコンポーネントを使い倒す・・・とかいうスレ無かったっけ?

786 名前:デフォルトの名無しさん :04/01/03 10:26
>>783
> それともWin32 Platform SDKに含まれていればWin32APIと呼ぶわけ?
それで構わないんじゃない?

787 名前:デフォルトの名無しさん :04/01/03 10:43
Plattform SDK | Reference | Win32 Functions in Alpha Order
に含まれているもの

788 名前:デフォルトの名無しさん :04/01/03 11:51
>>783
Win32のBase Service以下に含まれていればWin32APIでいいんじゃないの?

789 名前:783 :04/01/03 12:17
そうか。
もう面倒だからそれっぽいやつ全部Win32APIでいいや。

790 名前:デフォルトの名無しさん :04/01/03 12:49
論点がCOMならCOMスレの方がいいレスもらいやすいってだけだろ
使ってる道具だけで判断しようとするから無理が出る

791 名前:デフォルトの名無しさん :04/01/03 12:57
>>762
waveOutPrepareHeader に渡すバッファは
GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, 確保するサイズ)
で確保してる?

malloc だと環境によっては失敗するよ。

>>764
コールバック関数内で使って良いAPIはあるよ。
waveOutPrepareHeader をコールバック内で呼べなければ
コールバック関数用意している意味ないし。

コールバック関数がもっともコストの低い呼び出し方法で、それ故
制約が多いけど、この方法をマスターすればさらにタイミング的に
厳しい ASIO なんかにも対応できるようになるから、勉強にはなる。

792 名前:デフォルトの名無しさん :04/01/03 13:24
>>791
タイミングが重要ならEventでいいじゃん

793 名前:デフォルトの名無しさん :04/01/03 18:20
>>791
EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg,
OutputDebugString,PostMessage, PostThreadMessage, SetEvent,
timeGetSystemTime, timeGetTime, timeKillEvent, and timeSetEvent.

MSDNに↑以外のAPIをコールバックで使うなと書いてあるぞ。

794 名前:デフォルトの名無しさん :04/01/03 19:37
マインスイーパの自動攻略ツールを作ろうとしています。
マインスイーパのウィンドウをmouse_event関数などで操作する様にしようと考えています。
それにあたって、ゲーム中のマス目の情報を取得するための方法を探しています。
今のところ、「マインスイーパのウィンドウを静止画としてキャプチャして、それを解析する」
という方法しか思いつかないのですが、他に効率的な方法がありますでしょうか。


795 名前:デフォルトの名無しさん :04/01/03 19:46
キャプチャせずに、直接
GetClientRect()とGetPixcel()
でいけると思う。

796 名前:デフォルトの名無しさん :04/01/03 19:55
ttp://hp.vector.co.jp/authors/VA022911/
こんなのがあった。
他に、C++で作っててソース公開してるのがあったんだけど履歴に残ってない。スマソ。

797 名前:デフォルトの名無しさん :04/01/03 20:56
同一の物理メモリ領域を単一プロセスの仮想メモリ空間上に複数回マップすることはできますか?
何も考えずにMapViewOfFileEx使うとAttempt to access invalid address.って怒られます。

798 名前:797 :04/01/03 21:13
できました。正直タイプミス。スマンカッタ。

799 名前:デフォルトの名無しさん :04/01/03 23:54
エクスプローラなどのツリービューみたいなのを作ろうとしているんですが
どうやって項目が選択されているかを調べるんでしょう?
猫でも分かるとか見てもそんな感じの文章はないですし
そんな割には、ギコナビの左側だってツリーじゃねーかよーヽ(`Д´)ノ ウワァーン
 というわけで、ヒントまたは解決法をお教えください。

800 名前:デフォルトの名無しさん :04/01/04 00:05
ListView_GetItem

801 名前:800 :04/01/04 00:05
間違えた。スマソ。まぁ似たようなもんだ。

802 名前:デフォルトの名無しさん :04/01/04 00:14
サンクス。TreeView_GetItemでつね
実行するのは明日になりますが、これで安心して夢の中に逝けます。

803 名前:799 :04/01/04 11:08
ttp://hp.vector.co.jp/authors/VA016117/
ここの窓プログラミングにエクスプローラを作るってのがあったよ。
TreeView_GetItemでぐぐったら出てきた。m(__)m
なわけで次エクスプローラ作りたい人はここが分かり易いかも。

804 名前:762 :04/01/04 16:38
>>764,791
ありがとうございます。
渡すbufferはcの静的変数にしてました。
GlobalAllocにしてみます(^^)




805 名前:794 :04/01/04 18:41
>795 >796
レスして頂いてどうもありがとうございます。
>796のリンク先のプログラム見てみたのですが、ゲーム開始時点で全ての
地雷の位置が分かっていますよね。これはマインスイーパの変数値などを
直接取得しているということですか?ヒントを貰えないでしょうか。
よろしくおねがいします。

806 名前:デフォルトの名無しさん :04/01/04 19:02
>>805
魔引水ー派の隠し技知らないのかよ!

807 名前:デフォルトの名無しさん :04/01/04 19:21
>>805
http://cres.s28.xrea.com/news/category.php?s=29

808 名前:デフォルトの名無しさん :04/01/04 19:29
>>805
http://muu.moo.jp/tips004.shtml

809 名前:デフォルトの名無しさん :04/01/04 19:38
そんな裏技があったとは・・・・・。

810 名前:デフォルトの名無しさん :04/01/04 20:48
>>791
Win32でサウンドカードからの通知を受けるのに
コールバックを利用する意味はほとんど失われてると思うが。
Win3.1ではプロセススケジュールを無視してコールバックが呼び出されていたけど
Win32のコールバックは単なるスレッドだし。

811 名前:デフォルトの名無しさん :04/01/04 20:57
Win9xではそうでもない

812 名前:デフォルトの名無しさん :04/01/05 00:45
>>792
>>793
>>810

さて…風邪で寝込んでた。
で、自分の書いてたソース見直してみたら直接コールバックでは駆動してなかった。
コールバックで来るパラメータだけ処理して自分でイベントを…(--)

熱でボケてたか。大変失礼した。


813 名前:デフォルトの名無しさん :04/01/05 02:26
irvineのように、
IEで文字列を範囲選択して右クリックメニューで、
自作アプリに選択範囲を渡したいのですが、
方法がわかりません。スレも板も違ったら申し訳ない。

マウスで範囲選択したあとに
キー入力とウィンドウ制御を行うランチャのショートカットキーを
入力するだけでも実現できそうですけども。

814 名前:デフォルトの名無しさん :04/01/05 03:53
事情で, IEのcontextmenuを使わないことにしました. 普通に別の手段で自作します. スレ汚しスマン

815 名前:デフォルトの名無しさん :04/01/05 07:32
リムーバブルメディアを取り出された時に、
そのことを検出する方法はあるのでしょうか?
もし、ありましたら教えて頂けませんでしょうか?

Google検索やMSDNじゃうまくみつけられなかったので
質問させて頂きます。

816 名前:デフォルトの名無しさん :04/01/05 10:04
メディアの取り出し検出...
専用デバイスで通知できるようなドライバがなければ出来ないかもしれない



817 名前:デフォルトの名無しさん :04/01/05 10:41
定期的にGetDiskFreeSpace()を呼ぶとか

818 名前:デフォルトの名無しさん :04/01/05 10:46
>>813-814
なんだ・・・一応フォローっとくと、
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
をキーに検索するといろいろ出てくる。実際にIrvineとかがなにやってるかは
コンテキストメニューで実行しているスクリプトファイルを直に開いてみれば分かる。

819 名前:デフォルトの名無しさん :04/01/05 11:09
>>815
WM_DEVICECHANGE

820 名前:デフォルトの名無しさん :04/01/05 11:16
case WM_DEVICECHANGE:  // デバイス状態が変更された
 switch((UINT)wParam){
 case DBT_DEVICEREMOVECOMPLETE: // デバイスが取り出された
  db = (DEV_BROADCAST_HDR *)lParam;
  if(db->dbch_devicetype == DBT_DEVTYP_VOLUME){ // 取り出されたのは物理的なデバイス
   MessageBox(0, "メディア取出", "OK", MB_OK);
 }
}

これ?

821 名前:デフォルトの名無しさん :04/01/05 12:04
"int LineDraw" (?LineDraw@@3HA) は Main.obj で定義されています; 2 つ目以降の定義は無視されます

って警告が出るんだけど、どすればいいの?

822 名前:デフォルトの名無しさん :04/01/05 12:06
main以外でも定義されてるってこと
ヘッダーincludeしまくると出るよ

823 名前:デフォルトの名無しさん :04/01/05 12:09
>>816
FindFirstChangeNotificationでできないかな?


824 名前:823 :04/01/05 12:09
>>815だった


825 名前:821 :04/01/05 12:24
>>822
でもインクルードしないと定義されていませんってエラーが出るよ。

826 名前:デフォルトの名無しさん :04/01/05 12:24
>>821
多重インクルードってヤツだっけ。
#ifndef _???_INCLUDE_H_
#define _???_INCLUDE_H_
//いろいろ
#endifを使ってみ。

827 名前:821 :04/01/05 12:37
>>826
やってるけどエラーがでる。

828 名前:デフォルトの名無しさん :04/01/05 12:40
>>827
やってるのか・・・・。
"int LineDraw"を検索したらどうかな。スマンが分からん。

829 名前:821 :04/01/05 12:47
というか、複数のcppファイルからVariable.hという自作のヘッダーをインクルード
していて、このヘッダーファイルの中には静的変数が定義されているので
#ifndefとかやっているけど、やっていないときと同じ結果になる。

830 名前:デフォルトの名無しさん :04/01/05 12:48
externは?

831 名前:821 :04/01/05 12:51
exturnって、書かなくてもいいんじゃないんですか?

832 名前:821 :04/01/05 12:58
> exturnって、書かなくてもいいんじゃないんですか?
   ↑extern

833 名前:デフォルトの名無しさん :04/01/05 13:16
なんのためのstaticなんだ・・・・。
externしないと外部から参照できないんじゃ・・・

参考
ttp://www.edu.cs.kobe-u.ac.jp/Enshu3/2003/O/compile.html

834 名前:821 :04/01/05 13:27
externつけたら
error LNK2001: 外部シンボル ""int LineDraw" (?LineDraw@@3HA)" は未解決です
ってエラーが出る。

835 名前:デフォルトの名無しさん :04/01/05 13:31

静的変数ってグローバル領域の変数?

同じエラーメッセージの出る一番シンプルなソースを
貼り付けたらどう?

836 名前:デフォルトの名無しさん :04/01/05 13:36
静的変数っていうから語弊がある

変数定数のヘッダーでしょ?

837 名前:821 :04/01/05 13:39
//main.cpp
#include <stdio.h>
#include "timpo.h"

int main(void)
{
  unco();

  printf("%sぷらぷら",str);
  return 0;
}

//timpo.h
#ifndef _H_TIMPO_H_
#define _H_TIMPO_H_

void unco(void);
char str[20];

#endif /* _H_TIMPO_H_ */

//hage.cpp
#include <stdio.h>
#include "timpo.h"

void unco(void)
{
  scanf("%s",str);
}

838 名前:デフォルトの名無しさん :04/01/05 13:42
>>834
これは全部にexternを付けている状態では?

・extern は変数を定義している翻訳単位では付けない。
・別の翻訳単位で定義された変数を利用するのに extern を使った宣言をする。

こういう感じだったと思うけど。


839 名前:デフォルトの名無しさん :04/01/05 13:46
>>837
ヘッダは単にインクルードされるだけだから、
main.cppの char str[20]; と
hage.cppの char str[20]; は
別の変数として認識されるんじゃなかろうか?

840 名前:デフォルトの名無しさん :04/01/05 13:47
>>837
で、問題のint LineDrawはどこへいったんですか?

841 名前:デフォルトの名無しさん :04/01/05 13:50
>>837

動かすだけなら・・・
こんなんで動くんじゃなかろうか?

//timpo.h
#ifndef _H_TIMPO_H_
#define _H_TIMPO_H_

void unco(void);
char str[20];

#endif

#ifdef _H_TIMPO_H_

extern char str[];

#endif /* _H_TIMPO_H_ */



842 名前:821 :04/01/05 13:51
>>839
じゃあ、どうすればいいんですか?

843 名前:デフォルトの名無しさん :04/01/05 13:53
>>841
それならhage.cppに
char str[20];
あればいいんじゃないの?

844 名前:デフォルトの名無しさん :04/01/05 13:57
>>841
コンパイルは別々にされるから、やっぱ
これじゃ動かないかな?



845 名前:デフォルトの名無しさん :04/01/05 14:01
>>837

//main.cpp
#include <cstdio>

void unco( );
char str[20];

int main( )
{
  unco();
  printf("%sぷらぷら", str);
  return 0;
}

//hage.cpp
#include <cstdio>

extern char str[];

void unco ( )
{
  scanf("%s", str);
}

ヘッダに拘らなければ、これで動くんじゃなかろうか。

846 名前:821 :04/01/05 14:04
変数をヘッダに入れて、それを複数のcppファイルからインクルードは
できないということですか?

847 名前:デフォルトの名無しさん :04/01/05 14:04
>>845
コンパイルして実行できたよ。

848 名前:デフォルトの名無しさん :04/01/05 14:14
>>846
stroustrupの本だと、ヘッダには
extern str[];
と宣言するに留めて、定義は *.cpp の方で
行っているようですが。宣言は何度やっても
OKだからね。

849 名前:デフォルトの名無しさん :04/01/05 14:16
たまにでかい配列でデータ宣言されてるヘッダーとかあるけど
それを複数ファイルからincludeする必要もないと思うし

出来る出来ないのまえに設計が悪いのでは?

850 名前:デフォルトの名無しさん :04/01/05 14:23
スレ違いだから初心者スレでやってよ。

851 名前:821 :04/01/05 14:24
サンキュ!エラーも警告も出なくなったよ!

852 名前:デフォルトの名無しさん :04/01/05 17:17
>>850
初心者つーか、C/C++初心者のスレッド行きだね。
Win32APIとは何の関係もない。

853 名前:デフォルトの名無しさん :04/01/05 19:25
Limechatのチャットログウインドウの内容を他プロセス(他プログラム)
から参照して処理するpgを書いてますが、取得できなくて困ってまする。
spy++でみるとチャットログコントールは"ZrichView"というclass名から
リッチテキストコントロールと推察しますが、
WM_GETTEXT等で取り込む
WM_EMSESELで全選択してWM_EMGETSELで取り込む
WM_EMGETLINEで取り込む
全部だめでした。

リッチテキストコントロールではないのか・・。
どなたか情報もってませんかねえ

854 名前:デフォルトの名無しさん :04/01/05 20:25
>>853
LimeChat掲示板で聞いた方が良いだろうな。
作者さんがちょこちょこレスしているし、ヒントをくれるかも。

855 名前:デフォルトの名無しさん :04/01/05 20:32
WM_GETTEXTWでないとだめぽとか

856 名前:815 :04/01/06 01:37
>>819
>>820

これだー
ありがとうございますた

857 名前:デフォルトの名無しさん :04/01/06 03:02
>>853
おれはメモ帳を相手におなじことやったけど、GetWindowText()を使えば
うまくいった。

Limechat内部のメッセージ処理を考えればわかるが、WM_GETTEXTなどで返されるwParam,lParam
はLimechatのプロセスにおける文字列のアドレス。プロセスが違うから、
こっちのアプリでその文字列のアドレス拾っても無意味。メモリ空間は
プロセスごとに独立しているから。


858 名前:デフォルトの名無しさん :04/01/06 03:16
>>857
WM_SETTEXT/WM_GETTEXTに関してはWindowsが内部的にメモリマップトファイルを
使って受け渡しするのでプロセス跨いでも使えるはずだが。

859 名前:デフォルトの名無しさん :04/01/06 03:22
>>857
それって

http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_getwindowtext.asp
>他のプロセス内のコントロールのテキストを取得するには、
>GetWindowText 関数を呼び出すのではなく、直接 WM_GETTEXT
>メッセージを送ります。

と真逆なんだけどいいの?

860 名前:デフォルトの名無しさん :04/01/06 11:10
画面の明るさを変更するAPIを探しています。
ChangeDisplaySettingsExだと解像度しか変更できないみたいで、
ぐぐっても見つからなかったので、ご教授お願いします。


861 名前:デフォルトの名無しさん :04/01/06 11:17
冬休みの間、ずっとひきこもってプログラミングしていました。

今、任意のウインドウをレイヤードウインドウにするプログラムを書いています。
GetForegroundWindow()を使ってハンドルを取得し、

GetWindowLong()→SetWindowLong()→SetLayeredWindowAttributes()で変更しています。

問題は、ウインドウが何も選択されていないとき(どのタイトルバーも色が付いていないとき)
GetForegroundWindow()は、恐 らく、デスクトップ全体のハンドルを返してくるのですが、
そのハンドルに対してレイヤード化をしてしまうと、大変スバラシイ事になってしまいます。
これを回避するために、GetDesktopWindow()の戻り値と比較してみたのですが、
どうもうまくいきません。
取得したハンドルの値を表示してspy++で調べてみたところ――

タイトル        :Program Manager
ウインドウクラス名 :Progman

――でした。とりあえず、今はクラス名を調べて、ハネています。
この方法は、Win2Kでもできるのでしょうか?
また、9x系ではどうなるのでしょうか?(レイヤードウインドウ使えないけど)
それと、ハンドルがデスクトップのものかを判定する、
もっとましな方法はないのでしょうか?

862 名前:861 :04/01/06 11:18
もう一つ質問です。
>> のプログラムを書いている途中にできた副産物として、
任意のウインドウに、WS_THICKFRAME、を付加するプログラムを作りました。
これをいろんなプログラムに試していたのですが、

某社のゲームは、スタイルにWS_THICKFRAMEが付加されたにもかかわらず、リサイズできませんでした。
カーソルは縮小/拡大のものに変わるのですが、ウインドウのサイズはそのままです。
これはどうやっているのでしょうか?
それらしいメッセージをDefWindowProcに渡さないようにしてみたのですが……。どうもうまくいきません。

それからもう一つ、プログラムのショートカットから、最大化、を選択されて起動された場合、
どうやって最大化するのを防げばよいのでしょうか?
某社のゲームも、これには対処できていませんでした。
ShowWindow()の引数をnCmdShowにしないという方法でもうまくいきませんでした。

863 名前:デフォルトの名無しさん :04/01/06 11:55
>某社のゲームは、スタイルにWS_THICKFRAMEが付加されたにもかかわらず、リサイズできませんでした。
たぶんリサイズメッセージを受け取ったときに何もせずに終了しているんじゃない?
OnSize(){return 1;} みたいな

>GetForegroundWindow()は、恐 らく、デスクトップ全体のハンドルを返してくるのですが、
>そのハンドルに対してレイヤード化をしてしまうと、大変スバラシイ事になってしまいます。
詳細キボン


864 名前:デフォルトの名無しさん :04/01/06 12:46
>某社のゲームは、スタイルにWS_THICKFRAMEが付加されたにもかかわらず、リサイズできませんでした。
WM_GETMINMAXINFO とかかな?

865 名前:860 :04/01/06 13:38
すみません。自己解決しました。


866 名前:デフォルトの名無しさん :04/01/06 15:42
>>860
お前は俺か?今
BOOL WINAPI SetDeviceGammaRamp( HDC hDC, LPVOID lpRamp );
について調べてたとこだよ。
これをホットキーでサクサク変更したいなー。できたら遊べるだろなー。


867 名前:デフォルトの名無しさん :04/01/06 15:57
自己解決したときは解決法も書くもんでしょ。
検索でヒットしたのに「自己解決」だけだったら寂しいよ。

868 名前:デフォルトの名無しさん :04/01/06 16:03
自己解決したときも、その解決内容の要点だけ書いておけば、
同じ問題にぶつかった人への手助けになるものね。

869 名前:デフォルトの名無しさん :04/01/06 16:04
あと、もっと良い方法があるかもしれないしね

870 名前:デフォルトの名無しさん :04/01/06 17:19
デスクトップ画面のガンマ曲線はこれで得られるようだ
> #include <windows.h>
> #include <systypes.h>
> int PASCAL WinMain( HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int cmdShow){
> HDC hDC; LPVOID ldRamp; int16 foo[256*3]; ldRamp = foo;
> hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
> GetDeviceGammaRamp(hDC,ldRamp);
> }
でも、SetDeviceGammaRamp()はエラーになる。


871 名前:デフォルトの名無しさん :04/01/06 17:33
getが成功してsetが失敗する理由を調べてるんだけど
http://whidbey.msdn.microsoft.com/library/default.asp?url=/library/en-us/dndevice/html/gammaramp.asp
>SetDeviceGammaRamp doesn't allow all gamma ramps.
> It checks the gamma ramp; if it is too complex,
> such as the red flash when the player is shot in Quake, it rejects it.
>SetDeviceGammaRampがすべてのガンマ傾斜路を許可するとは限りません。
>それはガンマ傾斜路をチェックします;
>プレーヤーが震動で撃たれた時、それが赤いフラッシュのように複雑すぎれば、
>それはそれを拒絶します。
ワカンネ

872 名前:デフォルトの名無しさん :04/01/06 17:43
わかった
ガンマ曲線用テーブル(ldRampの示す実体 : >>870のfoo)は
綺麗な曲線になってないといけないんだ。
グラデのかかった綺麗な絵がマンデルブロに染まるようなガンマテーブルはダメってこと。
なんでかはシラネ

画面をちょっと暗くする程度の変換をかけようと思って加工してたら
それがbugbugで、テーブルが腐って、そのためにset〜ではねられてたってことらし
debug力の無い証拠だチクショウ

873 名前:デフォルトの名無しさん :04/01/06 17:44
SetDeviceGammaRamp は全てのガンマ曲線を許可するわけではありません。
例えば有名な3Dアクションゲーム「Quake」でプレイヤーが撃たれた時のように
画面を赤く発行させるような複雑なガンマ曲線の場合にはエラーとなります。

874 名前:873 :04/01/06 17:46
微妙に遅かった_| ̄|○

875 名前:デフォルトの名無しさん :04/01/06 17:50
指定色だけを描写しないように
したいんですけど・・・

876 名前:デフォルトの名無しさん :04/01/06 18:31
>>873
英語のできる巨乳の保健室の先生、ありがとう!
ゲームの演出で瞬間的に色をいじる場合と違って、
普段のデスクトップが操作できないくらい真っ赤に染まったらマズーってことで
ヘンな色にできないようになってるんだね。

基本的にはガンマ曲線が与える0.5〜1.5程度のカーブに近ければ拒否されないんだろうな。

これを何度も実行すると画面がサイケになって面白いよ。戻す場合は簡易ガンマ値設定ツールがいける。
>#include <windows.h>
>#include <systypes.h>
>int PASCAL WinMain( HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int cmdShow){
> HDC hDC; LPVOID ldRamp; int16 foo[256*3]; BOOL r; ldRamp = foo;
> hDC = GetDC(NULL); if (!hDC){ MessageBox(NULL, "取得失敗", "GedDC", MB_OK); return 1; }
> r = GetDeviceGammaRamp(hDC,ldRamp); if (r==FALSE){ MessageBox(NULL, "取得失敗", "GetDeviceGammaRamp", MB_OK); return 1; }
> { int i; for (i=0;i<256*3;i++){ foo[i] = foo[i]*17/16; } } //0から遠ざける
> r = SetDeviceGammaRamp(hDC,ldRamp); if (r==FALSE){ MessageBox(NULL, "色設定が拒否されました", "SetDeviceGammaRamp", MB_OK); return 1; }
> return 0;
>}


877 名前:876 :04/01/06 18:44
ガンマ値を最初に保存しておき、while(1)でSleep(100)くらいで回してから、
拒否されたら復帰させる、くらいは最低限やっといたほうが良かったか。スマン

878 名前:876 :04/01/06 19:19
サイケになる理由がわかった。
>#include <systypes.h>
>typedef struct {
> uint16 red[256];
> uint16 green[256];
> uint16 blue[256];
>} gammaRampTable;
こう扱うのが正しいのに、符号ありとして扱ってた。
WORDは符号なしなんだよな。
落第

879 名前:デフォルトの名無しさん :04/01/06 19:35
>854
limechat掲示板は最近は放置っぽいですなあ。
実はもうきいてるんだけど、ノーレスです。
>857
WM_GETTEXTは使えますよ、プロセスまたいでも。
859の言うようにMSNにも書いてあるし、実際使えるし。
chocoaにも対象として同じ処理してるけど
WM_GETTEXTで取り込めてるし。
ただWM_EMxxはrichtextの場合プロセスまたいではダメなのかな。
メモ帳みたいなテキストコントロールには有効だけど
chocoaに対してはだめだった。


880 名前:デフォルトの名無しさん :04/01/06 22:21
ビットマップについて質問。

1.BITMAPV4(V5)HEADER型のDIBからDIBSection型のHBITMAP
を作成したとき、BITMAPINFOHEADER型に変換されるのですが、
このときV4(V5)で拡張されたフィールドはどこへ行ってしまうのでしょうか?。

2.BI_BITFIELDS時のBITMAPINFOHEADERのケツについてるカラーマスキング値は
DIBSECTION構造体のdsBmih.Bitsfields[3]に格納されるであっていますよね?。

3.あとPetzold本にDIBSectionを作るときに確保したビットマップピクセルビットへの
ポインタを破棄したら取得することが出来ないと書いてあるのですが、BITMAP構造体
のbmBitsフィールドが思いっきりピクセルビットへのポインタになっているので、これを取得
して操作できますよね?。

4.DIBSection型のビットマップをBitBlt, StretchBltで使うとき、圧縮タイプがBI_JPEGまたは
BI_PNG形式でも動くのでしょうか?。

英語よめないのでMSDN英語版読んでもわかりませんでした、逝ってきます。

881 名前:デフォルトの名無しさん :04/01/06 22:25
>>880
2, 3, 4はやってみればわかるよな。

882 名前:デフォルトの名無しさん :04/01/06 22:28
>>ガンマ調整
http://www.codeproject.com/miscctrl/gamma_manager.asp

883 名前:デフォルトの名無しさん :04/01/07 00:25
>>866
ガンマコレクターだね。
もう公開終了したみたいだけど。
単純な物ならすぐ出来そうだから作ってみるかな。


884 名前:デフォルトの名無しさん :04/01/07 00:38
>>871
whidbeyで開発しているのか・・・


885 名前:883 :04/01/07 01:13
仕様はこんなもんかな

----------------------------------------
ショートカットキーは固定
設定ファイルは手書き

Alt + Num0 〜 Num9指定したガンマ値に設定
Alt + "+" ワンランク明るく
Alt + "-" ワンランク暗く

指定解像度に変更されたらガンマ値を変更

終了時にデフォルトのガンマ値に戻る

設定できるガンマ値は0 〜 40
数値が小さいほど明るくなる
-1でデフォルトの値に戻る


886 名前:866 :04/01/07 02:15
>>883 >>885
そうか。解像度変更に合わせて動作したほうがいいよな。
その仕様を組み込んでなくて
輝度ワンランクup/downのみ、しかもガンマ曲線は1固定だけど、
書いたので貼ってみる。

887 名前:1 :04/01/07 02:17
>#include <windows.h>
>#include <systypes.h>
>#include <stdio.h>

>//汎用:数値制限
>int Lim(int v,int min,int max){
> if (v>max){ v = max; }
> if (v<min){ v = min; }
>}
>#if 0
>//汎用:OutputDebugStringを用いたdebug用出力関数 for BCC developer
>void D4(char *p,int d0,int d1,int d2,int d3){
> char str[1024];
> sprintf(str, "%s (%d,%d,%d,%d $%x $%x $%x $%x)",p,d0,d1,d2,d3,d0,d1,d2,d3); OutputDebugString(str);
>}
>#endif
>//ガンマ設定用輝度テーブル
>typedef struct {
> uint16 mRed[256];
> uint16 mGreen[256];
> uint16 mBlue[256];
>} GAMMA_RAMP_TABLE;
>//本appli専用引数
>typedef struct {
> BOOL mF; //TRUE絶対, FALSE加算
> int mBrightness; //百分率
> int mGamma; //reserve. 100でガンマ1の予定
>} MYARG;
>//GAMMA_RAMP_TABLEの要素1つに書き込み
>//0〜65535にclip
>void GammaParamSet(uint16 *out_p, int i, int v){
> out_p[i] = Lim(v,0,65535);

888 名前:2 :04/01/07 02:18
>}
>//GAMMA_RAMP_TABLE直接加工:輝度変化
>//in : 65536を100%とした倍率
>void GammaEffMul(GAMMA_RAMP_TABLE *ioP, int inR, int inG, int inB){
> int i;
> for (i=0;i<256;i++){
> GammaParamSet(ioP->mRed, i, (ioP->mRed[i] * inR) >>16);
> GammaParamSet(ioP->mGreen, i, (ioP->mGreen[i] * inG) >>16);
> GammaParamSet(ioP->mBlue, i, (ioP->mBlue[i] * inB) >>16);
> }
>}
>//GAMMA_RAMP_TABLEに上書き
>//brightness的に設定. ガンマは1
>//in:パーセンテージ
>//備考: i*65535/255=i*257 : 手元環境はこのtableであることをgetしてdumpして確認済
>void GammaSetBright(GAMMA_RAMP_TABLE *outP, int inR, int inG, int inB){
> int i;
> for (i=0;i<256;i++){
> GammaParamSet(outP->mRed, i, i * 257 * inR / 100);
> GammaParamSet(outP->mGreen, i, i * 257 * inG / 100);
> GammaParamSet(outP->mBlue, i, i * 257 * inB / 100);
> }
>}
>//in:元GAMMA_RAMP_TABLEへのptr
>//out:GAMMA_RAMP_TABLE書き換え
>void Myfunc(GAMMA_RAMP_TABLE *io_psG, MYARG *in_psMyarg){
> GAMMA_RAMP_TABLE sTheGamma;
> int destBri, bri, briall, i;

> //基本ガンマ1で輝度100%のtable作成

889 名前:3 :04/01/07 02:19
> GammaSetBright(&sTheGamma,100,100,100);
> //取得済table(from画面)から中心輝度算出
> briall = 0;
> briall += io_psG->mRed[128];
> briall += io_psG->mGreen[128];
> briall += io_psG->mBlue[128];
> //パーセンテージ取得
> bri = briall*100/(257*128*3);
> //値決定
> if (in_psMyarg->mF==TRUE){ //絶対値指定
> destBri = in_psMyarg->mBrightness;
> }else{ //相対値指定
> destBri = bri + in_psMyarg->mBrightness;
> }
> //設定
> GammaSetBright(io_psG,destBri,destBri,destBri);
>}
>//コマンドライン解析
>//本appli限定
>// /add10 なら+10, /sub5 なら-5, /set75 なら絶対値75
>// 解釈できない引数なら, 先頭文字code奇数+5, 偶数-5
>// 引数なしは, /set100 と同じ
>void GetMyarg(MYARG *out_psMyarg, LPSTR szCmdLine){
> BOOL theF; int theBri;
> theF = FALSE; //相対値で指定
> if (!memicmp(szCmdLine,"/add",4)){ //引数解釈可
> theBri = atoi(szCmdLine+4);
> }else if (!memicmp(szCmdLine,"/sub",4)){
> theBri = -atoi(szCmdLine+4);
> }else if (!memicmp(szCmdLine,"/del",4)){

890 名前:4 :04/01/07 02:20
> theBri = -atoi(szCmdLine+4);
> }else if (!memicmp(szCmdLine,"/set",4)){
> theF = TRUE; //絶対値指定
> theBri = atoi(szCmdLine+4);
> }else if (szCmdLine[0]==0){ //引数なし
> theF = TRUE; //絶対値指定
> theBri = 100; //100
> }else if (szCmdLine[0]&1){ //引数あり,解釈不可,odd
> theBri = 5; //加算5
> }else{ //引数あり,解釈不可,even
> theBri = -5; //減算5
> }
> //output
> out_psMyarg->mF = theF;
> out_psMyarg->mBrightness = theBri;
>}

>int PASCAL WinMain( HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int cmdShow){
> MYARG sMyarg;
> HDC hDC;
> LPVOID ldRamp;
> GAMMA_RAMP_TABLE sGamma;
> BOOL r;

> //引数解析
> GetMyarg(&sMyarg, szCmdLine);

> //出力deviceのハンドラ取得
> hDC = GetDC(NULL);
> if (!hDC){ MessageBox(NULL, "取得失敗", "GedDC", MB_OK); return 1; }

891 名前:5 :04/01/07 02:25
> //ディスプレイのガンマ値取得
> ldRamp = &sGamma; r = GetDeviceGammaRamp(hDC,ldRamp); if (r==FALSE){ MessageBox(NULL, "取得失敗", "GetDeviceGammaRamp", MB_OK); return 1; }
> //ガンマ値設定テーブルを加工
> Myfunc(&sGamma,&sMyarg);
> //ディスプレイに反映
> ldRamp = &sGamma;
> r = SetDeviceGammaRamp(hDC,ldRamp);
> //反映を拒否されたとき
> if (r==FALSE){
> if(sMyarg.mF==TRUE){
> MessageBox(NULL, "色設定が拒否されました", "SetDeviceGammaRamp", MB_OK);
> }else{
> //拒否dialogでなく,100にreset
> sMyarg.mF = TRUE;
> sMyarg.mBrightness = 100;
> Myfunc(&sGamma,&sMyarg);
> r = SetDeviceGammaRamp(hDC,ldRamp);
> if (r==FALSE){ MessageBox(NULL, "色設定が拒否されました", "SetDeviceGammaRamp", MB_OK); }
> }
> }

> return 0;
>}

892 名前:デフォルトの名無しさん :04/01/07 02:29
以上。BCC5.5+BCCdeveloperのreleaseでbuild確認。
常駐物じゃない点がまず致命的。
解像度, 現在activeなwindowのwindowtitle,
常駐中の(自分がactiveでないときの)ホットキー受け付け,
などはスキルが足りなくて組み込めなかった。

893 名前:デフォルトの名無しさん :04/01/07 02:40
>>884
実はgoogleでMSDN検索しただけ。なぜかwhidbeyのサイトがhitした

894 名前:883 :04/01/07 08:59
>>892
実装が完了したとおもたら、
すでに作っている香具師がいた・・・_| ̄|○


895 名前:883 :04/01/07 09:01
あとガンマコレクターも探せば落とせるね・・・


896 名前:デフォルトの名無しさん :04/01/07 13:51
>>892に書いてある問題点をクリアーした、ガンマコレクターを超えるフリーソフトの誕生に期待

常駐できるようになるだけでも格段にレスポンス向上するからなあ

単純輝度テーブルだけじゃなく、暗いところだけexpandするようなフィルタリング手法を
採用すれば、明るいシーンを犠牲にすることなく暗い場所を見られるだろうし

897 名前:883 :04/01/07 14:31
需要を無視してさらしてみるテスト。
>>885の仕様で作ってある。
あと解像度の設定は無限に追加可能。
ウイルスが怖くない人は試してみてらはい。
ttp://www.42ch.net/UploaderSmall/source/1073453419.zip


898 名前:883 :04/01/07 14:38
>>892
そうか。ゲームごとにガンマ値を設定できるようにするには、
ウィンドウタイトルで判定すれば良かったんだ。

・解像度が変更されたとき、アクティブなウィンドウのタイトルで設定する値を判定

こんな感じ?


899 名前:デフォルトの名無しさん :04/01/07 14:45
”ゲーム名”のフォルダが最前面の時ガンマ値自動変更!

つーか、通常のゲームなら変更する機能が付いているはずだが。

900 名前:883 :04/01/07 15:17
>>899
フォルダってのがよくわからない。
アクティブなウィンドウが変更された場合にガンマ値をかえる?

>つーか、通常のゲームなら変更する機能が付いているはずだが。
例えばUTだと、それでも最大までは明るくできない。
漏れは、ゲーム側がガンマ値を変更 → ガンマコレクターでさらに明るく
という風に使ってた。


901 名前:883 :04/01/07 15:24
>>898を追加
ttp://www.42ch.net/UploaderSmall/source/1073456550.zip


902 名前:デフォルトの名無しさん :04/01/07 15:49
>>883
ソースを晒してるの?
バイナリ晒されてもこのスレでは意味ないと思うけど

903 名前:861 :04/01/07 16:16
>>863
戻り値をspy++で調べると、やはりデスクトップ全体のハンドルでした。
それに対して、
GetWindowLong()で取得した拡張スタイルに
Style = style | WS_EX_LAYEREDして、
SetWindowLong()して、
SetLayeredWindowAttributes()しました。

アルファを128にすると、画面の色が反転したようになります。
うまく説明しづらいのですが、とにかくグチャグチャになりました。
ウインドウのスタイルを元に戻しても、デスクトップは元に戻りませんでした。
デスクトップ全体にInvalidateRect()をかけて、何とか元に戻りました。
アルファを0にすると、アイコンの類が全て、消えました。


904 名前:デフォルトの名無しさん :04/01/07 18:02
任意の一般的なアプリのツールバーを、
自作のプログラムで表示/非表示の状態をしらべ、さらに状態を切り替えたいと思います。

APIを調べたところ、IsWindowVisible で状態がわかりそうな気がして、
ツールバーのハンドルを得ようと考えました。
ところがそのアプリのハンドルはタイトルから取得できるのですが、
ツールバーのハンドルの取得の方法がわかりません。

どのようにすれば実現できるでしょうか?

905 名前:デフォルトの名無しさん :04/01/07 18:19
883のツール便利だね。ソースがあればこのスレらしいな

906 名前:デフォルトの名無しさん :04/01/07 18:21
>>904
そのウィンドウの子ウィンドウを調べる。
クラス名が"ToolbarWindow32"なら多分ツールバー。

907 名前:デフォルトの名無しさん :04/01/07 18:30
初心者の俺としては、
次スレのテンプレにはこれも入れるといいんじゃないかな、とオモタ
ttp://homepage2.nifty.com/DSS/VCPP/API/APIIndex.htm
贅肉がないから読みやすいし、必要なことはきっちりおさえてある

908 名前:デフォルトの名無しさん :04/01/07 19:03
左クリックのしすぎで指が痛くなり、ひとつマウスホイール上回転を
左クリックに置き換えてみようと思ったのですが、上手くいきません。

DirectXを使ったゲームで、単純なPostMessageやmouse_eventでは
効かないものに、マウスメッセージを送る方法はあるのでしょうか?

909 名前:883 :04/01/07 22:35
>>905
ソースの肝の部分は>>882とほぼ同じです。
かってに流用しているので、さらすのはまずいかなと思ったんで
バイナリだけです。
>>882と”グローバルフック”でぐぐって見つかったソースを合わせれば、
どなたでも作れるかと。


910 名前:デフォルトの名無しさん :04/01/07 22:52
正直Win32APIとは関係ないんだけど関連が無くも無いんでここで教えてくだされ

DIBを扱うときのお約束として横1ラインのデータ長は4の倍数に切り上げるってのがあるけど、
この切り上げ処理を1行で書くやり方を完璧にド忘れしてしまいました。
もう歳かのうゲホゲホ…

dwsize += (dwsize % 4)?(4 - (dwsize % 4)):0;

確かこんな感じでしたっけ?
もっと簡単に書く方法はありますでしょうか?

911 名前:デフォルトの名無しさん :04/01/07 23:00
((x+n-1)/n)*n

912 名前:デフォルトの名無しさん :04/01/07 23:06
>>911
おぅ、バッチリですな。
マリガトウ!!

913 名前:デフォルトの名無しさん :04/01/07 23:08
>>910
1ラインのバイト数=((幅*色のビット数+31)&~31)/8*abs(高さ)

914 名前:デフォルトの名無しさん :04/01/07 23:22
>>913
なぜ高さまで?

915 名前:デフォルトの名無しさん :04/01/07 23:25
まちゃがえt

916 名前:デフォルトの名無しさん :04/01/07 23:26
882のサイトのソースは登録が必要だとかで、落としてないや


917 名前:904 :04/01/07 23:52
>>906
spy++ で、そのツーrルバーのクラス名はToolbarWindow32だとわかっていたのですが、
FindWindow でゲットした任意のアプリのウインドウのハンドルを用い、
FindWindowEx にてそのクラス名を入れて探そうと思ったのですが、0しかかえってきません。

ほかのAPIを使わないとだめなのでしょうか?

918 名前:デフォルトの名無しさん :04/01/08 00:16
>>917
GetLastErrorで原因を確認

919 名前:デフォルトの名無しさん :04/01/08 08:28
そして報告するんだ
報告をするんだ

920 名前:904 :04/01/08 10:11
HWND hw1;
HWND hw2;
hw1 = FindWindow("クラス名", "ウインドウ名");
hw2 = FindWindowEx(hw, NULL, "ToolbarWindow32", "");
printf("%d\n", hw2);

ごめんなさーい。初歩的ミスでした。
上記のでなんとかできました。

921 名前:861 :04/01/08 13:05
>>864
WM_GETMINMAXINFOをDefWindwoProc()に渡さないようにしてみたのですが、
相変わらず、サイズを変更できてしまいます。
誰か、スタイルにWS_THICKFRAMEが付加されたにもかかわらず、
ウインドウのサイズ変更が出来なくなるようにする方法を知りませんか?

922 名前:デフォルトの名無しさん :04/01/08 14:27
SYSCOMMANDで調べてみるとか。

923 名前:デフォルトの名無しさん :04/01/08 15:07
WM_WINDOWPOSCHANGINGでしょ

924 名前:デフォルトの名無しさん :04/01/08 15:21
Accessの子ウィンドウのコントロールボックス無効化にする方法を教えて下さい。
フォームプロパティのコントロールボックス『いいえ』だけでは、
タスクバーにあるボタン化されたウィンドウに対して右クリックすると
メニューが表れ『閉じる』やサイズ変更が可能なままとなってしまいます。
Access本体の『閉じる』やサイズ変更の無効化はわかるのですが…

925 名前:922 :04/01/08 16:40
WM_WINDOWPOSCHANGINGかぁ。
漏れもウィンドウのリサイズ禁止にしようとしてやってたことあったが、ソレでよかったのか。
SC_SIZEずっといじってたよ。_| ̄|○ イチオウキンシデキタケド

926 名前:904 :04/01/08 17:54
他アプリのツールバーのハンドルを得ることはできましたが、
表示・非表示切り替えがうまくいきません。
ShowWindow(hw, SW_HIDE)
を行うと、この時点では消えず、このあと親ウインドウのサイズを変更した時にしか消えないのです。
UpdateWindowとかRedrawWindowとか試してみましたがうまくいきません。
なにか間違っているのでしょうか?



927 名前:デフォルトの名無しさん :04/01/08 17:54
スタートメニューの高さを取得するAPIを教えてくださ

928 名前:デフォルトの名無しさん :04/01/08 18:44
現在チャットで話していいる女が、ネカマかどうか判断するAPIを教えてください。

929 名前:デフォルトの名無しさん :04/01/08 18:49
>>928
***まら立てるまでもない質問はここで 第48刷***
http://pc2.2ch.net/test/read.cgi/tech/1071506396/

930 名前:デフォルトの名無しさん :04/01/08 19:24
>>916
フリーメールでもOKっぽい。
かなり有用なサイトなので登録しておいて損はないかと思う。


931 名前:デフォルトの名無しさん :04/01/08 19:42
>>921
WM_GETMINMAXINFOならMINMAXINFO構造体の
ptMinTrackSize;
ptMaxTrackSize;
に同じ数値を設定すればいい。

932 名前:デフォルトの名無しさん :04/01/08 19:44
CodeProjectにあるドキュメントはCodeGuruにもあったりするのでCodeGuruから落とすこともできたりする。CodeGuruは登録しなくてよい。

933 名前:デフォルトの名無しさん :04/01/08 19:52
>>926
多分ツールバーは消えたけどその画像が残ったまま、という状態。
フレームウィンドウのクライアント領域が露出した状態。
フレームウィンドウがクライアント領域に(背景ブラシを含め)何も描かなければ、再描画させても無駄。
サイズが変われば再レイアウトしてくれると思うので、いったんサイズ変更して元に戻すとかすれば?


934 名前:デフォルトの名無しさん :04/01/08 19:58
BITMAPV4HEADERのbV4GammaRedの説明で
MSDNでは

>Specified in 16^16 format.

と書いてあります。
この 16^16 format ってどういう意味でしょうか?
整数部16bit、小数部16bitの固定小数点という意味?

935 名前:デフォルトの名無しさん :04/01/08 20:30
CreateThreadで立てた副スレッドが、ExitThreadを呼んだのに
GetExitCodeThreadでSTILL_ACTIVEを返すのは仕様ですか?

ちなみにWin98SEでふ

936 名前:デフォルトの名無しさん :04/01/08 20:44
>>935
ExitThreadでSTILL_ACTIVEと同じ値を渡してるというオチではあるまいな?

937 名前:デフォルトの名無しさん :04/01/08 20:52
引数にGetCurrentThread()の戻り値を使ってるというオチではあるまいな?

938 名前:935 :04/01/08 21:18
そういう可能性も考えて、ちゃんと確認した値を渡したんですがね。
returnで同じ値を渡して終わらせたら、前述の症状はありませんでした。

exeのサイズを減らそうとして、Cランタイムを削ったのが
なんかマズかったのかなぁとも思いましたが。

939 名前:デフォルトの名無しさん :04/01/08 22:15
呼び側にてWaitForSingleObject()とかで同期とってみたら?


940 名前:デフォルトの名無しさん :04/01/08 22:43
VFWで質問です
AVI作成時にAVIFileOpenでOF_CREATEを指定すると、
「新規にファイルを作成する、ファイルがすでに存在する場合その大きさは0になる」
とのことですが、いくらやっても0になりません。
実験として、1)大きなAVI作成 2)小さなAVI作成をすると、大きなAVIのサイズの
ままです。これは既出のバグでつか?

941 名前:デフォルトの名無しさん :04/01/09 08:02
漏れはOpenの前にDeleteFile入れて強引に回避したけど…。

942 名前:904 :04/01/09 11:43
>>933
ありがとうございます。
その後、親ウインドウに
SendMessage(hw1, WM_SIZE, 0, 0)
でうまくいきました。

943 名前:デフォルトの名無しさん :04/01/09 12:44
おまえら>>927スルーしねーで、さっさと教えろゴミが

944 名前:自作自演ウダイ :04/01/09 12:58
>>943
GetStartMenuHeight()

945 名前:ゴミ :04/01/09 12:58
>>943
GetClient(ry

946 名前:デフォルトの名無しさん :04/01/09 12:59
>>943
SHAppBarMessage

947 名前:デフォルトの名無しさん :04/01/09 13:00
>>943
GetWindowRect

948 名前:デフォルトの名無しさん :04/01/09 13:22
>>943
ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN, 0);

949 名前:デフォルトの名無しさん :04/01/09 13:37
>>944-948
自作自演じゃねーよ本人だぼけが
つかおまえらさんきゅうな、とりあえず試してみるから
つうかおまえら氏ねよ

950 名前:デフォルトの名無しさん :04/01/09 13:43
>自作自演じゃねーよ本人だぼけが
本人だから自作自演だっつってんだろヴォケ
二度と来るなよ、基地外

951 名前:921 :04/01/09 17:33
>>931
試してみます。

ところで、友達にプログラムを作ってくれと言われました。
どういうプログラムかと言うと、
「フルスクリーンで起動するゲームがあるが、その上にメディアプレイヤーを表示したい」
という要望でした。
そういう事をするツールを使っているが、重たい上に、複数のウインドウに対して変更できないとのことです。
おそらく、WS_EX_TOPMOSTを付加するのだと思いますが、MSDNを見たところ、
>To add or remove this style, use the SetWindowPos function.
SetWindowPos()を使えとあります。
SetWindowLongではいけないのでしょうか?

952 名前:デフォルトの名無しさん :04/01/09 17:50
>>951
試せば分かる


953 名前:デフォルトの名無しさん :04/01/09 22:41
ウィンドウのフレームをクリックしてサイズや位置を変更した際
最後に送られてくる「変更全部終わりましたよ」っていうメッセージって何なんですか?
WM_POSCHANGED?

954 名前:デフォルトの名無しさん :04/01/09 22:54
WM_NURUPO

955 名前:デフォルトの名無しさん :04/01/09 23:23
>>953
WM_SIZE

956 名前:デフォルトの名無しさん :04/01/09 23:31
>>954
WM_GALTU

957 名前:デフォルトの名無しさん :04/01/09 23:34
ありがとうございました。もう来ません。

958 名前:デフォルトの名無しさん :04/01/09 23:35
>>957
ワロタ

959 名前:デフォルトの名無しさん :04/01/09 23:45
WM_LBUTTONUP

960 名前:デフォルトの名無しさん :04/01/09 23:51
マジレスするがWM_EXITSIZEMOVEでどーよ?

961 名前:デフォルトの名無しさん :04/01/10 00:00
>>960
やったー!!ありがとうございます。

962 名前:デフォルトの名無しさん :04/01/10 00:10
素直にスパイしれ!

963 名前:デフォルトの名無しさん :04/01/10 00:10
ふぎゃsage忘れた!

964 名前:デフォルトの名無しさん :04/01/10 00:19
>>962
一番たちの悪いage荒らし

965 名前:デフォルトの名無しさん :04/01/10 01:17
マウスの指定ボタンを押すと、キーボードの指定キーを
押したことになるようなツールを作っています。

通常のアプリならば一応問題の無いものができて、喜んでいました。
しかしゲームなどのGetKeyState辺りで?キー状態そのものを取得し
それに従って動いている様なもので試したら、動きませんでした。

解決方法がもしありましたら是非。

966 名前:デフォルトの名無しさん :04/01/10 01:22
DirectInputあたりまで考慮したらドライバ書くしかねぇんでないの?

967 名前:965 :04/01/10 01:28
>>966
うへーそれは当方の手にはちと余ります…。
マウスならともかく、キーボードなら
単純そうだしいけるかと思ってたのですが…。

レスありがとうございました。諦めて類似ツール漁ってみます。

968 名前:デフォルトの名無しさん :04/01/10 02:28
>>967
X Wheelというソフトを使えば、作る必要がない予感

969 名前:デフォルトの名無しさん :04/01/10 02:42
>>968
いやはや・・・これ以上無いくらい、素晴らしいツールで・・・
ご紹介ありがとうございました。

そこはかとなく悔しいですが(笑

970 名前:デフォルトの名無しさん :04/01/10 15:15
#include<windows.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
LPSTR lpCmdLine ,
int nCmdShow ) {
return 0;
}
質問なんですが、上記のプログラムをbccでコンパイルしようとしたら下のようなエラーがでます。

Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)

-Wオプションをつけるとエラーが出なくなるんですが、一体なぜ?
WってwarningのWですよね?

971 名前:デフォルトの名無しさん :04/01/10 15:22
Google 検索: Wオプション bcc
http://www.google.com/search?hl=ja&lr=lang_ja&q=W%83I%83v%83V%83%87%83%93+bcc

972 名前:デフォルトの名無しさん :04/01/10 15:30
warningでなくてどうやらWindowsらしいぞ

973 名前:デフォルトの名無しさん :04/01/10 17:05
>>970
-W 付けると Win プログラミング
付けないと DOS(コンソール)プログラミングです。

974 名前:デフォルトの名無しさん :04/01/10 18:20
なるほろ

975 名前:デフォルトの名無しさん :04/01/10 20:51
>>973
Win32なコンソールプログラム=DOSプログラムじゃないぞ。

976 名前:デフォルトの名無しさん :04/01/11 00:30
973にコンソールとDOSの違いを説明するの大変そうだな

977 名前:デフォルトの名無しさん :04/01/11 01:10
>>970
waraだろ

978 名前:デフォルトの名無しさん :04/01/11 01:33
ダイアログでフォーカスが同一ダイアログ内の別のコントロールへ移動したこと
(例えばタブ・キーが押されたときなど)を知る方法はありますか?
どなかたかよろしくお願いします。


979 名前:デフォルトの名無しさん :04/01/11 02:07
ダイアログプロシージャでWM_NOTIFYをハンドルして、NMHDRのcodeメンバを
調べればいいような

980 名前:979 :04/01/11 03:27
ごめん嘘ついてた。ダイアログではWM_NOTIFYは使えないようで。

WM_COMMANDでHIWORD(wParam)を調べればいいみたい。
エディットコントロールがフォーカスを得たならEN_SETFOCUS、
リストボックスならLBN_SETFOCUSってな感じに。

981 名前:デフォルトの名無しさん :04/01/11 09:06
次スレマダ〜?

982 名前:デフォルトの名無しさん :04/01/11 14:52
>>976
Xの上がってないLinuxのこともDOSと言ってそうだ

983 名前:デフォルトの名無しさん :04/01/11 14:53
VBのIsNumericのように文字列が数値かどうか判定するAPIはありませんか?

984 名前:デフォルトの名無しさん :04/01/11 15:11
>>983
APIじゃないけどstrtod()が使えそう

985 名前:デフォルトの名無しさん :04/01/11 15:24
>>894
ありがとうございます。試してみます。

986 名前:デフォルトの名無しさん :04/01/11 17:34
>>984
判定には使えんだろ…

987 名前:デフォルトの名無しさん :04/01/11 17:48
>>983
1文字ずつisdigit()で判定すればよろしかろう

988 名前:デフォルトの名無しさん :04/01/11 18:07
>>986
ダミーで変換させて、第二引数の参照先を見ればいいと思うが。

989 名前:デフォルトの名無しさん :04/01/11 20:16
ウィンドウのタイトルバーがダブルクリックされたことを知るには
どうしたらいいでしょうか?
Macのようにウィンドウをタイトルバーのみ残した状態に
したいのですが

990 名前:デフォルトの名無しさん :04/01/11 21:06
単純にダブルクリックイベントでテストするのはダメなの?


991 名前:デフォルトの名無しさん :04/01/11 21:49
WM_NCLBUTTONDBLCLK

992 名前:デフォルトの名無しさん :04/01/11 22:08
WM_NCLBUTTONDBLCLK (・∀・)イイ!!

993 名前:デフォルトの名無しさん :04/01/11 22:13
C++のクラスとサブクラスのことで質問

サブクラス化をする命令を含んだクラスを作ろうとしてるんですけど、
うまく出来ないんです。
どうすればいいでしょう?

class Test
{
public:
LRESULT CALLBACK NewProc(HWND, UINT, WPARAM, LPARAM);
Test(HWND);
private:
WNDPROC OrgProc;
};

Test::Test(HWND hWnd)
{
OrgProc = (WNDPROC)SetWindowLong(hWnd,
GWL_WNDPROC,
(LONG)Test::NewProc);

}

LRESULT CALLBACK Test::NewProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
//hogehogehoge
return (CallWindowProc(OrgProc, hWnd, msg, wp, lp));
}

994 名前:デフォルトの名無しさん :04/01/11 22:26
ウィンドウプロシージャに非staticなメンバ関数は使えない。

995 名前:デフォルトの名無しさん :04/01/11 22:32
なるほど了解
それじゃクラスに定義済みのプロシージャ作っておいて
それのアドレスをオブジェクトに渡せばいいのかな

996 名前:デフォルトの名無しさん :04/01/11 22:33
>>993
どうしてもクラス化したい場合(メンバ変数を使いたい場合)は、
DirectXのサンプルで使われている方法が良い。
↓のページを”コールバック”で検索
ttp://masafumi-t.cool.ne.jp/directx9/3dtips/d3d01.htm


997 名前:デフォルトの名無しさん :04/01/11 22:34
ごめん。かぶった・・・


998 名前:デフォルトの名無しさん :04/01/11 22:38
>>986
strtod(const char *nptr, char **endptr);

第2引数の先頭に'\0'がくれば、nptrは数値ってことでいいんじゃない?

999 名前:デフォルトの名無しさん :04/01/11 22:41
>>998
>>988

1000 名前:デフォルトの名無しさん :04/01/11 22:43
1000


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