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


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

Win32API質問箱 Build13
751 名前:デフォルトの名無しさん :03/09/19 12:24
>>750
誤爆じゃないだろw
まわりくどいレスだがな〜

752 名前:名無し@沢村 :03/09/19 12:24
>>750
DWORD型の変数名にlpを付ける人はあまりいない

753 名前:デフォルトの名無しさん :03/09/19 12:26
>>752
それを言いたかったのか。
できるだけ元(>>717)を変えたくなかったから、変数名はそのままにした。


754 名前:デフォルトの名無しさん :03/09/19 12:29
DWORD dword;
LPDWORD lpdword;

lpdword = &dword;

ReadFile(file,str,1,lpdword,NULL);

これでどーよ?
>>717の書いたところには手をつけてないぞw

755 名前:デフォルトの名無しさん :03/09/19 12:30
>>752
今となってはLPもPも変わんないからね!
でも64ビットポインタになったらどうなるんだろう?
LLPとかになるのかな?
ソース可換性のために要るんだろうなぁ


756 名前:717 :03/09/19 12:37
>>745
そうギモンを感じれたら・・・
>>746
じゃnearとか読みとばせれってことね、MSDNをかちゅようせよってことね
>>747
<<<<<ガクガクガクブルブル>>>>>>>>>>>俺の人生を指摘されてるようだ・・・
>>748
あたま整理するぽ

757 名前:デフォルトの名無しさん :03/09/19 12:38
>>754
>717への良いヒントだな

758 名前:デフォルトの名無しさん :03/09/19 12:45
>>757
だな。
これで>>720が言いたいことも分かるはずだぞ。

759 名前:717 :03/09/19 12:54
>>754
>>757
こういうニュアンス?
unsigned long ulong;
unsigned long* pulong;

pulong = &ulong;
ReadFile(file,str,1,pulong,NULL);
( ´∀`)なんかまたおこられそう、、、


760 名前:717 :03/09/19 13:11
( ´∀`)激しく(>>720)の言うことがワカタ


761 名前:デフォルトの名無しさん :03/09/19 13:56
char* pchar = 0x8000; //マスタ
//char* pchar = 0x7f00; //ダミー1
//char* pchar = 0x5700; //ダミー2
memcpy( pchar, 0x8f00, 4096 );

G△MEB○Y ならありえる。

762 名前:デフォルトの名無しさん :03/09/19 13:57
なんで、みんな明らかな釣り師に
かまってるんだ?

763 名前:737 :03/09/19 14:54
>>762
キミ、「釣り」とかもう古いんだよ。
時代はマジレス。

764 名前:デフォルトの名無しさん :03/09/19 15:01
ハァ?釣り?奴を見ろ。目がマジだ。

765 名前:デフォルトの名無しさん :03/09/19 15:01
この人はさぁ、本気なんだよ。わかる?

766 名前:デフォルトの名無しさん :03/09/19 15:04
>>762
誠意って、何かね。

767 名前:デフォルトの名無しさん :03/09/19 15:04
>>740
むかつくんだよ


768 名前:デフォルトの名無しさん :03/09/19 15:06
まぁセンスとか言っちゃって、自分のレベルを自覚してないのは痛いな。

769 名前:デフォルトの名無しさん :03/09/19 16:12
テキストファイルをReadFileで読み込むとfreadのテキストモードと違い、
改行コードの変換は行われずCRが付加されたまま(CR+LF)になりますよね。
通常のこCRは自前で除去すべきなのでしょうか?

何が問題かというと
1.あっても意味のないCRは処理の邪魔になる。
2.Winのテキストエディタで作成したファイルは通常CRが付加されるが、
  自前でWriteFileで出力したデータはCRが付加されないので読み込んだ際にデータの矛盾が起きる。

770 名前:デフォルトの名無しさん :03/09/19 16:21
>>769
漏れなら、自前で出力するデータにCRを付加する

771 名前:  :03/09/19 16:24
>>769
除去する必要があるなら除去する。
必要がない、あるいは除去してはいけないのなら除去しない。

まあ普通はもし除去するなら保存時にまた付加しておくのが
筋ってもんでは?

772 名前:デフォルトの名無しさん :03/09/19 16:37
>>770-771
要するにfopen系と同じ仕様にしなさいと言う事ですかね。
ご意見ありがとうです。

773 名前:ホゲホゲ :03/09/19 21:24
既存のファイルをコピーするコードを教えてください

774 名前:デフォルトの名無しさん :03/09/19 21:27
CopyFile

775 名前:ホゲホゲ :03/09/19 21:33
ありがとう既存のファイルを無限ループでいっぱい作りたんだけど
Win32?studio.h?どっちいんくるーどすればいいんですか・?



776 名前:デフォルトの名無しさん :03/09/19 22:09
氏ね

777 名前:デフォルトの名無しさん :03/09/19 22:29
くたばれ

778 名前:デフォルトの名無しさん :03/09/19 22:36
オーディオミキサーが2個以上存在(サウンドカードとUSBオーディオ等)するときに、
現在、優先するデバイスになっているミキサーを特定する方法はあるのでしょうか?

Win2000以外は優先するデバイスのIDが0になるようなので特定できるのですが、
Win2000のみIDが変化せず、優先するデバイスのIDが特定できず困っています。

やりたいことは、優先するデバイスになっているミキサーを制御することです。


779 名前:名無し@沢村 :03/09/19 23:15
>>755
ヌヒよ、既存ならばわざわざ作らなくてもいいではないか

780 名前:デフォルトの名無しさん :03/09/19 23:17
>>778
実際に操作して値の変動を確認する

781 名前:デフォルトの名無しさん :03/09/20 16:22
自前でダイアログボックスのようなウィンドウを作りたいのですが、どうやったらいいかわかりません

CreateWindow(
  TEXT("STATIC") , TEXT("自前ダイアログ") ,
  WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
  20 , 20 , 100 , 100 ,
  hwnd , (HMENU)1 , ((LPCREATESTRUCT)(lp))->hInstance, NULL
);

こんな感じでやってみたのですがウィンドウは出てきません。
どうやったらいいですか?

782 名前:781 :03/09/20 16:27
すみません、親ウィンドウから呼び出されてダイアログウィンドウのように表示されるウィンドウを作りたいということです

783 名前:デフォルトの名無しさん :03/09/20 17:01
>>718-719
STATICクラスを使わず、
普通にウィンドウを作るように書けば無問題

784 名前:781 :03/09/20 17:16
WNDCLASS pre_wc;

pre_wc.style = CS_HREDRAW | CS_VREDRAW;
pre_wc.lpfnWndProc = PreProc;
pre_wc.cbClsExtra = pre_wc.cbWndExtra = 0;
pre_wc.hInstance = ((LPCREATESTRUCT)(lp))->hInstance;
pre_wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
pre_wc.hCursor = LoadCursor(NULL, IDC_ARROW);
pre_wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
pre_wc.lpszMenuName = NULL;
pre_wc.lpszClassName = TEXT("PREVIEW");

if (!RegisterClass(&pre_wc)) exit(1);

CreateWindow(
  TEXT("PREVIEW") , TEXT("ダイアロググ") ,
  WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
  CW_USEDEFAULT , CW_USEDEFAULT , 100 , 100 ,
  hwnd , NULL , ((LPCREATESTRUCT)(lp))->hInstance, NULL
);

こんなんでいいんでしょうか?
コンパイルとかはは問題なく通るのですが、やっぱりダイアログは表示されませんでした
どこが間違ってるんでしょうか・・・

785 名前:デフォルトの名無しさん :03/09/20 17:16
>>781
APIでウインドウを作るのは、かなり複雑。
関数1つですむようなことじゃないよ。
DialogBox()
CreateDialog()
DialogBoxIndirect()
CreateDialogIndirect()
などを使うんだが、APIの知識がないと無理。
http://www.kumei.ne.jp/c_lang/index_sdk.html
を参考に。


786 名前:781 :03/09/20 17:48
>>785
難しいことがよくわかりました
DialogBox()とかでいってみようと思います
ありがとうございました

787 名前:デフォルトの名無しさん :03/09/20 19:00
>>786
つーてもメッセージループとウインドウプロシージャは最低限必要だね

やっぱこれでしょう

● 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html

788 名前:デフォルトの名無しさん :03/09/20 19:54
てか 781 のこと気になるですな。提示されたコードに問題はなさげだし・・・
PreProc の中身はどんな感じですか? 私,前に
 if (msg =- WM_CLSOE) { // == じゃなくて =- になってる!
  ::DestoryWindow(hwnd);
  ...
みたいな事やらかしてて,エラーメッセージも出ないし
アプリケーションも落ちる気配がないし,悩んだ事がありました。
WinMe で実行すると一瞬で StackOverFlow で落ちてくれたんだけど(わらぃ

789 名前:デフォルトの名無しさん :03/09/20 20:15
WM_CLSOE...

790 名前:デフォルトの名無しさん :03/09/20 20:24
CreateWindow()したら
ShowWindow()で作ったウィンドウを表示して
UpdateWindow()で内容を表示かな?
プログラミングWindowsを丁度第三章まで読み終わったばかりでおこがましいんだけど。

791 名前:デフォルトの名無しさん :03/09/20 20:55
>>781
どうでもいいことですけど、
RegisterClassは返り値チェックしているのに、CreateWindowは
なぜチェックしない?
ソースのコピペのようですが、実際ソースはそう?

792 名前:781 :03/09/20 21:26
みなさんすみません
色々試した結果784でいけそうな感じがしてきました
そこの部分だけ新しく別プロジェクトで実行してみたらちゃんと動きました
子ウィンドウを作る部分だけ関数化して更にソースも分割していたので変数か何かがおかしかったのかも知れません
おさがわせしました

793 名前:788 :03/09/20 21:50
>>789 今日の私はなんかもうダメみたいです。。。_| ̄|○

794 名前:デフォルトの名無しさん :03/09/20 22:26
アプリを作っていて、他のウィンドウの背面にあるウィンドウを手前に
出したくて、普通ならForegroundWindowで問題ないはずなのですが、
なぜか、手前に出てきてくれません。SetWindowPosで最前面にする方法だと
手前に出てくるのですが、これだと、永久にフローティング状態に
なってしまいます。
これって原因わかりますか?または解決方法ありましたらご教授ください



795 名前:デフォルトの名無しさん :03/09/21 00:56
>>794
問題ないはずの根拠は?

http://www.asia.microsoft.com/japan/msdn/windows/windows2000/win2000appcomp.asp
>自動的にウィンドウを手前に表示させるために "SetForegroundWindow" に頼っていてはいけません。

796 名前:デフォルトの名無しさん :03/09/21 01:56
>>795
ありがとうございます。しかし、それでは、任意のウィンドウを
まえにもってこれませんね。
関連の書類ファイルをダブルクリックして、そこから
起動中のアプリのウィンドウを表示させたいという
当たり前のことができなくなりますよね。

うーん


797 名前:デフォルトの名無しさん :03/09/21 02:24
>>796
一応、強制的にForegroundにする方法はないでもない
ttp://www.google.com/search?lr=lang_ja&q=AttachThreadInput%20SystemParametersInfo%20SetForegroundWindow

798 名前:デフォルトの名無しさん :03/09/21 03:13
はじめまして。
Regionを利用するアプリケーションにおいて、GDIに関連することで質問があります。
GDIにおいて、滑らかな曲線等(アンチエイリアスが行われている)を得ることはできるのでしょうか。
アプリケーションは、デスクトップマスコット?のような、既存のBitmapからRegionを作成し、背景部分を透過させるという物です。
論理サイズとビューポートの設定で拡縮を行うのもためしたのですが、望むような結果が得られません。
GDI+においては、必要十分な結果は得られたのですが、品質的にイマイチ感があります。
何か、スマートな方法があれば、教えてください。
よろしくおねがいします

799 名前:デフォルトの名無しさん :03/09/21 03:21
>>796
ユーザーが操作中にいきなりフォーカスを奪われたら迷惑だから
タスクトレイに通知を出すなりしろってこった

800 名前:デフォルトの名無しさん :03/09/21 03:35
>>798
Windows2000/XPならLeyered Windowを使えばピクセル単位でウィンドウの透明度を
設定できるのでアンチエイリアスだろうとかけ放題だが。

801 名前:デフォルトの名無しさん :03/09/21 08:24
>>796
フローティング状態って何?SetWindowPosにHWND_TOPでZオーダーを最前面に設定するだけじゃダメなの?

802 名前:デフォルトの名無しさん :03/09/21 09:38
VirtualAllocのMEM_RESERVEで予約し、MEM_COMMITを使ってコミットします。
そして何らかのデータを確保した領域にコピーし、
VirtualFreeのMEM_DECOMMITでコミットした状態を解除すると、
確保した領域のデータは保証されないと思っていいのでしょうか?

つまり、再びVirtualAllocのMEM_COMMITを使っても無駄ということで合ってますか?


803 名前:デフォルトの名無しさん :03/09/21 10:20
FindWindowExで他のプロセスのウィンドウのエディットコントロールのハンドルを取得して、
EM_GETLINEで取得しようとしたのですが、
Windows2000では動くのにWindows98SEでは相手側のプロセスが死んでしまいます。
どうすれば両方で動くようになるのでしょうか?

804 名前:デフォルトの名無しさん :03/09/21 10:22
EM_GETLINEで取得->EM_GETLINEで文字列を取得

805 名前:798 :03/09/21 12:01
>>800
レスありがとうございます。

ピクセル単位で処理できるというのは、初めて知りました。
LayeredWindowはあくまで、ウィンドウ全体に対し透過色を設定とアルファ値を設定するものだと思っていました。
アルファブレンドは特に必要ないと思ったため、Regionで処理しようと思っていました。
LayeredWindowを適用するAPIは、
SetLayeredWindowAttributes(hwnd,0,Byte(alpha),LWA_ALPHA);
という感じだと思うのですが(Delphi)、ピクセル単位の処理というのは、どのように行うのでしょうか?
お手数とは思いますが、よろしくお願いします。

806 名前:デフォルトの名無しさん :03/09/21 12:32
>>805
UpdateLayeredWindowでぐぐる

807 名前:デフォルトの名無しさん :03/09/21 12:45
>>802
> つまり、再びVirtualAllocのMEM_COMMITを使っても無駄ということで合ってますか?

て言うか、再び MEM_COMMIT した時点でゼロクリアされるやん。
http://msdn.microsoft.com/library/en-us/memory/base/virtualalloc.asp

808 名前:デフォルトの名無しさん :03/09/21 13:47
アプリケーションが終了する時に、
必ず通るメッセージって何ですか?

終了しますか?ダイアログを出したいのです

809 名前:デフォルトの名無しさん :03/09/21 14:11
>>808
普通はWM_CLOSE

810 名前:デフォルトの名無しさん :03/09/21 16:18
>>808
OnDestroy関数だよ


811 名前:デフォルトの名無しさん :03/09/21 16:20
>終了しますか?ダイアログを出したい
のなら、
WM_DESTROYは少々手遅れの気があるが。

812 名前:デフォルトの名無しさん :03/09/21 17:03
画像を読みこんで、画像と同じ大きさのウィンドウ上に画像を表示、
ってのをやろうとしています。

まず画像データを読み込んで情報を取得、
CreateWindow関数実行時にウィンドウのサイズに画像のサイズの値をそのまま
指定して、ウィンドウプロシージャでWM_NCCALCSIZEに対して他の処理を挟ま
ずに単にreturn 0;とすることでクライアント領域のサイズ=ウィンドウのサイズと
しています。
これでサイズは画像=クライアント=ウィンドウになる、という狙いです。
ただ、ある程度小さい画像を指定すると、何故か生成されるウィンドウが画像より
大きくなってしまいます。
画像(68,98)->ウィンドウ(112,98)みたいに。

OutputDebugStringで追ってみたところ、
・CreateWindow実行直前では、値に問題無し。
 (CreateWindowの引数は、こちらの予想通り)
・ウィンドウプロシージャでWM_NCCALCSIZEを受け取った時点では、
GetWindowRectでRECT構造体に入る値は大きくなってしまっている。
という風になりました。

ウィンドウの指定サイズが小さすぎると自動的に補正されるものなんですか?

813 名前:デフォルトの名無しさん :03/09/21 17:48
>>812
経験則ですが、WS_OVERLAPPEDスタイルだと一定サイズ以下に小さくできませんね。
WS_GETMINMAXINFOをきちんと処理してもだめ。どこかにドキュメントあるのかな?

というわけでWS_POPUPスタイルでいきましょう。いくらでも縮められます。
ただしこの場合もWS_CAPTIONを付けちゃうと、一定サイズ以下になりません。

814 名前:813 :03/09/21 17:50
訂正 WS_GETMINMAXINFO → WM_GETMINMAXINFO

815 名前:812 :03/09/21 18:19
>813
ありがとう。ご指摘の通り、WS_OVERLAPPEDWINDOWスタイルを
指定してましたが、WS_POPUPに変えると期待通りの動作になりました。



816 名前:798 :03/09/21 21:30
>>805
UpdateLayeredWindow、MSDNの方を参照しました。
が、LayreredWindowのステータス更新用のAPIに思えるのですが..
申し訳ないです、アンチエイリアスとの関連がわかりません。
全体を少しだけ透過させるというのは、APIが2k/xp限定であること、また、「少しだけ透過」させても全体が透過されているため、アンチエイリアスとしては効果が薄いため、考慮から除去しています。
それとも、背景色を完全に透過させた後に、透過させてはいけない部分を任意のドットで縁取りし、その部分をUpdate~APIで半透化という意図なのでしょうか?
その場合、透過させてはいけない部分が単色とは限らないため、内側なり外側なりへ縁取りを行わないといけないと思うのですが...
アニメーションをサポートしたいので、縁を得るためのコストが気になります。

お手数とは思いますが、LayeredWindowを用いたアンチエイリアスの具体的な手順を、よろしくお願いします。
>>800 さんの記述からは、何かしらのトリッキーな利用法があるという印象を受けます。

817 名前:808 :03/09/21 22:19
こんばんわ808です。
WM_CLOSEに、
MessageBox入れると上手くいくようになりました。

xボタンを押したときだけですが。

PostQuitMessageや
Destroyメソッド呼び出したとき、
IDOKボタン押したとき
に、OnCloseを通ってくれないのです。

CloseWindowメソッド呼んでも、最小化するだけなんです。

どがんして終わったらよかとでしょうか?

818 名前:808 :03/09/21 22:24
WM_CLOSEが呼ばれるわけやけん

SendMessage(WM_CLOSE)呼べばよかだけやん。

なんね

819 名前:デフォルトの名無しさん :03/09/22 02:31
BITMAP構造体のカラープレーンってなんですか?
カラー プレーンの個数は常に1です。とかかれているドキュメントもありましたが、
意味がわかりません。

820 名前:デフォルトの名無しさん :03/09/22 05:02
RGBをプレーンごと別々に表示してた頃の名残かな?
よくわからん

821 名前:デフォルトの名無しさん :03/09/22 09:18
>>820
それでいいんじゃね?

822 名前:デフォルトの名無しさん :03/09/22 10:12
PC-9801の4096色中16色は4プレーンだったか。

823 名前:2GBのメモリを確保できる? :03/09/22 15:34
4GBまでメモリ実装できるパソコンがあるのですが、アプリケーションで2GBのメモリを確保した
いのですが、malloc(),new,GlobalAlloc,LocalAllocなどのいずれかで確保できますか?
ちらっと見たメモリレイアウトでは、OS(WIN2000Pro)としてユーザーモードとカーネルモード
(スーパバイザモード)で各2GBとあったのですが、仮にユーザーモードで2GBだとしたら
当然2GBのメモリを確保することはできませんよね?論理アドレスで連続した2GBのメモリ
を確保することは可能でしょうか?どなたか教えてください。

824 名前:デフォルトの名無しさん :03/09/22 15:53
ms-help://MS.PSDK.1033/memory/base/large_memory_support.htm
の付近を参照すれ。

825 名前:2GBのメモリを確保できる? :03/09/22 16:27
インストールされているMSDNのバージョンが違うのか、でてきませんが、IEで
ms-help://MS.PSDK.1033/memory/base/large_memory_support.htmといれてもでてきません。
ちなみにインストしてある、MSDNは2001年の1月リリースのやつです。ネット上でのアドレス
わかりませんか???またはその部分をコピペしてくれてもうれしいのですが、すみません。


826 名前:デフォルトの名無しさん :03/09/22 16:34
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/large_memory_support.asp

827 名前:2GBのメモリを確保できる? :03/09/22 16:54
ありがとうございます。読んでいます。
なんとなくWindows2000 Proではだめで、XP Pro、Windows 2000 Advanced Server, Windows 2000 Datacenter Serverでないといけないような気がしてきたのですが、、、気のせいでしょうか?
もう少し読んでみます。

828 名前:デフォルトの名無しさん :03/09/22 17:56
TAPIの使い方についてPCで電話をかけ、
会話する方法を解説しているサイト知りませんか?

829 名前:デフォルトの名無しさん :03/09/22 18:33
アマゾンで勧められています
どうすべきでしょうか

ボーランドオタにはエロゲーオタが多いのでしょうか

http://www.amazon.co.jp/exec/obidos/ASIN/B0000794U5/ref%3Dsr_aps_sw_3/249-9336132-8746746


830 名前:デフォルトの名無しさん :03/09/22 18:36
ワロタ
アマゾンで今までBuilder買った奴が一人しかいなくて、
そいつが何を血迷ったかエロゲも同時に買ったと予想

831 名前:デフォルトの名無しさん :03/09/22 18:42
なんでAPIスレにそんなの書き込むんだ?

832 名前:デフォルトの名無しさん :03/09/22 19:53
そもそもBCBスレじゃ結構前に既出なんだが‥‥

833 名前:2GBのメモリを確保できる? :03/09/22 20:29
いろいろ調査した結果わけがわからなくなったのですが、Windows2000Proで(Advanced severでもWINXPでもない)アプリケーションで2GBのメモリを確保することはできますか???
ユーザーモード空間は最大2GBなので2GB取れるはずないのはわかるのですが、
スワップなしのメモリ(論理アドレスでも連続している必要はないえすが)2GB取れますか?


834 名前:デフォルトの名無しさん :03/09/22 20:41
>>824,826はどちらかというと4Gを超えるメモリを扱うのに使うものですよね
editbinやリンカオプションの/LARGEADDRESSWAREはどうでしょう

あとスワップ無しはまた別問題のような気がします

835 名前:デフォルトの名無しさん :03/09/22 23:10
SetFocusもSetForegroundWindowもSetActiveWindowも
お目当てのウインドウ以外のアプリケーションのメニューが出てる状態だと、
全然アクティブにしてくれないんですが、
何かいい方法ないでしょうか?

アクティブにしたいウィンドウのタイトルバーをクリックするとか
ALTキーを送った後にアクティブにするとか、対処療法しか思いつきません。
誰か知恵WOO

836 名前:デフォルトの名無しさん :03/09/23 12:19
>>835
>>794-

837 名前:デフォルトの名無しさん :03/09/23 21:23
このままSDK使い続けて支障ありませんか。
偉大なぺゾルト様を読み、SDK始めて1年が経過しました。
おかげで、MFCのコードを見ると吐き気が出ます。
このまま、SDKを使い続けても問題ありませんか。
それともMFCに移行したほうが良いですか。
PERLやPHPも便利で使える関数群があったので、普及したと個人的に感じてます。
猫プロの2/3位は、作成できます。
今後の方向性をご教授ください。

838 名前:デフォルトの名無しさん :03/09/23 21:31
俺MFCから入ってSDKに移行してるんだけど?

839 名前:デフォルトの名無しさん :03/09/23 21:45
MFCのデフォルトのアイコンが嫌いだからダメ

840 名前:デフォルトの名無しさん :03/09/23 21:48
MFC使わずにSDKで作るとプログラム書いた,って気になる.
でもGUI使うちょっとしたツールならMFC使って手抜きに書いちゃう.

841 名前:デフォルトの名無しさん :03/09/23 21:55
片っ端からVCL漬け‥‥∧||∧

842 名前:デフォルトの名無しさん :03/09/23 22:03
>>840
道具を使うことが目的になっていますね。

843 名前:デフォルトの名無しさん :03/09/23 22:15
837です。
MFCは虫の息ですよね。CRTとか表示デバイス?
気になる 841さん
C#びるだーですか。でる、まさかC
言語は道具である。使えれば使う、使えなければ使わなくなる。
(C++最高 第2章)
そういう意味ではVCL2番目に使える道具ですよね。
1番目につかえる道具 C言語+ぺゾルト本

844 名前:デフォルトの名無しさん :03/09/23 22:36
ATL(WTL)使ってみれば?

845 名前:デフォルトの名無しさん :03/09/23 23:36
MFC使ってるんだよ
仕事なんだよ
VCL使いたいんだよ
画面いっぱいなんだよ
なんでMFCなんだよ
助けてくれよ

846 名前:デフォルトの名無しさん :03/09/23 23:37
おまけに
VCなのに
C言語臭いことやってんだよ
規則で決まってるんだよ
テンプレート使わせろよ


847 名前:デフォルトの名無しさん :03/09/23 23:37
ノートにVCの開発画面は辛い
コード表示部分が少なすぎ

848 名前:デフォルトの名無しさん :03/09/24 01:09
>>841は「妻みぐい2」中毒

849 名前:デフォルトの名無しさん :03/09/24 22:34
837です。
>>ノートにVCの開発画面は辛い
鷲は、15TFTでもつらいぞ。
寺ぱっとを立ち上げIDEと同時使用でつかってます。
あと、寺ぱっとタイムスタンプ付で8ポイント印刷して見てます。
sample_test.cpp 2000行 1本勝負です。
背景黒で行番号蜜柑色で//緑 かなり快適です。
VCに罪はなし、ノートでIDEなら16インチSXGAがいい。





850 名前:デフォルトの名無しさん :03/09/24 23:48
事情があって、C言語中で標準出力をファイルに接続したいの
ですが(リダイレクトではなく)、なにか良い方法はないでしょうか?
・こんなイメージのことがやりたい
 FILE* TempStdout = stdout;
 FILE* OutFile = fopen("Temp.txt", "w");
 stdout = OutFile;
 printf("abc");
 stdout = TempStdout;
 close(OutFile);

・事情
 1.最初コンソールアプリケーションで作っていたものを、
   Windowsアプリに変更した。
 2.コンソールアプリケーション時にデバッグ情報をprintf
   で出力していた。
 3.Windowsアプリケーションに持っていったときに2のprintf
   出力が見れなくなった。
   Dos窓から"appli.exe > Temp.txt"として起動したり色々
   試したがダメだった。
 4.printfはソース中に無数にあり、全てを変更したくない。

コンパイラはVC6++です。
何か良い方法があればお願いします。

851 名前:デフォルトの名無しさん :03/09/24 23:59
>>850
つい最近、C++スレだか環境依存OKスレだかで似たような話があったはず。

852 名前:850 :03/09/25 00:26
>>851
ありました。この辺りですかね。
http://pc2.2ch.net/test/read.cgi/tech/1059041347/191-212
この路線で試してみます。どうもありがとう。

853 名前:デフォルトの名無しさん :03/09/25 01:01
標準ライブラリのdup/dup2は使えないかねー。
コンソールプログラムではよくやるんだけど。

// stdoutのコピーを作っておく
int copy = dup(fileno(stdout));
// stdoutの出力先を変更する
FILE *OutFile = fopen("Temp.txt", "w");
dup2(fileno(OutFile), fileno(stdout));
printf("write to file\n");
fflush(stdout);
fclose(OutFile);
// stdouを元に戻す
dup2(copy, fileno(stdout));
printf("write to stdout\n");

854 名前:デフォルトの名無しさん :03/09/25 03:14
CreateFile(...)で作成されたファイルハンドルから
アクセスモードや共有モードを取得するにはどうしたら良いのでしょうか?
もう一つ。
このハンドルからFILE*に変換?するようなAPIってあるんですかね。

855 名前:  :03/09/25 04:21
>>850

freopen() でいいのでは。

856 名前:デフォルトの名無しさん :03/09/25 05:21
>854
両方とも存在しない。

857 名前:デフォルトの名無しさん :03/09/25 06:12
後者は確かにAPIには存在しないけどできないわけじゃない

858 名前:デフォルトの名無しさん :03/09/25 15:28
バイトを入れ替えるマクロかAPIを教えてくだ

859 名前:デフォルトの名無しさん :03/09/25 15:40
winsockのhtons, htonl

860 名前:デフォルトの名無しさん :03/09/25 15:54
_swab

861 名前:デフォルトの名無しさん :03/09/25 16:05
GetAsyncKeyState()関数が機能しません。
WinXPでは、うまく行くんですが、9x系ではうまく働きません。
開発環境はVisual stdio.netです。
それから、INPUT構造体とかも使えないんですが、何でですか?
プリプロセッサの結果では、そもそも展開されていないんです。

862 名前:デフォルトの名無しさん :03/09/25 16:34
構造体をプリプロセッサが展開?

863 名前:デフォルトの名無しさん :03/09/25 18:09
>>860
あり、でけますた

864 名前:デフォルトの名無しさん :03/09/25 18:10
とんでもないDQSがやってくるな

865 名前:デフォルトの名無しさん :03/09/25 19:09
DQS=ドキュソ?
そういや昔なんかの雑誌に「部下:MS-DOSって知ってますか?」
「上司:もすばーがー?」ってネタがあったな。

866 名前:デフォルトの名無しさん :03/09/25 21:00
CreateFile -> CreateFileMapping -> MapViewOfFile で EXE イメージをマップして
みたんですが ImageDirectoryEntryToData でまともにデータがとれないでつ.
MapViewOfFile でとってきたポインタは、ImageDirectoryEntryToData にわたせない
もんなんですか?

867 名前:850 :03/09/25 22:00
>>853
これで行けました。

>>855
こちらもこんな感じで行けました。
freopen("Temp.txt", "w", stdout);

私の目的としては上記のどちらでも問題なさそうです。

なお、
>>852
こちらはただいま勉強中です。

レスくれた皆さんどうもありがとう。

868 名前:デフォルトの名無しさん :03/09/26 00:09
>>866
実行ファイルは特別な方法でマップされる(ファイルアラインと
メモリアラインが異なる場合があるとか)

869 名前:デフォルトの名無しさん :03/09/26 10:18
InternetOpenUrlなのですがInternetSetOptionでタイムアウトをせっていしているのに
設定したタイムアウトでInternetOpenUrlから抜けてくれません。
何か特別な設定がひつようなのでしょうか?

870 名前:デフォルトの名無しさん :03/09/26 10:29
IEのバージョンによってはタイムアウトが正常に作動しないから非同期モードを使うように。
というのがあった気がするが。

871 名前:デフォルトの名無しさん :03/09/26 10:36
>>870
ありがとうございます。
非同期モードに関する内容を書いてるHPを知っていたら教えていただきたいのですが、

872 名前:デフォルトの名無しさん :03/09/26 10:40
>>871
ttp://support.microsoft.com/default.aspx?scid=kb;EN-US;275046

873 名前:デフォルトの名無しさん :03/09/26 17:38
>>872
かなり参考になりました。
しかしコールバック関数で存在しない串とかを指定しても何故か
INTERNET_STATUS_HANDLE_CREATEDが走ってしまって・・
しかもINTERNET_ASYNC_RESULT構造体のdwResultにハンドルもどきの値が入っているっぽいので、
このハンドルでリードしてもエラーにはなりませんが、当然ながら読み込みは0バイトです。
うまい方法ありますか?

874 名前:デフォルトの名無しさん :03/09/26 17:51
あ、よくよくみてみるとINTERNET_STATUS_HANDLE_CREATEDって
InternetConnect 関数用っぽいですねこれ、
InternetOpenUrl関数で正常にハンドルを取得するにはコールバックでStatusが
何のときにすればいいのでしょうか?

875 名前:デフォルトの名無しさん :03/09/26 23:16
ツリービュー+リストビューのようなコントロールが欲しいのですが、どこかにありませんか?
CodeGuruにはあるんだけど、MFCを使ってるっぽいのがネックで…。
ネックになってるのは、私がMFCを使ったことないってこと以上に、
MFCだと初期のWin95では動作しないと聞いたからです。

誰かアドバイスをお願いします。


876 名前:デフォルトの名無しさん :03/09/26 23:18
バージョンは?

877 名前:デフォルトの名無しさん :03/09/26 23:25
>>876
Windows 95です。

878 名前:デフォルトの名無しさん :03/09/27 00:42
ウィンドウを作る前に、ウィンドウクラスの拡張領域にデータを書き込むことはできますか?
SetClassLongPtr の引数がなぜか hWnd なんですけど、他に何かいい関数はないんでしょうかね?

879 名前:デフォルトの名無しさん :03/09/27 13:29
出来ないよ。
なぜか hWnd じゃなくて、hWnd が必要だからそうなってるんだろう。

ウィンドウが作られたら直ぐに必要になるデータだったら、
CreateWindow or CreateWindowEx の lpParam に
データへのポインタをセットして、
ウィンドウ作られるときに呼ばれる WM_NCCREATE or WM_CREATE
で CREATESTRUCT 構造体のlpCreateParams(=lpParam)から取り出せばよかろう。

そこで補足メモリに書き込んだら、それ以降のメッセージ処理で使える。

880 名前:デフォルトの名無しさん :03/09/27 13:40
なぞなぞか?
誰か一休さん呼んでこい。

881 名前:デフォルトの名無しさん :03/09/27 19:15
ユーザがログオンしていない時だけ重い計算処理を実行するWindows 2000用の
サービスアプリケーションを作りたいのですが、方法が分からなく困っています。
GetUserName()でユーザ名を取得し、ユーザがログオンしているか調べる
事を考えたのですが、サービスアプリはSYSTEM 権限で実行されるためか、
ユーザがログオン中であってもそうでなくても、"SYSTEM"というユーザ名
が返ってきてしまいます。いい方法がお分かりの方がいらっしゃいましたら
ぜひご教授下さい。


882 名前:デフォルトの名無しさん :03/09/27 22:01
EnumWindowStation して OpenWindowStation して GetUserObjectInformation した
結果から判断するのかな。。。
OpenInputDesktop してGetUserObjectInformationすれば十分かな。。

883 名前:881 :03/09/28 00:45
情報どうもありがとうございます!! >> 882
全く私の知らない命令でした。。
まずは、OpenInputDesktopからやってみました。
char DeskName[100]; 
DWORD WriteByte;
DWORD AccessFlag = STANDARD_RIGHTS_ALL | DESKTOP_CREATEMENU
 | DESKTOP_CREATEWINDOW | DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP
 | DESKTOP_WRITEOBJECTS | DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL
 | DESKTOP_JOURNALPLAYBACK| DESKTOP_JOURNALRECORD;
HDESK hDesk = OpenInputDesktop(DF_ALLOWOTHERACCOUNTHOOK, FALSE, AccessFlag);
GetUserObjectInformation(hDesk, UOI_NAME, DeskName,100, &WriteByte);
こんなかんじでよろしいでしょうか?
この方法では残念ながら、ユーザログオン時もログオフ時も
UOI_NAME = " " (半角 space 1文字) で同じでした。。
とりあえず、これからOpenWindowStation にチャレンジしてみようと思います。


884 名前:881 :03/09/28 01:47
↑訂正
UOI_NAME = " "(半角 space 1文字)
ではなく、
DeskName = " "(半角 space 1文字)
でした。。

885 名前:881 :03/09/28 02:30
EnumWindowStation を使ってみたのですが、callback されてくる情報は
ユーザログオン時とログオフ時どちらも同じ内容になってしまい、区別
がつかないようです。。。
何かアイデアがございましたら、ぜひ引き続きご教授お願い致します。


886 名前:デフォルトの名無しさん :03/09/28 05:10
>>879
WM_NCCREATE がどんな状況でも一番最初に呼ばれると考えていいんでしょうか?
それより前の処理がどうでもいいものばかりなら、それで行きたいと思います。

887 名前:デフォルトの名無しさん :03/09/28 10:02
>>886
確かバグでWM_GETMINMAXINFOが先に来ることがあったような。
MFCの真似してみたら? (自分にCBTフックをかけてHCBT_CREATEで
乗っ取る)

888 名前:デフォルトの名無しさん :03/09/28 12:19
どこで質問していいかわからないので、スレ違いであれば誘導して下さい。

ノートン・アンチウイルスのようにエクスプローラーの
ツールバーに常駐するアプリケーションを作成したいのですが
何について調べたらいいのでしょうか?キーワードみたいな
ものがあれば教えて下さい。

開発環境は VC2003 です。

889 名前:デフォルトの名無しさん :03/09/28 12:22
>>888
検索キーワードは "C"。
たくさんあるから情報には困らないはず。

890 名前:デフォルトの名無しさん :03/09/28 12:28
>>889
ありがとうございます。
それでも調べてみますが、ほかにも情報がありましたら教えてください。


891 名前:888 ◆8OHUrY3.ic :03/09/28 12:32
>>890は私ではありません。

892 名前:デフォルトの名無しさん :03/09/28 14:31
>>888
日本語の情報源がかなり少ないから、大変だと思う。
とりあえず以下のページを試す(英語。VS2003は不可)
ttp://www.codeproject.com/atl/ietoolbartutorial.asp

次に以下のページを理解する。(日本語)
ttp://www.microsoft.com/japan/developer/library/jptech/MSDNNews/top.htm

前提条件として、C++とATL、COM、Win32APIの知識は絶対必要
これで無理ならあきらめる。


893 名前:デフォルトの名無しさん :03/09/28 15:08
>>892
ATLの知識は必須ではないよね
無駄な根性があればCやアセンブラでも組めるし

894 名前:888 ◆8OHUrY3.ic :03/09/28 15:56
>>892
ありがとうございます。じっくり読んでみます。

895 名前:デフォルトの名無しさん :03/09/28 19:00
>>886 さま、遅レス失礼
それほど Win32 API の経験が深くないのですが:
WndProc にどんな WM_* がどのような順序で来るのか、実地に調べる方法はいろいろ
やったことがあります。普通のデバッガーはこの目的には不適当ですので使いません。
記録をファイルに書いたり、named pipe で送る方法もあり得ます。元が UNIX 系なのもので(^^);

896 名前:デフォルトの名無しさん :03/09/28 21:59
お絵かきソフトを作成しようと考えているのですが、表示はウィンドウのDC
を使って作ったビットマップを使用するとして、実態の方はユーザーが指定した
色数やサイズを利用したいと考えております。 DCを使用する場合は色数など
を合わせたものでないと利用できないと記述されてましたが、実態がビットマップ
だとしても自前で描画処理をしてしまわないといけないでしょうか?

(ドキュメントを見ると、DCに付属するBITMAPの扱いに特化してるようで
 任意のBITMAPに適応したDCの作り方はないようでしたが。)

897 名前:デフォルトの名無しさん :03/09/28 22:43
>>896

「DIB」で検索してみよう。


898 名前:892 :03/09/28 23:05
>>893
インターフェースがpureCで実装できると今知った。
ググってみると確かにサンプルがあるね。

>>888
C#が使えるならば、簡単に作る方法があるみたい。
ttp://www.codeproject.com/csharp/dotnetbandobjects.asp


899 名前:デフォルトの名無しさん :03/09/29 00:24
>>895 (878?)
何をやりたいのか分からんが、
WM_*の順序に依存した処理を行うのは悪いアプリケーション。

誰も保障していないのでWindowsのバージョンによって
動かなくなることもありえる。

それでもというなら自分で調べて(spy++で簡単に分かる)
Windowsのバージョン依存を理解したうえでヤレ。


900 名前:デフォルトの名無しさん :03/09/29 01:29
気にしなーぃ、気にしない、っと。

>>887
HCBT_CREATEWND
The system calls the hook procedure before sending the WM_CREATE or WM_NCCREATE
message to the window.

ってあるから、順序の問題は解決しないんじゃない?
MFCのソースは見てないけど、単にWndProc内で条件判断するオーバーヘッドを
取り除いてるだけとか。外してたらすまそ。

SetClassLongPtrしたいなら、とりあえずダミーのウィンドウを
一個作るっていうのはダメなのかな・・・。
(それ以前に、ウィンドウ作る前にSetClassLongPtrしたいっていうのが
よく分からない・・・。RegisterClassでやればいいのに。)

901 名前:879 :03/09/29 04:01
なんかえらく面倒な話になってるし。
フックまで使うような処理かな?

ウィンドウが作成されたときに一番最初に
ウィンドウプロシージャに飛び込んでくるメッセージは
WM_NCCREATE だろう。

将来拡張されるかもしれないけど、今作っているアプリは
将来拡張されるメッセージの事は知らないので
間違って処理してしまうことはないだろう。

バグはバグ。ウィンドウズのバグなら認識してから対応しても
良いのでは?
ちなみに、この方法で 3.1 の時代から実装しているけど
問題になったことは無いな。

このシチュエーションではWM_GETMINMAXINFOは処理してないので、
これについては分からない。このメッセージだけ個別対応する方法もあるし。


902 名前:デフォルトの名無しさん :03/09/29 09:27
そろそろ収束しそうな感があるけど,蛇足を一つだけ。

static InternalObject *obj = 0;
if (msg == WM_CREATE) {
 obj = new InternalObject();
 return 0;
}
if (msg == WM_GETMINMAXINFO)
 return obj->work(); // うほっ!!!!!!!!11ぬふあ

こんなコード書いてたら落ちるんで要注意ですね。
もちろん,常識あるプログラマならば

if (msg == WM_GETMINMAXINFO)
 if (obj) return obj->work();
  else  return 0;

みたくチェックするのは当たり前,と・・・

903 名前:デフォルトの名無しさん :03/09/29 11:57
>>900
> before sending the WM_CREATE or WM_NCCREATE
でなんで解決しないの?
MFCが使ってるからMicrosoftはこれを破壊するような
仕様変更は(しない|できない)と思われ
>>901
補足メモリにWM_NCCREATEでthis入れて以降の
メッセージで使うという実装だと、
その前に別のメッセージがきたらディスパッチできない。

904 名前:話の途中ですが 名無しです :03/09/29 12:15
前スレBuild12も含めてhtml化されてるんで、次スレにテンプレ書くときは
よろしくです

Build12:http://pc2.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc2.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc2.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc2.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc2.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
    ※981で終っているがいいんか?
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html

このスレの2(>>2)を次スレのテンプレとする場合は、上記のURLに置き換えて
おいて下さい。

よろしく!

905 名前:デフォルトの名無しさん :03/09/29 13:00
壁紙にhtmlを指定する方法を教えてくれ
SystemParametersInfo じゃダメだった…

906 名前:デフォルトの名無しさん :03/09/29 14:30
>>901
漏れもフックは使ってない。
でも、WndProcでNCCREATEorCREATEに個別対応するなら、
結局やってることはフックと同じこと。どっちでもいいんじゃない?

>>903
全てのウィンドウメッセージの前に呼ばれるということが保証されてる
というのならまだしも、フックでメッセージの順番の問題を解決するのは考え方として変だと思う。

NCCREATEorCREATEが送られたどうかを判断するには
ウィンドウのextra memoryに0以外の値(ウィンドウをクラスで
実装してるんなら、CREATESTRUCT経由でthisとか)を書き込めばいい。
WndProcのGetWindowLongPtrして、戻り値が0の場合は初期化がまだだから、
DefWindowProcでも呼んどけばいいのでは。
っていうか、こんなのあえて書くこともないけど。

907 名前:デフォルトの名無しさん :03/09/29 14:32
まちがいた。

×WndProcのGetWindowLongPtr
○WndProcでGetWindowLongPtr

908 名前:デフォルトの名無しさん :03/09/29 17:37
最初にくるメッセージが何であれ、
ATLのメッセージハンドリングっぽくすればいいだろうに。

...
wcex.lpfnWndProc = WndProc1st; //最初のコールバックを設定。
...
Mgr::Instance().SetData( ::GetCurrentThreadId(), this ); // データ一時保存
CreateWindowEx( ... ); // ウィンドウ作成
...

LRESULT CALLBACK WndProc1st( .... )
{
 void * p = Mgr::Instance().GetData( ::GetCurrentThreadId() ); // データ取得
 SetWindowLongPtr( hWnd, GWLP_USERDATA, (LONG_PTR)p ); // なんか処理

 // WndProc を本来のものに変更
 SetWindowLongPtr( hWnd, GWLP_WNDPROC, (LONG_PTR)WndProc );
 return WndProc( hWnd, uMsg, wParam, lParam );
}

LRESULT CALLBACK WndProc( .... )
{
... // なんか処理
};

909 名前:デフォルトの名無しさん :03/09/29 19:13
志村!thisー!

910 名前:デフォルトの名無しさん :03/09/29 23:11
質問をさせていただきたいと思います。
現在、プログラミングの練習も兼ねて、フリーソフトとしてよく出回っているような
デスクトップの壁紙チェンジャーを作りました。壁紙チェンジャーの作り方自体は多くの
ホームページで取り上げられている為、すぐに作成することが出来ました。
SystemParametersInfo( SPI_SETDESKWALLPAPER , 0 , FileName.c_str() , 0 );
↑を用いました。
その後、タイマーを使って高速に壁紙をチェンジすることで、擬似的なアニメーション壁紙
にしようとしたのですが、デスクトップの壁紙をチェンジ(リフレッシュ?)する毎に、
壁紙だけでなく、上にかぶさっているフォルダやファイルのアイコンまでリフレッシュされて
しまう為、アイコンがちらついてしまいます。(壁紙はちらつきません)
そこで、かぶさってるアイコン等は除いて、純粋に壁紙のみをリフレッシュする方法はないのでしょうか?
ネットでは見つけることが出来ませんでした。
開発環境はXP:C++Builder6です。お分かりになる方がいらっしゃいましたら
どうかよろしくお願いいたします。

911 名前:デフォルトの名無しさん :03/09/29 23:17
>>910
そんなマニアックな機能が何の練習になるのかは知らないが、
GIFを壁紙に設定出来ないかな。
いくらなんでもタイマーで壁紙を再設定されるのはイヤだ。

912 名前:910 :03/09/29 23:36
>911さん
GIFだと
・アクティブデスクトップにする必要がある(?)
・(アクティブデスクトップにすると)マウスでドラッグする範囲選択
 が出来なくなる(複数のアイコンをマウスで選択するとき等)
・色数が制限される
ので断念しました (^^;
たしかにマイナーですよね。
私は夜景が好きなので夜景画像を壁紙にしてるのですが、
例えば、東京の夜景を壁紙にしたときに、ビルの角についている赤色灯が
点滅したりするといい感じかなぁ・・・と思い、挑戦しました。

913 名前:デフォルトの名無しさん :03/09/29 23:39
そーいやAVIを壁紙にするとか無かったっけ?

914 名前:910 :03/09/29 23:51
>913さん
AVIを壁紙にするツールはありますね。
まぁ私の場合、赤色灯を点滅させたいだけなので、
画像ファイル数枚をスライドショーみたいにしてループさせればよいのですが、
AVIにしてもスライドショーにしても、
・マウスでドラッグする範囲選択が出来なくなる・・・
のが痛いですね。
でも、その程度のデメリットは我慢する必要があるのかもしれませんね(泣)

915 名前:デフォルトの名無しさん :03/09/30 00:08
Windows95 以降のデスクトップは ListViewCtrl だから極論を言うと
こいつをフックしたら理論的には何でも出来るはずだが…

916 名前:デフォルトの名無しさん :03/09/30 00:13
GetDC(NULL)で描画する手もあるナ。

917 名前:デフォルトの名無しさん :03/09/30 00:15
http://techtips.belution.com/ja/vc/0037/
ここらへん、参考にならないかな。

ただ、そういう乱暴なソフト使いたくないかも…。

918 名前:デフォルトの名無しさん :03/09/30 00:51
InternetExplorere もフックしてるけどな。


919 名前:デフォルトの名無しさん :03/09/30 05:30
色々、動作を記録して自動でやってくれるソフト(AutoClickとか)を試したんですが、
なぜか、目的のVBA(エミュ)でEnterキーが認識されなかったので、(テキストファイルとかはOK)
自分で作ろうと思いたち、やってみているのですが、序盤からいきなり躓きました。。

int main() {

mv_mouse(32000,60000);
click_left();
for(i=0;i<3;i++){
keybd_event(0x4D, 0, 0, 0);
keybd_event(0x4D, 0, KEYEVENTF_KEYUP, 0);
}

return 0;
}

と、こんな風に書いてみたんですが、画面に開いているテキストファイルに
mv_mouseでフォーカスして、(これは成功)文字を入力しようと試みてるんですが
全く入力されません。
何が悪いかとかわかるかた、教えてください。
環境は、XPでコンパイラはbccです。。

920 名前:910 :03/09/30 09:23
>915-918さん
ご指摘いただいたキーワードまわりをいろいろ調べてみました。
どうやら私がやろうとしていることはプログラミングの練習としては
順序が間違っているようですね(^^;
たしかに実現できたとしても、かなり乱暴なソフトになってしまいそうです。
もうすこしハードルの低く、無難なものから積み上げていこうと思います。
今回は非常に勉強になりました。
ご助言くださった方々に感謝いたします。


921 名前:デフォルトの名無しさん :03/09/30 10:07
コンパイラのプロジェクト設定に、
「言語-ロケールID-0x411-日本語」みたいなのがあります。
多国語対応したい場合は、英語でしょうか?
それとも、言語を指定された時点で実行時にロケールID変更?

922 名前:デフォルトの名無しさん :03/09/30 10:10
JISをシフトJISに変換するAPIを教えてください

923 名前:デフォルトの名無しさん :03/09/30 10:17
>>922
ttp://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/j/jis2sjis.html

924 名前:デフォルトの名無しさん :03/09/30 10:20
>>923
あり

925 名前:919 :03/09/30 13:37
あれから全然進みません。
かなり考えたんですが、sendInputを使ってみようとも試みたんですが
ググって見つけた例文がVBのばかりだし、どなたかヒントだけでも
教えてください。。

926 名前:デフォルトの名無しさん :03/09/30 15:45
リストビューコントロールで、
項目が選択されたときボタンを有効に、
項目の選択が解除されたらボタンを無効にしようとしているのですが、

調べた限りでは、リストビューコントロールに、
項目が選択されたという通知メッセージがないようです

このような処理を実現するには、
どうしたら良いでしょうか?

927 名前:デフォルトの名無しさん :03/09/30 15:46
>>920
壁紙だけど、SystemParametersInfo()で、設定を伝播させないという
フラグがあったような気がする…

そのフラグをセットしておくと、たしかに壁紙は変更されて表示されるが
設定が変更されたというイベントが他のウインドウに伝わらないので
たぶん再描画されないと思う

また、その副作用(?)として、セットした壁紙がウインドウズの
設定ファイルに保存されないので、次回再起動すると、壁紙が
別のものになっている(か無いか)とかいう経験をした気がする

気がする…ばかりでゴメン
うまくいったら結果を教えて。おれも興味あるので。
その壁紙の上で作業するとき、マシンパワーを贅沢に使いそうだね。
ここらへんがいわゆるスクリーンセーバ(もどき)と違う悩みの種かな

928 名前:デフォルトの名無しさん :03/09/30 16:13
>>926
通知メッセージはNM_CLICKでOK
lParamがLPNMLISTVIEW構造体なので、
そのiItemメンバを調べる。-1なら選択解除。

929 名前:デフォルトの名無しさん :03/09/30 16:13
>925
ドライバ制作からどうぞ

930 名前:926 :03/09/30 17:06
>>928
レスありがとうございます。

試したところ、
NM_CLICKだけではなく、
キーボードで選択/選択解除した場合に、
NM_KEYDOWNの処理が必要となりそうです。

他に項目を選択する方法を思いつかないので、
これでいいとは思うのですが・・・

931 名前:デフォルトの名無しさん :03/09/30 17:41
FormatMessageなんですけど、

char arg1[] ="aaa";
LPVOID arg[] = { arg1 };

char buff[100];
FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY,
 NULL, IDS_STRING, 0, buff, 100, (va_list *)arg );

とすると、GetLastError() = 1813(指定されたリソースの種類がイメージ ファイルに見つかりません)
で失敗します。どうしてでしょうか?

CString buff;
buff.FormatMessage( IDS_STRING, arg1 );
は成功しました。

932 名前:デフォルトの名無しさん :03/09/30 17:51
なんでNULLを渡してるねん
そこにはメッセージリソースを含むDLLの
モジュールハンドルを渡すんだよ

933 名前:931 :03/09/30 18:04
自己解決。CWinApp::InitInstance (←MFC使ってます)で呼んでたのが
敗因っぽいです。他のとこに書いたら成功しますた。

>>932
>NULL を指定すると、現在のプロセスで動作しているアプリケーションの
>イメージファイルを検索対象にします
お騒がせしました。

934 名前:919 :03/09/30 21:08
>>925
どういうことですか?


935 名前:デフォルトの名無しさん :03/10/01 10:56
非同期でInternetOpenして
InternetOpenUrlでInternetReadFileを行うとちゃんとソースを取得できません。
トレース実行するとそれなりにとれているので、InternetReadFileの前に待ち時間を入れると
ちょとはマシになるのですが、InternetReadFileが終ったってどう判断すればいいのですか?
コールバック関数でINTERNET_STATUS_RESPONSE_RECEIVEDでイベントをアレすると
InternetOpenUrlの時に1回くるので、いまいち判断がつかないので・・

936 名前:デフォルトの名無しさん :03/10/01 11:08
>>935
1.非同期ならInternetReadFileExを使え。
2.このスレのログを全部読め。

937 名前:デフォルトの名無しさん :03/10/01 11:22
>>936
ううおおおおおお!!!
InternetReadFileExってAPIあったんですかあ!!
これググったんですけどプロトタイプがわからないです・・
教えてください

938 名前:デフォルトの名無しさん :03/10/01 11:26
>>937
嘘はいけません
ぐぐったら先頭にでてきましたよ
http://msdn.microsoft.com/library/en-us/wininet/wininet/internetreadfileex.asp

939 名前:デフォルトの名無しさん :03/10/01 11:59
>>938
いやごめん日本語のアレでググったらそれでない、んで後から全体でググってそれでてきた(;´Д`)
コンパイルは通ったんだけどどっかに使用例ってないですかねこれ

940 名前:デフォルトの名無しさん :03/10/01 12:02
>>939
>>872

941 名前:デフォルトの名無しさん :03/10/01 13:53
>>940
あり

942 名前:デフォルトの名無しさん :03/10/01 18:32
Win32で作ったEXEは、Pocket PCで動きますか?

943 名前:デフォルトの名無しさん :03/10/01 19:10
RegisterClassEx()で使われるWNDCLASSEXのそれぞれのメンバは
すべて用意しないといけないのでしょうか?

0にしておくことで、ウインドウズのデフォルトまかせにすることは
できないのでしょうか?

hIcon,hCursorなどは、デフォルトのままでいいや、と思うことが
けっこうあります。

944 名前:デフォルトの名無しさん :03/10/01 19:19
>>942
Win32用に作ったEXEは動かないよ。
該当CPUのPocketPC用にWin32で作ったものなら動く。(っていうか普通そうやって作る)

945 名前:デフォルトの名無しさん :03/10/01 19:21
>>944
じゃ、コンパイラは限られてんだ。
BCBは駄目かい?

946 名前:デフォルトの名無しさん :03/10/01 19:21
>>944
クロスコンパイル?

947 名前:デフォルトの名無しさん :03/10/01 19:44
>>945
>>946
(少なくとも基本は)そうです。

948 名前:910 :03/10/02 01:44
>>927さん  返事遅れてすいません。進んでませんが経過報告です。

>壁紙だけど、SystemParametersInfo()で、設定を伝播させないという
>フラグがあったような気がする…
SystemParametersInfoの第4引数をNULLにすると、iniに記録されず、
他のアプリケーションにも通知しない・・・とあります。
しかし、そうやってもちらつきます。
GetDC(NULL)を用いる方法は、SysListView32やウィンドウよりも手前に
描画する為、デスクトップのアイコンやウィンドウが隠れてしまいます。
SysListView32に描画する方法も、アイコンが隠れてしまう(と思われます)。
残された道はListViewにフックをかけてどうにかするしか思いつきません。
メッセージを横取りして、再描画させなく出来ればいいんですけどね。
プログラミングを始めて1週間も経ってないので、まだイマイチ把握できてません。
初めて作るソフトとしてはふさわしくなさそうです(^^;

949 名前:デフォルトの名無しさん :03/10/02 08:37
Win32ベースのPocketPC用コンパイラは、DEV.NETだけ?

950 名前:デフォルトの名無しさん :03/10/02 09:07
>>949
プラットフォームによるよ。
PocketPC2002なら、eVT3.0だし。

951 名前:デフォルトの名無しさん :03/10/02 10:34
非同期でInternetReadFileExを使ってのやり方はなんとなくわかったのですが、
普通にHPから非同期でソースを取得する場合InternetConnectの第2引数の
サーバー名には何を指定するのでしょうか?
FTPではないので

952 名前:デフォルトの名無しさん :03/10/02 11:03
サーバー名に決まってるだろヴォケ

953 名前:デフォルトの名無しさん :03/10/02 11:39
ああすまんこのちんかすめ
InternetCrackUrlでアレしてホスト名アレしたらでけたわ

954 名前:デフォルトの名無しさん :03/10/02 12:13
ああす まんこ の ちんかす め?

955 名前:デフォルトの名無しさん :03/10/02 12:19
>>943
LoadIcon(NULL, IDI_APPLICATION)
LoadCursor(NULL, IDC_ARROW)
でシステムのアイコンとカーソルが使われるが。
ちなみにカーソルのデフォルトは砂時計だから
設定しないとちょっと困ると思う

956 名前:デフォルトの名無しさん :03/10/02 12:28
ふと思ったんですが、CALLBACK関数ってウィンドウプロシージャァのほかに
何種類くらいあるんでしょうかねぇこれってトリビアにならないでしょうか

957 名前:デフォルトの名無しさん :03/10/02 13:20
プログラム内で、別のアプリケーションを
別のユーザ/パスワードで実行させたいのですが、
そのようなことが可能なAPIはありますでしょうか?

動作的にはRunasコマンドをイメージしています。
Runasでは実行時にパスワードが求められてしまう
(Runasコマンドの引数としてパスワードは指定できない)のと、
APIで可能であればそちらを使用したいと思いますので……

もし何かご存知の方おられましたら、ご教授いただけますようお願いいたします。。

958 名前:デフォルトの名無しさん :03/10/02 13:29
なんでそこでrunas.exeをDependency Walkerで見てみる、ぐらいのことはしないのか。

959 名前:デフォルトの名無しさん :03/10/02 13:56
>>958
CreateProcessAsUser()も知らないの?

960 名前:デフォルトの名無しさん :03/10/02 14:14
>>959
Windows2000のrunas.exeが使用しているのはCreateProcessWithLogonWだが。

961 名前:デフォルトの名無しさん :03/10/02 15:46
お返事ありがとうございます。
早速CreateProcessAsUserを調べてみて、
確かに別ユーザで実行されていることを確認しました。
ありがとうございました。

CreateProcessWithLogonWについては、
MSDN Onlineにはあるのですが、VC++6.0ではwinbase.hに定義されていませんでした。。
今更ながら、環境についての記述を忘れていて申し訳ありません。
ちなみに環境はWindowsXP+VC++6.0を使用しております。

……そして、CreateProcessAsUserで実行したプログラムが
エラーで落ちているのはまた別の話か……精進します。。

_| ̄|○

962 名前:927 :03/10/02 19:42
>>948
がんばってくれ。
フックを使うよなウインドウズプログラムは俺も経験ないよ。

ちらちらするというのは、ウインドウズがシングルバッファで
壁紙を再描画しているからかもしれない。よくしらないけど。
たしかに、壁紙を激しく替えるなんて想定外、というのは妥当なんだろう。

初めてのだいざいには大きすぎる規模のプログラムかも。
とりあえず今は保留でもいいかもね。
でもさ、自分が欲しいものを自分で作るのってたのしいよね。
こういうときって、けっこう簡単に自分の限界(とおもってたところ)を
さっくり突破したりするよな…経験的に。
動機とかモチベーションとかって、でかいよな。

963 名前:デフォルトの名無しさん :03/10/03 03:01
>>955
デフォルトが砂時計というわけではなく、カーソルが変化しないだけだと思う。
ウィンドウ枠でカーソルを矢印にして、ウィンドウ上に持ってくると矢印のままだし。

964 名前:デフォルトの名無しさん :03/10/03 15:08
MACアドレスを取得したいのですが、
95系、NT系のどちらでも使用できるAPIってありますでしょうか?

965 名前:デフォルトの名無しさん :03/10/03 16:46
>>964
Del厨?

966 名前:デフォルトの名無しさん :03/10/03 19:45
このスレでいいのかどうか、アレなんですが。

シェルエクステンションのDLL作ってるんですけど
regsvr32 /u
しても、DLLがしばらく(最悪再起動するまで)「使用中」とかいって削除できませんよね?
明示的にアンロード(?)して、即削除可能にするってできないんでしょうか?

967 名前:デフォルトの名無しさん :03/10/03 20:28
WIN64APIまだ?

968 名前:デフォルトの名無しさん :03/10/03 21:41
>966

AlwaysUnloadDLL

969 名前:デフォルトの名無しさん :03/10/03 22:23
オンラインゲームなどでよくある簡単な個人認証を実装
したいのですがサンプルや情報のあるサイトか書籍を
ご存じでしたら教えてください。
よろしくお願いします




970 名前:デフォルトの名無しさん :03/10/03 22:50
↑マルチに付き放置推奨。

971 名前:デフォルトの名無しさん :03/10/03 23:23
>>970
丸一日たったけどダメだったので、仕方なかったのです
急なリクエストがはいっちゃって、勘弁してください
どなたかヒントお願いします!


972 名前:デフォルトの名無しさん :03/10/03 23:46
>>971
マルチ:
 何の状況説明も無く複数のスレに同じ質問を投げる。
 それぞれのスレに回答がつくが、一番早かったところ意外は徒労に終わり、大概礼も言われることなくむなしく流れていく。

移動:
 前のスレでレスがつかなかったので、移動する旨と移動してきた旨をちゃんと書く。
 前スレでその質問を見たやつも移動先のスレに来て回答すればいいので労力が無駄になることは無い。

無視されてるMFCスレの237が良い例だな。

切羽詰った状況を自分のマナーとモラルが無いことのいい訳にするなや。

973 名前:デフォルトの名無しさん :03/10/04 00:22
>>968 それ、レジストリのヤシでしょ?効果なかった。

974 名前:デフォルトの名無しさん :03/10/04 03:50
>973

俺の場合は効果はあったけどな。

エクスプローラがそのDLL使ってんじゃない?
デバッグするんだったらIEからシェルエクステンションを
ロードするようにすれば少しは違うかも

975 名前:デフォルトの名無しさん :03/10/04 04:00
とりあえずエクスプローラ落としてみるってのはどうだ?

976 名前:名無し@沢村 :03/10/04 12:50
>>966
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/debugging.asp

977 名前:デフォルトの名無しさん :03/10/04 21:59
本人も謝ってるんだからさ、誰か969に答えてやったらどうだ?
知っていたら俺が答えてやってもよいんだけど、
誰かヘルプよろしく


978 名前:デフォルトの名無しさん :03/10/04 22:05
本人キタ━━━━━(゚(゚∀(゚∀゚(☆∀☆)゚∀゚)∀゚)゚)━━━━━!!

979 名前:デフォルトの名無しさん :03/10/04 22:06
>>969=>>977

980 名前:デフォルトの名無しさん :03/10/04 23:10
自演までマルチとは。

981 名前:デフォルトの名無しさん :03/10/04 23:26
盛り上がってるとこスンマソン。
C言語なら私に聞け! Part 65
http://pc2.2ch.net/test/read.cgi/tech/1064234533/
から誘導されてきますた。

ファイルの扱いの中でも、
wavの読み込み(波形表示や編集)・書き込み(入力によるwav作成)
などはどういう風にやればできるようになるでしょうか?
現時点ではがんばって調べてヘッダがわかったぐらいです。
よろしくおねがいします。

982 名前:デフォルトの名無しさん :03/10/04 23:40
>>971
981を見習え

>>981
俺も良くわからんのだけど
http://msdn.microsoft.com/library/en-us/multimed/htm/_win32_multimedia_functions.asp?frame=true
あたりでどうにかなるんじゃない?
最新のMSDN Library持ってるなら日本語の説明も付いてる。

他の人がもっと的確なレスつけてくれたらそれで良いんだが、
もし自力でうまくいったら触りだけでも書き残してってくれ。

983 名前:デフォルトの名無しさん :03/10/04 23:51
>>981
ヘッダが分かったら,後はdataチャンクにPCMのバイトストリームが入ってるだけ。
ストリームフォーマットは,リトルエンディアンでチャンネル順にパックされてる。

とりあえず,PCM各サンプルのプロット -つまり,波形の表示- からはじめたら?

984 名前:デフォルトの名無しさん :03/10/05 00:09
ある子ウィンドウが、親ウィンドウの移動に追従するにはどうすればよいのでしょうか。

親ウィンドウのタイトルバーをドラッグして移動する際に、子ウィンドウも一緒に移動して欲しいのですが・・・。
よく見かける、アクティブウィンドウのタイトルバーに座って、移動も一緒に追従するアプリはどのようにして実現しているのでしょうか。

開発環境はWindows Me,VC++6.0です。
よろしくお願いします。


985 名前:デフォルトの名無しさん :03/10/05 00:28
>>984
・フックしこんで対象ウィンドウにWM_WINDOWPOSCHANGEDあたりが来たら
それに合わせて自分も移動する。
・定期的に対象ウィンドウの位置を調べて(以下略

986 名前:984 :03/10/05 01:54
できました!
>>985さん超感謝ですヽ(TーT)ノ
本当にどんなメッセージを使うのか、見当もつかなかったので・・・

今回はウィンドウが親子関係なのでフックしたりはしなくても済みました(´ー`)
親のWM_WINDOWPOSCHANGEDを受けて、子にウィンドウが移動した旨、伝えることで実現できました。
有難うございます。

987 名前:話の途中ですが 名無しです :03/10/05 05:22
次スレ立てるんだったら、そろそろかな。
立てるときは>>2だけでなく>>904も夜露氏句

988 名前:デフォルトの名無しさん :03/10/05 09:57
これも

Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/


989 名前:981 :03/10/05 11:11
>>982>>983
レスありがとうございます。

>>983
その、プロットですが手順の目処もたちません。スキルが高くないので・・・。
どこか勉強できるページなどないでしょうか?
どうぞよろしくお願いします。

990 名前:デフォルトの名無しさん :03/10/05 12:36
>>989
ひょっとしてwaveファイル云々じゃなくて、
ウィンドウに表示する方法が分からないってこと?

991 名前: ◆ncKvmqq0Bs :03/10/05 13:13
よーし、ちょっくら次スレ立ててくるわ。

992 名前: ◆ncKvmqq0Bs :03/10/05 13:36
立てた〜

Win32API質問箱 Build14
http://pc2.2ch.net/test/read.cgi/tech/1065328397/


以下1000取りをドーゾ

993 名前:904=987 :03/10/05 13:39
>>992
乙 & ありがとうございます!

994 名前:デフォルトの名無しさん :03/10/05 13:45

   次  ス  レ  が  立  ち  ま  す  た  〜

   Win32API質問箱 Build14
   http://pc2.2ch.net/test/read.cgi/tech/1065328397/l50

995 名前:デフォルトの名無しさん :03/10/05 13:52
ShellExecuteという関数を使って
関連付けがなされているファイルを
起動できると聞きました
プログラム中にwindows.hがIncludeされていて
windows.hの中にshellapi.hがIncludeされています
shellapiの中に
SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
#define ShellExecute ShellExecuteA
と書かれていてぐぐって見たのですが
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
くらいしかなくどうやって使ったらいいかわかりません
具体的にはC:\testフォルダの中のaaa.xlsを指定すると
エクセルが立ち上がってaaa.xlsが読み込まれるというようにしたいです
windows2000+BCC551です
どうかよろしくお願いします

996 名前:デフォルトの名無しさん :03/10/05 13:57
------------------------------ 終 了 ! ------------------------------
以降は次スレで
  Win32API質問箱 Build14
  http://pc2.2ch.net/test/read.cgi/tech/1065328397/l50


残り5
(・∀・∀・)ヌッヘッホー


997 名前:デフォルトの名無しさん :03/10/05 14:06
# 質問内容はノータッチ...

>>995
次スレが立ってるから、あらためてそこに投稿されるとよいかと。

998 名前:デフォルトの名無しさん :03/10/05 14:08


999 名前:デフォルトの名無しさん :03/10/05 14:10
1000

1000 名前:デフォルトの名無しさん :03/10/05 14:10
1000は俺


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